diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..9d135aa --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: c71f21f3b1752597663d48b159a85a9d +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7076d1a..0000000 --- a/.editorconfig +++ /dev/null @@ -1,24 +0,0 @@ -# http://editorconfig.org - -root = true - -[*] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true -insert_final_newline = true -charset = utf-8 -end_of_line = lf - -[*.bat] -indent_style = tab -end_of_line = crlf - -[LICENSE] -insert_final_newline = false - -[Makefile] -indent_style = tab - -[*.{diff,patch}] -trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 03276ca..0000000 --- a/.gitignore +++ /dev/null @@ -1,112 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ - -# IDE / Editor -.idea/ -.vscode/ -~* - -# UCloud -.migrate/ diff --git a/docs/_static/.gitkeep b/.nojekyll similarity index 100% rename from docs/_static/.gitkeep rename to .nojekyll diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 26fd8c4..0000000 --- a/.travis.yml +++ /dev/null @@ -1,18 +0,0 @@ -# Config file for automatic testing at travis-ci.org - -language: python -python: - - 2.7 -dist: xenial -sudo: true - -# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors -install: pip install -e .[ci] - -# command to run tests, e.g. python setup.py test -script: - - make lint - - make test-cov - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 75b5248..0000000 --- a/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/Makefile b/Makefile deleted file mode 100644 index ce548ab..0000000 --- a/Makefile +++ /dev/null @@ -1,89 +0,0 @@ -.PHONY: clean-pyc clean-build docs clean - -# Browser Tools -define BROWSER_PYSCRIPT -import os, webbrowser, sys -try: - from urllib import pathname2url -except: - from urllib.request import pathname2url - -webbrowser.open("file://" + pathname2url(os.path.abspath(sys.argv[1]))) -endef -export BROWSER_PYSCRIPT -BROWSER := python -c "$$BROWSER_PYSCRIPT" - -# UCloud Tools Path -UCLOUD_TEMPLATE_PATH=../ucloud-api-model-v2/apisdk/lang/python/templates - -help: - @echo "clean - remove all build, test, coverage and Python artifacts" - @echo "clean-build - remove build artifacts" - @echo "clean-pyc - remove Python file artifacts" - @echo "clean-test - remove test and coverage artifacts" - @echo "lint - check style with flake8" - @echo "test - run tests quickly with the default Python" - @echo "test-all - run tests on every Python version with tox" - @echo "coverage - check code coverage quickly with the default Python" - @echo "docs - generate Sphinx HTML documentation, including API docs" - @echo "release - package and upload a release" - @echo "dist - package" - @echo "install - install the package to the active Python's site-packages" - -# unit test -test: clean - pytest - -test-cov: clean - pytest --cov=ucloud/core tests/test_core - -test-acc: clean - USDKACC=1 pytest --cov=ucloud - -test-all: clean - tox - -lint: - @flake8 --exclude=ucloud/services ucloud --ignore=E501,F401 - -fmt: - @black -l 80 ucloud tests examples - -dev: - @pip install -e .[dev] - -docs: - #sphinx-apidoc -o docs/services ucloud/services - $(MAKE) -C docs clean - $(MAKE) -C docs html - -docs-preview: - $(BROWSER) docs/_build/html/index.html - -clean: clean-build clean-pyc clean-test - -clean-build: - rm -fr build/ - rm -fr dist/ - rm -fr .eggs/ - -clean-pyc: - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -fr {} + - -clean-test: - rm -fr .tox/ - rm -f .coverage - rm -fr htmlcov/ - -migrate: - git clone https://github.com/ucloud/ucloud-sdk-python3.git .migrate - PYTHONPATH=. python3 scripts/migrate --source .migrate/ucloud --output ucloud - PYTHONPATH=. python3 scripts/migrate --source .migrate/tests --output tests - PYTHONPATH=. python3 scripts/migrate --source .migrate/docs --output docs - PYTHONPATH=. python3 scripts/migrate --source .migrate/examples --output examples - PYTHONPATH=. python3 scripts/migrate --source .migrate/README.md --output README.md - sed -i 's/unicode/unicode # noqa: F821/g' ucloud/core/utils/compat.py - rm -rf .migrate diff --git a/README.md b/README.md deleted file mode 100644 index 5a8dc96..0000000 --- a/README.md +++ /dev/null @@ -1,20 +0,0 @@ -

- -

- -

UCloud SDK Python 2

- -

-Latest Stable Version -Travis CI Status -Codecov Status -Doc Status -

- -UCloud SDK is a Python client library for accessing the UCloud API. - -This client can run on Linux, macOS and Windows. - -- Website: https://www.ucloud.cn/ -- Free software: Apache 2.0 license -- [Documentation](https://ucloud.github.io/ucloud-sdk-python2/) diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000..296ca13 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,124 @@ + + + + + + + + Overview: module code — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/core/auth/_cfg.html b/_modules/ucloud/core/auth/_cfg.html new file mode 100644 index 0000000..8bfedc0 --- /dev/null +++ b/_modules/ucloud/core/auth/_cfg.html @@ -0,0 +1,173 @@ + + + + + + + + ucloud.core.auth._cfg — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.auth._cfg

+# -*- coding: utf-8 -*-
+
+import hashlib
+from collections import OrderedDict
+from ucloud.core.typesystem import schema, fields, encoder
+
+
+class CredentialSchema(schema.Schema):
+    fields = {
+        "public_key": fields.Str(required=True),
+        "private_key": fields.Str(required=True),
+    }
+
+
+def verify_ac(private_key, params):
+    """ calculate signature by private_key/public_key
+
+    the keys can be found on `APIKey documentation <https://console.ucloud.cn/uapi/apikey>`__
+
+    >>> verify_ac("my_private_key", {"foo": "bar"})
+    '634edc1bb957c0d65e5ab5494cf3b7784fbc87af'
+
+    >>> verify_ac("my_private_key", {"foo": "bar"})
+    '634edc1bb957c0d65e5ab5494cf3b7784fbc87af'
+
+    :param private_key: private key
+    :param params:
+    :return:
+    """
+    params = OrderedDict(sorted(params.items(), key=lambda item: item[0]))
+    simplified = ""
+    for key, value in params.items():
+        simplified += str(key) + encoder.encode_value(value)
+    simplified += private_key
+    hash_new = hashlib.sha1()
+    hash_new.update(simplified.encode("utf-8"))
+    hash_value = hash_new.hexdigest()
+    return hash_value
+
+
+
[docs]class Credential(object): + """ credential is the object to store credential information + + the keys can be found on `APIKey documentation <https://console.ucloud.cn/uapi/apikey>`__ + + it can calculate signature for OpenAPI: + + >>> cred = Credential('my_public_key', 'my_private_key') + >>> cred.verify_ac({"foo": "bar"}) + 'd4411ab30953fb0bbcb1e7313081f05e4e91a394' + + :param public_key: + :param private_key: + """ + + PUBLIC_KEY_NAME = "PublicKey" + + def __init__(self, public_key, private_key, **kwargs): + self.public_key = public_key + self.private_key = private_key + + def verify_ac(self, args): + args[Credential.PUBLIC_KEY_NAME] = self.public_key + return verify_ac(self.private_key, args) + + @classmethod + def from_dict(cls, d): + parsed = CredentialSchema().dumps(d) + return cls(**parsed) + + def to_dict(self): + return {"public_key": self.public_key, "private_key": self.private_key}
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/core/client/_cfg.html b/_modules/ucloud/core/client/_cfg.html new file mode 100644 index 0000000..eee89c3 --- /dev/null +++ b/_modules/ucloud/core/client/_cfg.html @@ -0,0 +1,198 @@ + + + + + + + + ucloud.core.client._cfg — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.client._cfg

+# -*- coding: utf-8 -*-
+
+import logging
+from ucloud.core.typesystem import schema, fields
+
+
+class ConfigSchema(schema.Schema):
+    fields = {
+        "region": fields.Str(),
+        "project_id": fields.Str(),
+        "base_url": fields.Str(default="https://api.ucloud.cn"),
+        "user_agent": fields.Str(),
+        "timeout": fields.Int(default=30),
+        "max_retries": fields.Int(default=3),
+        "log_level": fields.Int(default=logging.INFO),
+        "validate_request": fields.Bool(default=True),
+        "ssl_verify": fields.Bool(default=True),
+        "ssl_cacert": fields.Str(),
+        "ssl_cert": fields.Str(),
+        "ssl_key": fields.Str(),
+    }
+
+
+
[docs]class Config(object): + """ + Config is the config of ucloud sdk, use for setting up + + :type region: str + :param region: Region is the region of backend service, + See also `Region list Documentation <https://docs.ucloud.cn/api/summary/regionlist>`_ + :type project_id: str + :param project_id: ProjectId is the unique identify of project, used for organize resources, + Most of resources should belong to a project. Sub-Account must have an project id. + See also `Project list Documentation <https://docs.ucloud.cn/api/summary/get_project_list>`_ + :type base_url: str + :param base_url: BaseUrl is the url of backend api + :param user_agent: UserAgent is an attribute for sdk client, used for distinguish who is using sdk. + See also `User Agent <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent>`_ + It will be appended to the end of sdk user-agent. + eg. "MyAPP/0.10.1" -> "Python/3.7.0 Python-SDK/0.1.0 MyAPP/0.10.1" + :type timeout: int + :param timeout: Timeout is timeout for every request. + :type max_retries: int + :param max_retries: MaxRetries is the number of max retry times. + Set MaxRetries more than 0 to enable auto-retry for network and service availability problem + if auto-retry is enabled, it will enable default retry policy using exponential backoff. + :type log_level: int + :param log_level: LogLevel is equal to builtin logging level, + if logLevel not be set, use INFO level as default. + """ + + def __init__( + self, + region=None, + project_id=None, + base_url="https://api.ucloud.cn", + user_agent=None, + timeout=30, + max_retries=3, + log_level=logging.INFO, + ssl_verify=True, + ssl_cacert=None, + ssl_cert=None, + ssl_key=None, + **kwargs + ): + self.region = region + self.project_id = project_id + self.base_url = base_url + self.user_agent = user_agent + self.timeout = timeout + self.max_retries = max_retries + self.log_level = log_level + self.ssl_verify = ssl_verify + self.ssl_cacert = ssl_cacert + self.ssl_cert = ssl_cert + self.ssl_key = ssl_key + + @classmethod + def from_dict(cls, d): + parsed = ConfigSchema().dumps(d) + return cls(**parsed) + + def to_dict(self): + return { + "region": self.region, + "project_id": self.project_id, + "base_url": self.base_url, + "user_agent": self.user_agent, + "timeout": self.timeout, + "max_retries": self.max_retries, + "log_level": self.log_level, + "ssl_verify": self.ssl_verify, + "ssl_cacert": self.ssl_cacert, + "ssl_cert": self.ssl_cert, + "ssl_key": self.ssl_key, + }
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/core/client/_client.html b/_modules/ucloud/core/client/_client.html new file mode 100644 index 0000000..ae93397 --- /dev/null +++ b/_modules/ucloud/core/client/_client.html @@ -0,0 +1,239 @@ + + + + + + + + ucloud.core.client._client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.client._client

+# -*- coding: utf-8 -*-
+
+import logging
+import sys
+from ucloud import version
+from ucloud.core.client._cfg import Config
+from ucloud.core.transport import (
+    Transport,
+    RequestsTransport,
+    Request,
+    SSLOption,
+)
+from ucloud.core.typesystem import encoder
+from ucloud.core.utils import log
+from ucloud.core.utils.middleware import Middleware
+from ucloud.core import auth, exc
+
+default_transport = RequestsTransport()
+
+
+
[docs]class Client(object): + def __init__(self, config, transport=None, middleware=None, logger=None): + cfg, cred = self._parse_dict_config(config) + self.config = cfg + self.credential = cred + self.transport = transport or default_transport + self.logger = logger or log.default_logger + if middleware is None: + middleware = Middleware() + middleware.response(self.logged_response_handler) + middleware.request(self.logged_request_handler) + self._middleware = middleware + +
[docs] def invoke(self, action, args=None, **options): + """ invoke will invoke the action with arguments data and options + + :param str action: the api action, like `CreateUHostInstance` + :param dict args: arguments of api(action), see doc: `UCloud API Documentation <https://docs.ucloud.cn/api>`__ + :return: + """ + retries = 0 + max_retries = options.get("max_retries") or self.config.max_retries + while retries <= max_retries: + try: + return self._send(action, args or {}, **options) + except exc.UCloudException as e: + for handler in self.middleware.exception_handlers: + handler(e) + if e.retryable and retries != max_retries: + logging.info( + "Retrying {action}: {args}".format( + action=action, args=args + ) + ) + retries += 1 + continue + raise e + except Exception as e: + for handler in self.middleware.exception_handlers: + handler(e) + raise e
+ + @property + def middleware(self): + return self._middleware + + def logged_request_handler(self, req): + self.logger.info("[request] {} {}".format(req.get("Action", ""), req)) + return req + + def logged_response_handler(self, resp): + self.logger.info( + "[response] {} {}".format(resp.get("Action", ""), resp) + ) + return resp + + @staticmethod + def _parse_dict_config(config): + return Config.from_dict(config), auth.Credential.from_dict(config) + + def _send(self, action, args, **options): + args["Action"] = action + for handler in self.middleware.request_handlers: + args = handler(args) + req = self._build_http_request(args) + max_retries = options.get("max_retries") or self.config.max_retries + timeout = options.get("timeout") or self.config.timeout + resp = self.transport.send( + req, + ssl_option=SSLOption( + self.config.ssl_verify, + self.config.ssl_cacert, + self.config.ssl_cert, + self.config.ssl_key, + ), + timeout=timeout, + max_retries=max_retries, + ).json() + for handler in self.middleware.response_handlers: + resp = handler(resp) + if int(resp.get("RetCode", -1)) != 0: + raise exc.RetCodeException( + action=req.data.get("Action"), + code=int(resp.get("RetCode")), + message=resp.get("Message"), + ) + return resp + + def _build_http_request(self, args): + config = { + "Region": self.config.region, + "ProjectId": self.config.project_id, + } + payload = {k: v for k, v in config.items() if v is not None} + payload.update({k: v for k, v in args.items() if v is not None}) + payload = encoder.encode(payload) + payload["Signature"] = self.credential.verify_ac(payload) + return Request( + url=self.config.base_url, + method="post", + data=payload, + headers={ + "User-Agent": self._build_user_agent(), + "Content-Type": "application/x-www-form-urlencoded", + }, + ) + + def _build_user_agent(self): + python_version = "{v[0]}.{v[1]}.{v[2]}".format(v=sys.version_info) + user_agent = "Python/{python_version} Python-SDK/{sdk_version}".format( + python_version=python_version, sdk_version=version.version + ) + (self.config.user_agent or "") + return user_agent + + def __repr__(self): + return '<{}(region="{}")>'.format( + self.__class__.__name__, self.config.region + )
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/core/testing/env.html b/_modules/ucloud/core/testing/env.html new file mode 100644 index 0000000..f4a9513 --- /dev/null +++ b/_modules/ucloud/core/testing/env.html @@ -0,0 +1,131 @@ + + + + + + + + ucloud.core.testing.env — ucloud-sdk-python2 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.testing.env

+# -*- coding: utf-8 -*-
+
+import os
+
+ACC_ENV_KEY = "USDK_ACC"
+ACC_SKIP_REASON = "skip test for non-acc environment"
+
+
+def get_skip_reason():
+    return ACC_SKIP_REASON
+
+
+
[docs]def is_acc(): + """ check test env is acceptance testing or not """ + return os.getenv(ACC_ENV_KEY)
+ + +
[docs]def is_ut(): + """ check test env is unit testing or not """ + return not is_acc()
+ + +
[docs]def pre_check_env(): + """ pre check environment for testing + + NOTE: system environment variables credential is required for test environment + """ + assert os.getenv("UCLOUD_PUBLIC_KEY"), "invalid public key" + assert os.getenv("UCLOUD_PRIVATE_KEY"), "invalid private key" + assert os.getenv("UCLOUD_REGION"), "invalid region"
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/core/transport/_requests.html b/_modules/ucloud/core/transport/_requests.html new file mode 100644 index 0000000..b83b90b --- /dev/null +++ b/_modules/ucloud/core/transport/_requests.html @@ -0,0 +1,220 @@ + + + + + + + + ucloud.core.transport._requests — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.transport._requests

+# -*- coding: utf-8 -*-
+
+import time
+import requests
+from urllib3.util.retry import Retry
+from requests.adapters import HTTPAdapter
+from ucloud.core.transport import http
+from ucloud.core.transport.http import Request, Response, SSLOption
+from ucloud.core.utils.middleware import Middleware
+
+
+
[docs]class RequestsTransport(http.Transport): + """ transport is the implementation of http client, use for send a request and return a http response + + :type max_retries: int + :param max_retries: max retries is the max number of transport request when occur http error + :type backoff_factor: float + :param backoff_factor: backoff factor will calculate the backoff delay during retrying, + the backoff delay = {backoff factor} * (2 ^ ({number of total retries} - 1)) + :type status_forcelist: tuple + :param status_forcelist: the status code list that could be retried + """ + + def __init__( + self, + max_retries=3, + backoff_factor=0.3, + status_forcelist=(500, 502, 504), + ): + self.max_retries = max_retries + self.backoff_factor = backoff_factor + self.status_forcelist = status_forcelist + self._adapter = self._load_adapter(max_retries) + self._middleware = Middleware() + +
[docs] def send(self, req, **options): + """ send request and return the response + + :param req: the full http request descriptor + :return: the response of http request + """ + for handler in self.middleware.request_handlers: + req = handler(req) + try: + resp = self._send(req, **options) + except Exception as e: + for handler in self.middleware.exception_handlers: + handler(e) + raise e + for handler in self.middleware.response_handlers: + resp = handler(resp) + return resp
+ + @property + def middleware(self): + """ the middleware object, see :mod: + + :return: the transport middleware + """ + return self._middleware + + def _send(self, req, **options): + with requests.Session() as session: + adapter = self._load_adapter(options.get("max_retries")) + session.mount("http://", adapter=adapter) + session.mount("https://", adapter=adapter) + ssl_option = options.get("ssl_option") + kwargs = self._build_ssl_option(ssl_option) if ssl_option else {} + req.request_time = time.time() + session_resp = session.request( + method=req.method.upper(), + url=req.url, + json=req.json, + data=req.data, + params=req.params, + headers=req.headers, + **kwargs + ) + resp = self.convert_response(session_resp) + resp.request = req + resp.response_time = time.time() + return resp + + @staticmethod + def _build_ssl_option(ssl_option): + kwargs = {"verify": ssl_option.ssl_verify and ssl_option.ssl_cacert} + if not ssl_option.ssl_cert: + return kwargs + if ssl_option.ssl_key: + kwargs["cert"] = ssl_option.ssl_cert, ssl_option.ssl_key + else: + kwargs["cert"] = ssl_option.ssl_cert + return kwargs + + def _load_adapter(self, max_retries=None): + if max_retries is None and self._adapter is not None: + return self._adapter + max_retries = max_retries or 0 + adapter = HTTPAdapter() + adapter.max_retries = Retry( + total=max_retries, + read=max_retries, + connect=max_retries, + backoff_factor=self.backoff_factor, + status_forcelist=self.status_forcelist, + ) + return adapter + + @staticmethod + def convert_response(r): + return Response( + url=r.url, + method=r.request.method, + status_code=r.status_code, + reason=r.reason, + headers=r.headers, + content=r.content, + encoding=r.encoding or r.apparent_encoding, + )
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/core/utils/middleware.html b/_modules/ucloud/core/utils/middleware.html new file mode 100644 index 0000000..a2275b3 --- /dev/null +++ b/_modules/ucloud/core/utils/middleware.html @@ -0,0 +1,167 @@ + + + + + + + + ucloud.core.utils.middleware — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.utils.middleware

+# -*- coding: utf-8 -*-
+
+
+
[docs]class Middleware(object): + """ middleware is the object to store request/response handlers + + >>> middleware = Middleware() + + Add a request handler to prepare the request + + >>> @middleware.request + ... def prepare(req): + ... req['Region'] = 'cn-bj2' + ... return req + + Add a response handler to log the response detail + + >>> @middleware.response + ... def logged(resp): + ... print(resp) + ... return resp + + >>> len(middleware.request_handlers), len(middleware.response_handlers) + (1, 1) + """ + + def __init__(self): + self.request_handlers = [] + self.response_handlers = [] + self.exception_handlers = [] + +
[docs] def request(self, handler, index=-1): + """ request is the request handler register to add request handler. + + :param handler: request handler function, receive request object + and return a new request + :param int index: the position of request in the handler list, + default is append it to end + :return: + """ + self.request_handlers.insert(index, handler) + return handler
+ +
[docs] def response(self, handler, index=-1): + """ response is the response handler register to add response handler. + + :param handler: response handler function, receive response object + and return a new response + :param int index: the position of response in the handler list, + default is append it to end + :return: + """ + self.response_handlers.insert(index, handler) + return handler
+ +
[docs] def exception(self, handler, index=-1): + """ exception is the exception handler register to add exception handler. + + :param handler: exception handler function, receive exception object + and raise a new exception or ignore it + :param int index: the position of handler in the handler list, + default is append it to end + :return: + """ + self.exception_handlers.insert(index, handler) + return handler
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/helpers/utils.html b/_modules/ucloud/helpers/utils.html new file mode 100644 index 0000000..4836380 --- /dev/null +++ b/_modules/ucloud/helpers/utils.html @@ -0,0 +1,187 @@ + + + + + + + + ucloud.helpers.utils — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.helpers.utils

+# -*- coding: utf-8 -*-
+
+import random
+import base64
+
+_lowercase = "abcdefghijklmnopqrstuvwxyz"
+_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+_numbers = "0123456789"
+_specials = "_"
+
+
+
[docs]def gen_password( + n, + lower_letters=_lowercase, + upper_letters=_uppercase, + number_letters=_numbers, + special_letters=_specials, + min_lower=1, + min_upper=1, + min_number=1, + min_specials=1, +): + """ generate password for any resource + + >>> len(gen_password(20)) + 20 + + :param int n: password total length + :param str lower_letters: all lowercase letters + :param str upper_letters: all uppercase letters + :param str number_letters: all number letters + :param str special_letters: all special letters + :param int min_lower: minimal number of lowercase letters + :param int min_upper: minimal number of uppercase letters + :param int min_number: minimal number of number letters + :param int min_specials: minimal number of special letters + :return: + """ + all_letters = "".join( + [lower_letters, upper_letters, number_letters, special_letters] + ) + minimal_total = min_lower + min_upper + min_number + min_specials + if n < minimal_total: + raise ValueError( + "the length of password must be larger than total minimal letters number" + ) + minimal_letters = "".join( + [ + gen_string(lower_letters, min_lower), + gen_string(upper_letters, min_upper), + gen_string(number_letters, min_number), + gen_string(special_letters, min_specials), + ] + ) + additional_letters = random.sample(all_letters, n - minimal_total) + results = list(minimal_letters) + additional_letters + random.shuffle(results) + return "".join(results)
+ + +def gen_string(letters, length): + return "".join([random.choice(letters) for i in range(length)]) + + +def first(arr): + if len(arr) == 0: + return None + return arr[0] + + +
[docs]def b64encode(s): + """ base64 encode + + :param str s: input string + :return: base64 string + """ + return base64.b64encode(s.encode()).decode()
+ + +
[docs]def b64decode(s): + """ base64 decode + + :param str s: base64 string + :return: output string + """ + return base64.b64decode(s.encode()).decode()
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/helpers/wait.html b/_modules/ucloud/helpers/wait.html new file mode 100644 index 0000000..86f8c95 --- /dev/null +++ b/_modules/ucloud/helpers/wait.html @@ -0,0 +1,201 @@ + + + + + + + + ucloud.helpers.wait — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.helpers.wait

+# -*- coding: utf-8 -*-
+
+import time
+import logging
+from ucloud.core import exc
+
+MAX_BACKOFF_INTERVAL = 10
+logger = logging.getLogger(__name__)
+
+
+class WaitTimeoutException(exc.UCloudException):
+    pass
+
+
+class StateConf(object):
+    """ StateConf is the utilities class to wait the state return by refresh function achieve the specific state,
+    the generally usage is wait the cloud resource, such as uhost, udb ... is
+    ready after created.
+    """
+
+    def __init__(
+        self,
+        pending,
+        target,
+        refresh,
+        timeout,
+        startup_delay=0,
+        min_backoff_interval=0.1,
+        max_backoff_interval=MAX_BACKOFF_INTERVAL,
+    ):
+        self.pending = pending
+        self.target = target
+        self.refresh = refresh
+        self.timeout = timeout
+        self.startup_delay = startup_delay
+        self.min_backoff_interval = min_backoff_interval
+        self.max_backoff_interval = max_backoff_interval
+
+    def wait(self):
+        start_time = time.time()
+        interval = self.min_backoff_interval
+        time.sleep(self.startup_delay)
+        while time.time() - start_time < self.timeout:
+            state = self.refresh()
+            if state in self.pending:
+                time.sleep(interval)
+                interval *= 2
+                if interval > self.max_backoff_interval:
+                    interval = self.max_backoff_interval
+                logger.info(
+                    "waiting state for {self.refresh}, got state {state}".format(
+                        self=self, state=state
+                    )
+                )
+                continue
+            if state in self.target:
+                return
+        raise WaitTimeoutException(
+            "wait timeout {self.timeout}s for {self.refresh}".format(self=self)
+        )
+
+
+
[docs]def wait_for_state( + pending, + target, + refresh, + timeout, + startup_delay=0, + min_backoff_interval=0.1, + max_backoff_interval=MAX_BACKOFF_INTERVAL, +): + """ wait_for_state is a utilities function to wait the state return by refresh function achieve the specific state, + the generally usage is wait the cloud resource, such as uhost, udb ... is + ready after created. + + >>> wait_for_state( + ... pending=["pending"], + ... target=["running"], + ... refresh=lambda: "running", + ... timeout=0.5, + ... ) + + :param pending: pending is the list of pending state, the state is returned by refresh function + :param target: target is the list of target state, it is usually the terminate state, eg. running and fail + :param refresh: the customized refresh function, expect no arguments and return a state + :param timeout: timeout is the total time to wait state is achieved + :param startup_delay: the time to wait before first refresh function is called + :param min_backoff_interval: the backoff time for first refresh interval + :param max_backoff_interval: the max backoff time for refresh interval + """ + conf = StateConf( + pending=pending, + target=target, + refresh=refresh, + timeout=timeout, + startup_delay=startup_delay, + min_backoff_interval=min_backoff_interval, + max_backoff_interval=max_backoff_interval, + ) + return conf.wait()
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/ipsecvpn/client.html b/_modules/ucloud/services/ipsecvpn/client.html new file mode 100644 index 0000000..43b53e7 --- /dev/null +++ b/_modules/ucloud/services/ipsecvpn/client.html @@ -0,0 +1,215 @@ + + + + + + + + ucloud.services.ipsecvpn.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ipsecvpn.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ipsecvpn.schemas import apis
+
+
+
[docs]class IPSecVPNClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(IPSecVPNClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def describe_remote_vpn_gateway(self, req=None, **kwargs): + """ DescribeRemoteVPNGateway - 获取客户VPN网关信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 数据分页值, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **RemoteVPNGatewayIds** (list) - 客户VPN网关的资源ID,例如RemoteVPNGatewayIds.0代表希望获取客户VPN网关1的信息,RemoteVPNGatewayIds.1代表客户VPN网关2,如果为空,则返回当前Region中所有客户VPN网关实例的信息 + - **Tag** (str) - 业务组名称,若指定则返回业务组下所有客户VPN网关信息 + + **Response** + + - **DataSet** (list) - 见 **RemoteVPNGatewayDataSet** 模型定义 + - **TotalCount** (int) - 符合条件的客户VPN网关总数 + + **Response Model** + + **RemoteVPNGatewayDataSet** + + - **ActiveTunnels** (str) - 活跃的隧道id + - **CreateTime** (int) - 创建时间 + - **Remark** (str) - 备注 + - **RemoteVPNGatewayAddr** (str) - 客户网关IP地址 + - **RemoteVPNGatewayId** (str) - 客户网关ID + - **RemoteVPNGatewayName** (str) - 客户网关名称 + - **Tag** (str) - 用户组 + - **TunnelCount** (int) - 活跃的隧道数量 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeRemoteVPNGatewayRequestSchema().dumps(d) + resp = self.invoke("DescribeRemoteVPNGateway", d, **kwargs) + return apis.DescribeRemoteVPNGatewayResponseSchema().loads(resp)
+ +
[docs] def describe_vpn_tunnel(self, req=None, **kwargs): + """ DescribeVPNTunnel - 获取VPN隧道信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 数据分页值, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **Tag** (str) - 业务组名称,若指定则返回指定的业务组下的所有VPN网关的信息 + - **VPNTunnelIds** (list) - VPN隧道的资源ID,例如VPNTunnelIds.0代表希望获取信息的VPN隧道1,VPNTunneIds.1代表VPN隧道2,如果为空,则返回当前Region中所有的VPN隧道实例 + + **Response** + + - **DataSet** (list) - 见 **VPNTunnelDataSet** 模型定义 + - **TotalCount** (int) - VPN隧道总数 + + **Response Model** + + **IPSecData** + + - **IPSecAuthenticationAlgorithm** (str) - IPSec通道中使用的认证算法 + - **IPSecEncryptionAlgorithm** (str) - IPSec通道中使用的加密算法 + - **IPSecLocalSubnetIds** (list) - 指定VPN连接的本地子网,用逗号分隔 + - **IPSecPFSDhGroup** (str) - 是否开启PFS功能,Disable表示关闭,数字表示DH组 + - **IPSecProtocol** (str) - 使用的安全协议,ESP或AH + - **IPSecRemoteSubnets** (list) - 指定VPN连接的客户网段,用逗号分隔 + - **IPSecSALifetime** (str) - IPSec中SA的生存时间 + - **IPSecSALifetimeBytes** (str) - IPSec中SA的生存时间(以字节计) + + **IKEData** + + - **IKEAuthenticationAlgorithm** (str) - IKE认证算法 + - **IKEDhGroup** (str) - IKEDH组 + - **IKEEncryptionAlgorithm** (str) - IKE加密算法 + - **IKEExchangeMode** (str) - IKEv1协商模式 + - **IKELocalId** (str) - IKE本地ID标识 + - **IKEPreSharedKey** (str) - IKE预共享秘钥 + - **IKERemoteId** (str) - IKE对端ID标识 + - **IKESALifetime** (str) - IKE秘钥生存时间 + - **IKEVersion** (str) - IKE版本 + + **VPNTunnelDataSet** + + - **CreateTime** (int) - 创建时间 + - **IKEData** (dict) - 见 **IKEData** 模型定义 + - **IPSecData** (dict) - 见 **IPSecData** 模型定义 + - **Remark** (str) - 备注 + - **RemoteVPNGatewayId** (str) - 对端网关Id + - **RemoteVPNGatewayName** (str) - 对端网关名字 + - **Tag** (str) - 用户组 + - **VPCId** (str) - 所属VPCId + - **VPCName** (str) - 所属VOC名字 + - **VPNGatewayId** (str) - 所属VPN网关id + - **VPNGatewayName** (str) - VPN网关名字 + - **VPNTunnelId** (str) - 隧道id + - **VPNTunnelName** (str) - 隧道名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPNTunnelRequestSchema().dumps(d) + resp = self.invoke("DescribeVPNTunnel", d, **kwargs) + return apis.DescribeVPNTunnelResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/pathx/client.html b/_modules/ucloud/services/pathx/client.html new file mode 100644 index 0000000..5ae39bd --- /dev/null +++ b/_modules/ucloud/services/pathx/client.html @@ -0,0 +1,260 @@ + + + + + + + + ucloud.services.pathx.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.pathx.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.pathx.schemas import apis
+
+
+
[docs]class PathXClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(PathXClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_global_ssh_instance(self, req=None, **kwargs): + """ CreateGlobalSSHInstance - 创建GlobalSSH实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Area** (str) - (Required) 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个 + - **AreaCode** (str) - (Required) AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个 + - **Port** (int) - (Required) SSH端口,1-65535且不能使用80,443端口 + - **TargetIP** (str) - (Required) 被SSH访问的IP + - **ChargeType** (str) - 支付方式,如按月、按年、按时 + - **CouponId** (str) - 使用代金券可冲抵部分费用 + - **Quantity** (int) - 购买数量 + - **Remark** (str) - 备注信息 + + **Response** + + - **AcceleratingDomain** (str) - 加速域名,访问该域名可就近接入 + - **InstanceId** (str) - 实例ID,资源唯一标识 + - **Message** (str) - 提示信息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.CreateGlobalSSHInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateGlobalSSHInstance", d, **kwargs) + return apis.CreateGlobalSSHInstanceResponseSchema().loads(resp)
+ +
[docs] def delete_global_ssh_instance(self, req=None, **kwargs): + """ DeleteGlobalSSHInstance - 删除GlobalSSH实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - (Required) 实例Id,资源的唯一标识 + + **Response** + + - **Message** (str) - 提示信息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteGlobalSSHInstanceRequestSchema().dumps(d) + resp = self.invoke("DeleteGlobalSSHInstance", d, **kwargs) + return apis.DeleteGlobalSSHInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_global_ssh_area(self, req=None, **kwargs): + """ DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 机房地域代号,如hk、 us-ca、 us-ws等。不填默认为空,返回所有支持地区。 + + **Response** + + - **AreaSet** (list) - 见 **GlobalSSHArea** 模型定义 + - **Message** (str) - 提示信息 + + **Response Model** + + **GlobalSSHArea** + + - **Area** (str) - GlobalSSH覆盖的地区,如香港、东京、洛杉矶等 + - **AreaCode** (str) - 地区代号,以地区AirPort Code + - **RegionSet** (list) - ucloud机房代号构成的数组,如["hk","us-ca"] + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeGlobalSSHAreaRequestSchema().dumps(d) + resp = self.invoke("DescribeGlobalSSHArea", d, **kwargs) + return apis.DescribeGlobalSSHAreaResponseSchema().loads(resp)
+ +
[docs] def describe_global_ssh_instance(self, req=None, **kwargs): + """ DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - 实例ID,资源唯一标识 + + **Response** + + - **InstanceSet** (list) - 见 **GlobalSSHInfo** 模型定义 + + **Response Model** + + **GlobalSSHInfo** + + - **AcceleratingDomain** (str) - 加速域名 + - **Area** (str) - 被SSH访问的IP所在地区 + - **ChargeType** (str) - 支付周期,如Month,Year等 + - **CreateTime** (int) - 资源创建时间戳 + - **ExpireTime** (int) - 资源过期时间戳 + - **InstanceId** (str) - 实例ID,资源唯一标识 + - **Port** (int) - SSH登陆端口 + - **Remark** (str) - 备注信息 + - **TargetIP** (str) - 被SSH访问的EIP + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DescribeGlobalSSHInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeGlobalSSHInstance", d, **kwargs) + return apis.DescribeGlobalSSHInstanceResponseSchema().loads(resp)
+ +
[docs] def modify_global_ssh_port(self, req=None, **kwargs): + """ ModifyGlobalSSHPort - 修改GlobalSSH端口 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - (Required) 实例ID,资源唯一标识 + - **Port** (int) - (Required) 调整后的SSH登陆端口 + + **Response** + + - **Message** (str) - 提示信息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.ModifyGlobalSSHPortRequestSchema().dumps(d) + resp = self.invoke("ModifyGlobalSSHPort", d, **kwargs) + return apis.ModifyGlobalSSHPortResponseSchema().loads(resp)
+ +
[docs] def modify_global_ssh_remark(self, req=None, **kwargs): + """ ModifyGlobalSSHRemark - 修改GlobalSSH备注 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - (Required) 实例ID,资源唯一标识 + - **Remark** (str) - 备注信息,不填默认为空字符串 + + **Response** + + - **Message** (str) - 接口返回消息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.ModifyGlobalSSHRemarkRequestSchema().dumps(d) + resp = self.invoke("ModifyGlobalSSHRemark", d, **kwargs) + return apis.ModifyGlobalSSHRemarkResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/stepflow/client.html b/_modules/ucloud/services/stepflow/client.html new file mode 100644 index 0000000..27494c5 --- /dev/null +++ b/_modules/ucloud/services/stepflow/client.html @@ -0,0 +1,185 @@ + + + + + + + + ucloud.services.stepflow.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.stepflow.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.stepflow.schemas import apis
+
+
+
[docs]class StepFlowClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(StepFlowClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def create_sf_workflow_from_template(self, req=None, **kwargs): + """ CreateSFWorkflowFromTemplate - 导入工作流定义 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Namespace** (str) - (Required) 需要创建的工作流namespace + - **Workflow** (str) - (Required) 描述工作流定义的base64字符串 + - **WorkflowName** (str) - (Required) 需要创建的工作流名称 + + **Response** + + - **Message** (str) - 返回消息 + - **Version** (int) - 创建的工作流版本号 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateSFWorkflowFromTemplateRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateSFWorkflowFromTemplate", d, **kwargs) + return apis.CreateSFWorkflowFromTemplateResponseSchema().loads(resp)
+ +
[docs] def get_sf_workflow_template(self, req=None, **kwargs): + """ GetSFWorkflowTemplate - 导出工作流定义 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **WorkflowId** (str) - (Required) 被导出工作流的Id + - **WorkflowVersion** (int) - 被导出工作流的版本号。取值范围:WorkflowVersion >= 1;默认会获取发布版本对应的workflow;超过最大版本会返回错误 + + **Response** + + - **Message** (str) - 返回消息 + - **Version** (int) - 导出工作流的版本号 + - **Workflow** (dict) - 见 **WorkflowTemplate** 模型定义 + - **WorkflowId** (str) - 导出工作流的Id + + **Response Model** + + **Param** + + - **Name** (str) - 参数名称 + - **Type** (str) - 参数类型 + - **Value** (str) - 参数值 + + **ActivityTemplate** + + - **Input** (dict) - Activity的输入 + - **Name** (str) - Activity的名字 + - **Next** (str) - 下一个Activity的名字 + - **Output** (list) - Activity的输出,详见Param + - **RetryTimes** (str) - Activity的重试次数 + - **Timeout** (str) - Activity的超时时间 + - **Type** (str) - Activity的类型 + + **WorkflowTemplate** + + - **Activites** (list) - 见 **ActivityTemplate** 模型定义 + - **Input** (list) - 见 **Param** 模型定义 + - **Output** (list) - 见 **Param** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetSFWorkflowTemplateRequestSchema().dumps(d) + resp = self.invoke("GetSFWorkflowTemplate", d, **kwargs) + return apis.GetSFWorkflowTemplateResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/uaccount/client.html b/_modules/ucloud/services/uaccount/client.html new file mode 100644 index 0000000..c47a073 --- /dev/null +++ b/_modules/ucloud/services/uaccount/client.html @@ -0,0 +1,265 @@ + + + + + + + + ucloud.services.uaccount.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uaccount.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uaccount.schemas import apis
+
+
+
[docs]class UAccountClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UAccountClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def create_project(self, req=None, **kwargs): + """ CreateProject - 创建项目 + + **Request** + + - **ProjectName** (str) - (Required) 项目名称 + + **Response** + + - **ProjectId** (str) - 所创建项目的Id + + """ + d = {} + req and d.update(req) + d = apis.CreateProjectRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateProject", d, **kwargs) + return apis.CreateProjectResponseSchema().loads(resp)
+ +
[docs] def get_project_list(self, req=None, **kwargs): + """ GetProjectList - 获取项目列表 + + **Request** + + - **IsFinance** (str) - 是否是财务账号 + + **Response** + + - **ProjectCount** (int) - 项目总数 + - **ProjectSet** (list) - 见 **ProjectListInfo** 模型定义 + + **Response Model** + + **ProjectListInfo** + + - **CreateTime** (int) - 创建时间(Unix时间戳) + - **IsDefault** (bool) - 是否为默认项目 + - **MemberCount** (int) - 项目下成员数量 + - **ParentId** (str) - 父项目ID + - **ParentName** (str) - 父项目名称 + - **ProjectId** (str) - 项目ID + - **ProjectName** (str) - 项目名称 + - **ResourceCount** (int) - 项目下资源数量 + + """ + d = {} + req and d.update(req) + d = apis.GetProjectListRequestSchema().dumps(d) + resp = self.invoke("GetProjectList", d, **kwargs) + return apis.GetProjectListResponseSchema().loads(resp)
+ +
[docs] def get_region(self, req=None, **kwargs): + """ GetRegion - 获取用户在各数据中心的权限等信息 + + **Request** + + + **Response** + + - **Regions** (list) - 见 **RegionInfo** 模型定义 + + **Response Model** + + **RegionInfo** + + - **BitMaps** (str) - 用户在此数据中心的权限位 + - **IsDefault** (bool) - 是否用户当前默认数据中心 + - **Region** (str) - 地域名字,如cn-bj + - **RegionId** (int) - 数据中心ID + - **RegionName** (str) - 数据中心名称 + - **Zone** (str) - 可用区名字,如cn-bj-01 + + """ + d = {} + req and d.update(req) + d = apis.GetRegionRequestSchema().dumps(d) + resp = self.invoke("GetRegion", d, **kwargs) + return apis.GetRegionResponseSchema().loads(resp)
+ +
[docs] def get_user_info(self, req=None, **kwargs): + """ GetUserInfo - 获取用户信息 + + **Request** + + + **Response** + + - **DataSet** (list) - 见 **UserInfo** 模型定义 + + **Response Model** + + **UserInfo** + + - **Admin** (int) - 是否超级管理员 0:否 1:是 + - **Administrator** (str) - 管理员 + - **AuthState** (str) - 实名认证状态 + - **City** (str) - 城市 + - **CompanyName** (str) - 公司名称 + - **Finance** (int) - 是否有财务权限 0:否 1:是 + - **IndustryType** (int) - 所属行业 + - **PhonePrefix** (str) - 国际号码前缀 + - **Province** (str) - 省份 + - **UserAddress** (str) - 公司地址 + - **UserEmail** (str) - 用户邮箱 + - **UserId** (int) - 用户Id + - **UserName** (str) - 称呼 + - **UserPhone** (str) - 用户手机 + - **UserType** (int) - 会员类型 + - **UserVersion** (int) - 是否子帐户(大于100为子帐户) + + """ + d = {} + req and d.update(req) + d = apis.GetUserInfoRequestSchema().dumps(d) + resp = self.invoke("GetUserInfo", d, **kwargs) + return apis.GetUserInfoResponseSchema().loads(resp)
+ +
[docs] def modify_project(self, req=None, **kwargs): + """ ModifyProject - 修改项目 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ProjectName** (str) - (Required) 新的项目名称 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.ModifyProjectRequestSchema().dumps(d) + resp = self.invoke("ModifyProject", d, **kwargs) + return apis.ModifyProjectResponseSchema().loads(resp)
+ +
[docs] def terminate_project(self, req=None, **kwargs): + """ TerminateProject - 删除项目 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.TerminateProjectRequestSchema().dumps(d) + resp = self.invoke("TerminateProject", d, **kwargs) + return apis.TerminateProjectResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/ucdn/client.html b/_modules/ucloud/services/ucdn/client.html new file mode 100644 index 0000000..f328d17 --- /dev/null +++ b/_modules/ucloud/services/ucdn/client.html @@ -0,0 +1,710 @@ + + + + + + + + ucloud.services.ucdn.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ucdn.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ucdn.schemas import apis
+
+
+
[docs]class UCDNClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UCDNClient, self).__init__(config, transport, middleware, logger) + +
[docs] def batch_describe_new_ucdn_domain(self, req=None, **kwargs): + """ BatchDescribeNewUcdnDomain - 批量获取加速域名配置 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ChannelType** (str) - 渠道ucdn、ufile、uvideo + - **DomainId** (list) - 域名id,创建域名时生成的资源id,默认获取账号下的所有域名信息,n为自然数 + - **Limit** (int) - 返回数据长度,如果制定了Offset,则默认20,否则默认全部,非负整数 + - **Offset** (int) - 数据偏移量,默认0,非负整数 + + **Response** + + - **Arrearage** (list) - 标识欠费的数组,数组含有下列元素值, 1=国内流量有欠费 2=国外流量有欠费 3=国内带宽有欠费 4=国外带宽有欠费 + - **ChargeType** (int) - 当前计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 + - **DomainSet** (list) - 见 **DomainInfo** 模型定义 + - **LastChargeType** (int) - 表示最后一次切换的计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 40=未选择计费方式 + - **MaxDomainNum** (int) - 最大域名数量,默认20 + - **TotalCount** (int) - 满足条件的域名个数 + - **Vip** (str) - vip标示,yes-是 no-否 + + **Response Model** + + **CacheConf** + + - **CacheBehavior** (int) - 是否缓存,1为缓存,0为不缓存。为0的情况下,CacheTTL和CacheUnit强制不生效 + - **CacheTTL** (int) - 缓存时间 + - **CacheUnit** (str) - 缓存时间的单位。sec(秒),min(分钟),hour(小时),day(天) + - **Description** (str) - 缓存规则描述 + - **FollowOriginRule** (int) - 是否优先遵循源站头部缓存策略,0为不优先遵循源站,1为优先遵循源站缓存头部。默认为0 + - **HttpCodePattern** (str) - 状态码默认情况只缓存200类状态码,支持正则 + - **IgnoreQueryString** (int) - 是否忽略参数缓存(0为不忽略,1为忽略,默认为0) + - **PathPattern** (str) - 路径模式,支持正则 + + **AccessConf** + + - **IpBlacklist** (str) - 多个ip用逗号隔开 + + **DomainInfo** + + - **AccessConf** (dict) - 见 **AccessConf** 模型定义 + - **AreaCode** (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域 + - **CacheConf** (list) - 见 **CacheConf** 模型定义 + - **CacheHost** (str) - 缓存Host,不同的域名可以配置为同一个CacheHost来实现缓存共享,默认为加速域名 + - **CdnProtocol** (str) - 加速类型http,http|https + - **CdnType** (str) - 加速域名的业务类型,web代表网站,stream代表视频,download代表下载。 + - **CertName** (str) - 证书名称 + - **Cname** (str) - cdn域名。创建加速域名生成的cdn域名,用于设置CNAME记录 + - **CreateTime** (int) - 域名创建的时间。格式:时间戳 + - **Domain** (str) - 域名,用户创建加速的域名 + - **DomainId** (str) - 域名id,创建域名时生成的id + - **HttpsStatusAbroad** (str) - 国外https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用 + - **HttpsStatusCn** (str) - 国内https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用 + - **NullRefer** (bool) - ReferType为白名单时,NullRefer为false代表不允许NULL refer访问,为true代表允许Null refer访问 + - **OriginHost** (str) - 回源Http请求头部Host,默认是加速域名 + - **OriginIp** (list) - 源站ip即cdn服务器回源访问的ip地址。支持多个源站ip,多个源站ip,可表述为如:[1.1.1.1,2.2.2.2] + - **OriginPort** (int) - 回源端口 + - **OriginProtocol** (str) - 源站协议http,http|https 默认http + - **ReferList** (list) - Refer列表,支持正则表达式 + - **ReferStatus** (bool) - refer配置开关,true打开,false关闭 + - **ReferType** (int) - 0白名单,1黑名单 + - **Status** (str) - 创建的加速域名的当前的状态。check代表审核中,checkSuccess代表审核通过,checkFail代表审核失败,enable代表加速中,disable代表停止加速,delete代表删除加速 enableing代表正在开启加速,disableing代表正在停止加速中,deleteing代表删除中 + - **Tag** (str) - 业务组,默认为Default + - **TestUrl** (str) - 测试url,用于域名创建加速时的测试 + - **ValidTime** (int) - 开始分配Cname时间。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.BatchDescribeNewUcdnDomainRequestSchema().dumps(d) + resp = self.invoke("BatchDescribeNewUcdnDomain", d, **kwargs) + return apis.BatchDescribeNewUcdnDomainResponseSchema().loads(resp)
+ +
[docs] def describe_new_ucdn_prefetch_cache_task(self, req=None, **kwargs): + """ DescribeNewUcdnPrefetchCacheTask - 获取预取任务状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + - **Limit** (int) - 返回数据长度,默认全部,自然数 + - **Offset** (int) - 数据偏移量,默认为0,自然数 + - **Status** (str) - 需要获取的内容预热的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态 + - **TaskId** (list) - 提交任务时返回的任务ID + + **Response** + + - **TaskList** (list) - 见 **TaskInfo** 模型定义 + - **TotalCount** (int) - 预热任务的总数 + + **Response Model** + + **UrlProgressInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **FinishTime** (int) - 任务完成时间。格式为Unix Timestamp + - **Progress** (int) - 刷新进度,单位% + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **Url** (str) - 刷新的单条url + + **TaskInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **TaskId** (str) - 提交任务时返回的任务ID + - **Type** (str) - file/dir 刷新任务会返回Type,预取任务没有 + - **UrlLists** (list) - 见 **UrlProgressInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DescribeNewUcdnPrefetchCacheTaskRequestSchema().dumps(d) + resp = self.invoke("DescribeNewUcdnPrefetchCacheTask", d, **kwargs) + return apis.DescribeNewUcdnPrefetchCacheTaskResponseSchema().loads(resp)
+ +
[docs] def describe_new_ucdn_refresh_cache_task(self, req=None, **kwargs): + """ DescribeNewUcdnRefreshCacheTask - 获取域名刷新任务状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + - **Limit** (int) - 返回数据长度,默认全部,自然数 + - **Offset** (int) - 数据偏移量,默认为0,自然数 + - **Status** (str) - 需要获取的内容刷新的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态 + - **TaskId** (list) - 提交任务时返回的任务ID + + **Response** + + - **TaskList** (list) - 见 **TaskInfo** 模型定义 + - **TotalCount** (int) - 刷新任务的总数 + + **Response Model** + + **UrlProgressInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **FinishTime** (int) - 任务完成时间。格式为Unix Timestamp + - **Progress** (int) - 刷新进度,单位% + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **Url** (str) - 刷新的单条url + + **TaskInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **TaskId** (str) - 提交任务时返回的任务ID + - **Type** (str) - file/dir 刷新任务会返回Type,预取任务没有 + - **UrlLists** (list) - 见 **UrlProgressInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DescribeNewUcdnRefreshCacheTaskRequestSchema().dumps(d) + resp = self.invoke("DescribeNewUcdnRefreshCacheTask", d, **kwargs) + return apis.DescribeNewUcdnRefreshCacheTaskResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_bandwidth(self, req=None, **kwargs): + """ GetNewUcdnDomainBandwidth - 获取域名带宽数据 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **BandwidthList** (list) - 见 **BandwidthInfo** 模型定义 + - **Traffic** (str) - 从起始时间到结束时间内的所使用的CDN总流量,单位GB + + **Response Model** + + **BandwidthInfo** + + - **CdnBandwidth** (str) - 返回值返回指定时间区间内CDN的带宽峰值,单位Mbps(如果请求参数Type为0,则Value是五分钟粒度的带宽值,如果Type为1,则Value是1小时的带宽峰值,如果Type为2,则Value是一天内的带宽峰值) + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainBandwidthRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainBandwidth", d, **kwargs) + return apis.GetNewUcdnDomainBandwidthResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_hit_rate(self, req=None, **kwargs): + """ GetNewUcdnDomainHitRate - 获取域名命中率 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **HitRateList** (list) - 见 **HitRateInfo** 模型定义 + + **Response Model** + + **HitRateInfo** + + - **FlowHitRate** (float) - 流量命中率,单位% + - **RequestHitRate** (float) - 请求数命中率,单位% + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainHitRateRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainHitRate", d, **kwargs) + return apis.GetNewUcdnDomainHitRateResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_http_code(self, req=None, **kwargs): + """ GetNewUcdnDomainHttpCode - 获取域名状态码监控 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **HttpCodeDetail** (list) - 见 **HttpCodeInfo** 模型定义 + + **Response Model** + + **HttpCodeInfo** + + - **HttpFiveXX** (int) - 5xx数量 + - **HttpFourXX** (int) - 4xx数量 + - **HttpOneXX** (int) - 1xx数量 + - **HttpThreeXX** (int) - 3xx数量 + - **HttpTwoXX** (int) - 2xx数量 + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainHttpCodeRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainHttpCode", d, **kwargs) + return apis.GetNewUcdnDomainHttpCodeResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_http_code_v2(self, req=None, **kwargs): + """ GetNewUcdnDomainHttpCodeV2 - 获取域名详细状态码监控 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - (Required) 查询的起始时间,格式为Unix Timestamp。 + - **EndTime** (int) - (Required) 查询的结束时间,格式为Unix Timestamp。 + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天粒度,3表示按照一分钟粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + + **Response** + + - **HttpCodeV2Detail** (list) - 见 **HttpCodeV2Detail** 模型定义 + + **Response Model** + + **HttpCodeV2Detail** + + - **Http100** (int) - http100数量 + - **Http101** (int) - http101数量 + - **Http102** (int) - http102数量 + - **Http200** (int) - http200数量 + - **Http201** (int) - http201数量 + - **Http202** (int) - http202数量 + - **Http203** (int) - http203数量 + - **Http204** (int) - http204数量 + - **Http205** (int) - http205数量 + - **Http206** (int) - http206数量 + - **Http207** (int) - http207数量 + - **Http300** (int) - http300数量 + - **Http301** (int) - http301数量 + - **Http302** (int) - http302数量 + - **Http303** (int) - http303数量 + - **Http304** (int) - http304数量 + - **Http305** (int) - http305数量 + - **Http306** (int) - http306数量 + - **Http307** (int) - http307数量 + - **Http400** (int) - http400数量 + - **Http401** (int) - http401数量 + - **Http402** (int) - http402数量 + - **Http403** (int) - http403数量 + - **Http404** (int) - http404数量 + - **Http405** (int) - http405数量 + - **Http406** (int) - http406数量 + - **Http407** (int) - http407数量 + - **Http408** (int) - http408数量 + - **Http409** (int) - http409数量 + - **Http410** (int) - http410数量 + - **Http411** (int) - http411数量 + - **Http412** (int) - http412数量 + - **Http413** (int) - http413数量 + - **Http414** (int) - http414数量 + - **Http415** (int) - http415数量 + - **Http416** (int) - http416数量 + - **Http417** (int) - http417数量 + - **Http418** (int) - http418数量 + - **Http421** (int) - http421数量 + - **Http422** (int) - http422数量 + - **Http423** (int) - http423数量 + - **Http424** (int) - http424数量 + - **Http425** (int) - http425数量 + - **Http426** (int) - http426数量 + - **Http449** (int) - http449数量 + - **Http451** (int) - http451数量 + - **Http500** (int) - http500数量 + - **Http501** (int) - http501数量 + - **Http502** (int) - http502数量 + - **Http503** (int) - http503数量 + - **Http504** (int) - http504数量 + - **Http505** (int) - http505数量 + - **Http506** (int) - http506数量 + - **Http507** (int) - http507数量 + - **Http509** (int) - http509数量 + - **Http510** (int) - http510数量 + - **Time** (int) - 时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainHttpCodeV2RequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainHttpCodeV2", d, **kwargs) + return apis.GetNewUcdnDomainHttpCodeV2ResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_request_num(self, req=None, **kwargs): + """ GetNewUcdnDomainRequestNum - 获取域名请求数 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **RequestList** (list) - 见 **RequestInfo** 模型定义 + + **Response Model** + + **RequestInfo** + + - **CdnRequest** (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和 + - **OriginRequest** (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和 + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainRequestNumRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainRequestNum", d, **kwargs) + return apis.GetNewUcdnDomainRequestNumResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_log(self, req=None, **kwargs): + """ GetUcdnDomainLog - 获取加速域名原始日志 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。 + - **DomainId** (list) - 域名ID,创建加速域名时生成。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + - **Type** (int) - 查询粒度 0=default(没有粒度) 1=按小时 2=按天 + + **Response** + + - **LogSet** (list) - 见 **LogSetList** 模型定义 + + **Response Model** + + **LogSetInfo** + + - **AbroadLog** (list) - 国外日志url列表 + - **CnLog** (list) - 国内日志url列表 + - **Time** (int) - 日志时间UnixTime + + **LogSetList** + + - **Domain** (str) - 域名 + - **Logs** (list) - 见 **LogSetInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainLogRequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainLog", d, **kwargs) + return apis.GetUcdnDomainLogResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_prefetch_enable(self, req=None, **kwargs): + """ GetUcdnDomainPrefetchEnable - 获取域名预取开启状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **DomainId** (str) - (Required) 域名ID,创建加速域名时生成。 + + **Response** + + - **Enable** (int) - 0表示该域名未开启预取,1表示该域名已开启预取 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainPrefetchEnableRequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainPrefetchEnable", d, **kwargs) + return apis.GetUcdnDomainPrefetchEnableResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_request_num_v2(self, req=None, **kwargs): + """ GetUcdnDomainRequestNumV2 - 获取域名请求数 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - (Required) 查询的起始时间,格式为Unix Timestamp + - **EndTime** (int) - (Required) 查询的结束时间,格式为Unix Timestamp + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度, 3=按1分钟) + - **Areacode** (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + + **Response** + + - **RequestList** (list) - 见 **RequestInfo** 模型定义 + + **Response Model** + + **RequestInfo** + + - **CdnRequest** (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和 + - **OriginRequest** (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和 + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainRequestNumV2RequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainRequestNumV2", d, **kwargs) + return apis.GetUcdnDomainRequestNumV2ResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_traffic(self, req=None, **kwargs): + """ GetUcdnDomainTraffic - 获取加速域名流量使用信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Areacode** (str) - 查询流量区域 cn代表国内 abroad代表海外,默认全部区域。 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。 + - **DomainId** (list) - 域名ID,创建加速域名时生成。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **TrafficSet** (list) - 见 **UcdnDomainTrafficSet** 模型定义 + + **Response Model** + + **UcdnDomainTrafficSet** + + - **Time** (int) - 流量获取的时间点,格式为Unix Timestamp + - **Value** (float) - 查询每日流量总值,单位:GB + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainTrafficRequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainTraffic", d, **kwargs) + return apis.GetUcdnDomainTrafficResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_pass_bandwidth(self, req=None, **kwargs): + """ GetUcdnPassBandwidth - 获取回源带宽数据(cdn回客户源站部分) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **BandwidthDetail** (list) - 见 **BandwidthInfoDetail** 模型定义 + + **Response Model** + + **BandwidthInfoDetail** + + - **Bandwidth** (float) - 返回值带宽值数据。 + - **Time** (int) - 宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnPassBandwidthRequestSchema().dumps(d) + resp = self.invoke("GetUcdnPassBandwidth", d, **kwargs) + return apis.GetUcdnPassBandwidthResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_traffic(self, req=None, **kwargs): + """ GetUcdnTraffic - 获取流量信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + + **Response** + + - **TrafficSet** (list) - 见 **TrafficSet** 模型定义 + + **Response Model** + + **TrafficSet** + + - **Areacode** (str) - 购买流量的区域, cn: 国内; abroad: 国外 + - **TrafficLeft** (str) - Areacode区域内总剩余流量, 单位GB + - **TrafficTotal** (str) - Areacode区域内总购买流量, 单位GB + - **TrafficUsed** (str) - Areacode区域内总使用流量, 单位GB + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnTrafficRequestSchema().dumps(d) + resp = self.invoke("GetUcdnTraffic", d, **kwargs) + return apis.GetUcdnTrafficResponseSchema().loads(resp)
+ +
[docs] def prefetch_new_ucdn_domain_cache(self, req=None, **kwargs): + """ PrefetchNewUcdnDomainCache - 提交预取任务 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **UrlList** (list) - (Required) 预热URL列表,n从自然数0开始。UrlList.n字段必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名 + + **Response** + + - **TaskId** (str) - 本次提交url对应的任务id + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.PrefetchNewUcdnDomainCacheRequestSchema().dumps(d) + resp = self.invoke("PrefetchNewUcdnDomainCache", d, **kwargs) + return apis.PrefetchNewUcdnDomainCacheResponseSchema().loads(resp)
+ +
[docs] def refresh_new_ucdn_domain_cache(self, req=None, **kwargs): + """ RefreshNewUcdnDomainCache - 刷新缓存 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (str) - (Required) 刷新类型,file代表文件刷新,dir 代表路径刷新 + - **UrlList** (list) - (Required) 刷新多个URL列表时,一次最多提交30个。必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名 + + **Response** + + - **TaskId** (str) - 本次提交url对应的任务id + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.RefreshNewUcdnDomainCacheRequestSchema().dumps(d) + resp = self.invoke("RefreshNewUcdnDomainCache", d, **kwargs) + return apis.RefreshNewUcdnDomainCacheResponseSchema().loads(resp)
+ +
[docs] def switch_ucdn_charge_type(self, req=None, **kwargs): + """ SwitchUcdnChargeType - 切换账号计费方式 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ChargeType** (str) - (Required) 计费方式。traffic代表按流量包计费,bandwidth按带宽付费 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.SwitchUcdnChargeTypeRequestSchema().dumps(d) + resp = self.invoke("SwitchUcdnChargeType", d, **kwargs) + return apis.SwitchUcdnChargeTypeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/ucloudstack/client.html b/_modules/ucloud/services/ucloudstack/client.html new file mode 100644 index 0000000..9b23ff9 --- /dev/null +++ b/_modules/ucloud/services/ucloudstack/client.html @@ -0,0 +1,2716 @@ + + + + + + + + ucloud.services.ucloudstack.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ucloudstack.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ucloudstack.schemas import apis
+
+
+
[docs]class UCloudStackClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UCloudStackClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def allocate_eip(self, req=None, **kwargs): + """ AllocateEIP - 申请外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Bandwidth** (int) - (Required) 带宽,默认值1,默认范围1~100 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Name** (str) - (Required) 名称 + - **OperatorName** (str) - (Required) 线路。目前支持Bgp + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **EIPID** (str) - 申请的EIP的ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.AllocateEIPRequestSchema().dumps(d) + resp = self.invoke("AllocateEIP", d, **kwargs) + return apis.AllocateEIPResponseSchema().loads(resp)
+ +
[docs] def attach_disk(self, req=None, **kwargs): + """ AttachDisk - 绑定硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 硬盘ID + - **ResourceID** (str) - (Required) 绑定的资源ID + - **ResourceType** (str) - (Required) 绑定的资源类型,枚举值:VM,标识虚拟机 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.AttachDiskRequestSchema().dumps(d) + resp = self.invoke("AttachDisk", d, **kwargs) + return apis.AttachDiskResponseSchema().loads(resp)
+ +
[docs] def bind_alarm_template(self, req=None, **kwargs): + """ BindAlarmTemplate - 绑定告警模板 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **AlarmTemplateID** (str) - (Required) 告警模板ID + - **ResourceIDs** (list) - (Required) 【数组】告警模板ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性IP + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindAlarmTemplateRequestSchema().dumps(d) + resp = self.invoke("BindAlarmTemplate", d, **kwargs) + return apis.BindAlarmTemplateResponseSchema().loads(resp)
+ +
[docs] def bind_eip(self, req=None, **kwargs): + """ BindEIP - 绑定UCoudStack外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 + - **EIPID** (str) - (Required) 外网IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindEIPRequestSchema().dumps(d) + resp = self.invoke("BindEIP", d, **kwargs) + return apis.BindEIPResponseSchema().loads(resp)
+ +
[docs] def bind_physical_ip(self, req=None, **kwargs): + """ BindPhysicalIP - 绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **PhysicalIPID** (str) - (Required) 物理IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindPhysicalIPRequestSchema().dumps(d) + resp = self.invoke("BindPhysicalIP", d, **kwargs) + return apis.BindPhysicalIPResponseSchema().loads(resp)
+ +
[docs] def bind_security_group(self, req=None, **kwargs): + """ BindSecurityGroup - 绑定安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **ResourceID** (str) - (Required) 绑定的资源ID。调用方式举例:ResourceID=“one-id”。 + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **NICID** (str) - 网卡ID + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("BindSecurityGroup", d, **kwargs) + return apis.BindSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def clone_disk(self, req=None, **kwargs): + """ CloneDisk - 克隆硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Name** (str) - (Required) 名称 + - **SrcID** (str) - (Required) 源硬盘ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **DiskID** (str) - 克隆出的硬盘ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CloneDiskRequestSchema().dumps(d) + resp = self.invoke("CloneDisk", d, **kwargs) + return apis.CloneDiskResponseSchema().loads(resp)
+ +
[docs] def create_certificate(self, req=None, **kwargs): + """ CreateCertificate - 创建证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Certificate** (str) - (Required) 证书内容 + - **CertificateType** (str) - (Required) 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。只有在双向认证的时候才需要CA证书 + - **Name** (str) - (Required) 证书名称 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PrivateKey** (str) - 私钥内容,服务器证书必传,CA证书不用传递 + - **Remark** (str) - 证书描述 + + **Response** + + - **CertificateID** (str) - 证书ID + - **Message** (str) - 错误描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateCertificateRequestSchema().dumps(d) + resp = self.invoke("CreateCertificate", d, **kwargs) + return apis.CreateCertificateResponseSchema().loads(resp)
+ +
[docs] def create_custom_image(self, req=None, **kwargs): + """ CreateCustomImage - 创建自制镜像 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ImageName** (str) - (Required) 镜像名称 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **ImageDescription** (str) - 镜像描述。 + + **Response** + + - **ImageID** (str) - 创建的自制镜像ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateCustomImageRequestSchema().dumps(d) + resp = self.invoke("CreateCustomImage", d, **kwargs) + return apis.CreateCustomImageResponseSchema().loads(resp)
+ +
[docs] def create_disk(self, req=None, **kwargs): + """ CreateDisk - 创建硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DiskSpace** (int) - (Required) 磁盘大小 + - **Name** (str) - (Required) 磁盘名称 + - **SetType** (str) - (Required) 磁盘类型。例如:Normal,SSD + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **DiskID** (str) - 创建的磁盘ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateDiskRequestSchema().dumps(d) + resp = self.invoke("CreateDisk", d, **kwargs) + return apis.CreateDiskResponseSchema().loads(resp)
+ +
[docs] def create_lb(self, req=None, **kwargs): + """ CreateLB - 创建负载均衡 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **LBType** (str) - (Required) 枚举值。LAN:内网,WAN:外网 + - **Name** (str) - (Required) 名称。 + - **SubnetID** (str) - (Required) LB 实例所在的子网 ID 。 + - **VMType** (str) - (Required) 运行负载均衡实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口) + - **VPCID** (str) - (Required) LB实例所在的 VPC ID 。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **EIPID** (str) - 外网IP的ID,创建外网LB时为必需 + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + - **Remark** (str) - 描述。 + - **SGID** (str) - 安全组ID,创建外网LB时为必需 + + **Response** + + - **LBID** (str) - 返回创建的负载均衡ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateLBRequestSchema().dumps(d) + resp = self.invoke("CreateLB", d, **kwargs) + return apis.CreateLBResponseSchema().loads(resp)
+ +
[docs] def create_natgw(self, req=None, **kwargs): + """ CreateNATGW - 创建NAT网关 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **EIPID** (str) - (Required) 外网IP的ID + - **Name** (str) - (Required) 名称。 + - **SGID** (str) - (Required) 安全组ID + - **SubnetID** (str) - (Required) NAT网关实例所在的子网 ID + - **VMType** (str) - (Required) 运行NAT网关实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口) + - **VPCID** (str) - (Required) NAT网关实例所在的 VPC ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + - **Remark** (str) - 描述 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **NATGWID** (str) - 返回创建的NAT网关ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateNATGWRequestSchema().dumps(d) + resp = self.invoke("CreateNATGW", d, **kwargs) + return apis.CreateNATGWResponseSchema().loads(resp)
+ +
[docs] def create_natgw_rule(self, req=None, **kwargs): + """ CreateNATGWRule - 添加NAT网关白名单 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BindResourceID** (str) - (Required) 绑定的虚拟机资源ID + - **NATGWID** (str) - (Required) NAT网关ID + - **NATGWType** (str) - (Required) NAT的类型。枚举值:SNAT,DNAT + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + - **RuleID** (str) - 白名单ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateNATGWRuleRequestSchema().dumps(d) + resp = self.invoke("CreateNATGWRule", d, **kwargs) + return apis.CreateNATGWRuleResponseSchema().loads(resp)
+ +
[docs] def create_physical_ip(self, req=None, **kwargs): + """ CreatePhysicalIP - 创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Name** (str) - (Required) 物理IP名称,限制字符长度30 + - **OperatorName** (str) - (Required) 物理IP线路 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述 + + **Response** + + - **Message** (str) - 返回信息描述 + - **PhysicalIPID** (str) - 返回创建的物理IP的ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreatePhysicalIPRequestSchema().dumps(d) + resp = self.invoke("CreatePhysicalIP", d, **kwargs) + return apis.CreatePhysicalIPResponseSchema().loads(resp)
+ +
[docs] def create_rs(self, req=None, **kwargs): + """ CreateRS - 为负载均衡的 VServer 添加后端服务节点。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BindResourceID** (str) - (Required) 服务节点的资源 ID ,仅支持添加与 LB 相同 VPC 的虚拟机资源 + - **LBID** (str) - (Required) 负载均衡ID + - **Port** (int) - (Required) 服务节点暴露的服务端口号 + - **VSID** (str) - (Required) VServer的ID + - **Weight** (int) - (Required) 服务节点的权重 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + - **RSID** (str) - 返回创建的RSID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateRSRequestSchema().dumps(d) + resp = self.invoke("CreateRS", d, **kwargs) + return apis.CreateRSResponseSchema().loads(resp)
+ +
[docs] def create_security_group(self, req=None, **kwargs): + """ CreateSecurityGroup - 创建安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **Rule** (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述; + - **SGID** (str) - 创建的安全组ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("CreateSecurityGroup", d, **kwargs) + return apis.CreateSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def create_security_group_rule(self, req=None, **kwargs): + """ CreateSecurityGroupRule - 创建安全组规则 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Rules** (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述; + - **SGRuleID** (str) - 创建的安全组规则ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSecurityGroupRuleRequestSchema().dumps(d) + resp = self.invoke("CreateSecurityGroupRule", d, **kwargs) + return apis.CreateSecurityGroupRuleResponseSchema().loads(resp)
+ +
[docs] def create_snapshot(self, req=None, **kwargs): + """ CreateSnapshot - 创建硬盘快照 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **DiskID** (str) - (Required) 硬盘ID,输入“有效”状态的ID + - **Name** (str) - (Required) 快照名称,限制字符长度30 + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + - **Remark** (str) - 描述,限制字符长度100 + + **Response** + + - **Message** (str) - 返回信息描述 + - **SnapshotID** (str) - 创建的快照ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSnapshotRequestSchema().dumps(d) + resp = self.invoke("CreateSnapshot", d, **kwargs) + return apis.CreateSnapshotResponseSchema().loads(resp)
+ +
[docs] def create_subnet(self, req=None, **kwargs): + """ CreateSubnet - 创建子网 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **Network** (str) - (Required) 网段。列如:10.0.0.0/16; + - **VPCID** (str) - (Required) 所属VPCID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述; + - **SubnetID** (str) - 创建Subnet的ID; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSubnetRequestSchema().dumps(d) + resp = self.invoke("CreateSubnet", d, **kwargs) + return apis.CreateSubnetResponseSchema().loads(resp)
+ +
[docs] def create_user(self, req=None, **kwargs): + """ CreateUser - 管理员添加账号 + + **Request** + + - **PassWord** (str) - (Required) 账号密码。 + - **UserEmail** (str) - (Required) 账号邮箱。 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **UserID** (int) - 账户ID + + """ + d = {} + req and d.update(req) + d = apis.CreateUserRequestSchema().dumps(d) + resp = self.invoke("CreateUser", d, **kwargs) + return apis.CreateUserResponseSchema().loads(resp)
+ +
[docs] def create_vm_instance(self, req=None, **kwargs): + """ CreateVMInstance - 创建虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BootDiskSetType** (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **CPU** (int) - (Required) CPU个数,如1,2,4,8,16,32,64等。 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DataDiskSetType** (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **ImageID** (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。 + - **Memory** (int) - (Required) 内存容量,如1024,2048,4096,8192,16384,32768,65535等。 + - **Name** (str) - (Required) 虚拟机名称。可输入如:myVM。名称只能包含中英文、数字以及- _ .且1-30个字符。 + - **Password** (str) - (Required) 密码。可输入如:ucloud.cn。密码长度限6-30个字符;需要同时包含两项或以上(大写字母/小写字母/数字/特殊符号);windows不能包含用户名(administrator)中超过2个连续字符的部分。 + - **SubnetID** (str) - (Required) 子网 ID。 + - **VMType** (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD; + - **VPCID** (str) - (Required) VPC ID。 + - **WANSGID** (str) - (Required) 外网安全组 ID。输入“有效”状态的安全组的ID。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Bandwidth** (str) - 带宽 + - **DataDiskSpace** (int) - 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 + - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. + - **IPVersion** (str) - 外网IP版本,默认IPv4 + - **InternalIP** (str) - 指定内网IP。输入有效的指定内网 IP。默认为系统自动分配内网 IP。 + - **InternetIP** (str) - 指定外网IP + - **LANSGID** (str) - 内网安全组 ID。输入“有效”状态的安全组的ID。 + - **OperatorName** (str) - 线路 + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **DiskID** (str) - 返回创建数据盘的 ID + - **EIPID** (str) - 返回创建外网IP的 ID + - **Message** (str) - 返回信息描述。 + - **VMID** (str) - 返回创建虚拟机的 ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVMInstanceRequestSchema().dumps(d) + resp = self.invoke("CreateVMInstance", d, **kwargs) + return apis.CreateVMInstanceResponseSchema().loads(resp)
+ +
[docs] def create_vpc(self, req=None, **kwargs): + """ CreateVPC - 创建VPC + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **Network** (str) - (Required) 网段。例如:10.0.0.0/16; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述; + - **VPCID** (str) - 创建的VPCID; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVPCRequestSchema().dumps(d) + resp = self.invoke("CreateVPC", d, **kwargs) + return apis.CreateVPCResponseSchema().loads(resp)
+ +
[docs] def create_vs(self, req=None, **kwargs): + """ CreateVS - 创建负载均衡VServer + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **HealthcheckType** (str) - (Required) 健康检查类型,枚举值,Port:端口,Path:域名。TCP和UDP协议只支持Port类型。 + - **LBID** (str) - (Required) 负载均衡ID + - **Port** (int) - (Required) VServer 的监听端口。端口范围为 1~65535 ,其中 323、9102、9103、9104、9105、60909、60910 被系统占用。 + - **Protocol** (str) - (Required) VServer 的监听协议。枚举值:支持 TCP、UDP、HTTP、HTTPS 四种协议转发。 + - **Scheduler** (str) - (Required) 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 + - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 + - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。 + - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 + - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 + - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 + - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS时有效。 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **VSID** (str) - 返回创建的VSID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVSRequestSchema().dumps(d) + resp = self.invoke("CreateVS", d, **kwargs) + return apis.CreateVSResponseSchema().loads(resp)
+ +
[docs] def create_vs_policy(self, req=None, **kwargs): + """ CreateVSPolicy - 创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSIDs** (list) - (Required) 【数组】内容转发规则应用的服务节点的 ID,来源于 VServer 中添加的服务节点。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。 + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **PolicyID** (str) - 返回创建的内容转发规则ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVSPolicyRequestSchema().dumps(d) + resp = self.invoke("CreateVSPolicy", d, **kwargs) + return apis.CreateVSPolicyResponseSchema().loads(resp)
+ +
[docs] def delete_certificate(self, req=None, **kwargs): + """ DeleteCertificate - 删除证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CertificateID** (str) - (Required) 证书ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteCertificateRequestSchema().dumps(d) + resp = self.invoke("DeleteCertificate", d, **kwargs) + return apis.DeleteCertificateResponseSchema().loads(resp)
+ +
[docs] def delete_custom_image(self, req=None, **kwargs): + """ DeleteCustomImage - 删除自制镜像 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ImageID** (str) - (Required) 自制镜像ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteCustomImageRequestSchema().dumps(d) + resp = self.invoke("DeleteCustomImage", d, **kwargs) + return apis.DeleteCustomImageResponseSchema().loads(resp)
+ +
[docs] def delete_disk(self, req=None, **kwargs): + """ DeleteDisk - 删除硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 被删除的硬盘ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteDiskRequestSchema().dumps(d) + resp = self.invoke("DeleteDisk", d, **kwargs) + return apis.DeleteDiskResponseSchema().loads(resp)
+ +
[docs] def delete_lb(self, req=None, **kwargs): + """ DeleteLB - 删除负载均衡 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteLBRequestSchema().dumps(d) + resp = self.invoke("DeleteLB", d, **kwargs) + return apis.DeleteLBResponseSchema().loads(resp)
+ +
[docs] def delete_natgw(self, req=None, **kwargs): + """ DeleteNATGW - 删除NAT网关 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **NATGWID** (str) - (Required) NAT网关ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteNATGWRequestSchema().dumps(d) + resp = self.invoke("DeleteNATGW", d, **kwargs) + return apis.DeleteNATGWResponseSchema().loads(resp)
+ +
[docs] def delete_natgw_rule(self, req=None, **kwargs): + """ DeleteNATGWRule - 删除NAT网关白名单 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **NATGWID** (str) - (Required) nat网关ID + - **RuleID** (str) - (Required) 白名单ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteNATGWRuleRequestSchema().dumps(d) + resp = self.invoke("DeleteNATGWRule", d, **kwargs) + return apis.DeleteNATGWRuleResponseSchema().loads(resp)
+ +
[docs] def delete_physical_ip(self, req=None, **kwargs): + """ DeletePhysicalIP - 删除物理IP + + **Request** + + - **Region** (str) - (Config) 地域。 + - **PhysicalIPID** (str) - (Required) 物理IP的ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回状态描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeletePhysicalIPRequestSchema().dumps(d) + resp = self.invoke("DeletePhysicalIP", d, **kwargs) + return apis.DeletePhysicalIPResponseSchema().loads(resp)
+ +
[docs] def delete_rs(self, req=None, **kwargs): + """ DeleteRS - 移除负载均衡的单个服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteRSRequestSchema().dumps(d) + resp = self.invoke("DeleteRS", d, **kwargs) + return apis.DeleteRSResponseSchema().loads(resp)
+ +
[docs] def delete_security_group(self, req=None, **kwargs): + """ DeleteSecurityGroup - 删除安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteSecurityGroup", d, **kwargs) + return apis.DeleteSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def delete_security_group_rule(self, req=None, **kwargs): + """ DeleteSecurityGroupRule - 删除安全组规则 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **SGID** (str) - (Required) 安全组ID + - **SGRuleID** (str) - (Required) 安全组规则ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSecurityGroupRuleRequestSchema().dumps(d) + resp = self.invoke("DeleteSecurityGroupRule", d, **kwargs) + return apis.DeleteSecurityGroupRuleResponseSchema().loads(resp)
+ +
[docs] def delete_snapshot(self, req=None, **kwargs): + """ DeleteSnapshot - 删除快照,仅支持状态为正常的快照进行删除操作。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **SnapshotID** (str) - (Required) 快照ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSnapshotRequestSchema().dumps(d) + resp = self.invoke("DeleteSnapshot", d, **kwargs) + return apis.DeleteSnapshotResponseSchema().loads(resp)
+ +
[docs] def delete_subnet(self, req=None, **kwargs): + """ DeleteSubnet - 删除子网 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **SubnetID** (str) - (Required) SubnetID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSubnetRequestSchema().dumps(d) + resp = self.invoke("DeleteSubnet", d, **kwargs) + return apis.DeleteSubnetResponseSchema().loads(resp)
+ +
[docs] def delete_vm_instance(self, req=None, **kwargs): + """ DeleteVMInstance - 删除虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。 枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机 ID。输入有效的虚拟机 ID。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVMInstanceRequestSchema().dumps(d) + resp = self.invoke("DeleteVMInstance", d, **kwargs) + return apis.DeleteVMInstanceResponseSchema().loads(resp)
+ +
[docs] def delete_vpc(self, req=None, **kwargs): + """ DeleteVPC - 删除VPC + + **Request** + + - **Region** (str) - (Config) 地域。 + - **VPCID** (str) - (Required) ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVPCRequestSchema().dumps(d) + resp = self.invoke("DeleteVPC", d, **kwargs) + return apis.DeleteVPCResponseSchema().loads(resp)
+ +
[docs] def delete_vs(self, req=None, **kwargs): + """ DeleteVS - 删除VServer + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID + - **VSID** (str) - (Required) 负载均衡VServer监听器ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVSRequestSchema().dumps(d) + resp = self.invoke("DeleteVS", d, **kwargs) + return apis.DeleteVSResponseSchema().loads(resp)
+ +
[docs] def delete_vs_policy(self, req=None, **kwargs): + """ DeleteVSPolicy - 删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **PolicyID** (str) - (Required) 内容转发规则ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVSPolicyRequestSchema().dumps(d) + resp = self.invoke("DeleteVSPolicy", d, **kwargs) + return apis.DeleteVSPolicyResponseSchema().loads(resp)
+ +
[docs] def describe_certificate(self, req=None, **kwargs): + """ DescribeCertificate - 查询证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CertificateIDs** (list) - 证书ID列表 + - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。 + - **Limit** (int) - 返回数据长度,默认为20,最大100 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + + **Response** + + - **Infos** (list) - 见 **CertificateInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 证书总个数 + + **Response Model** + + **BindVSInfo** + + - **LBID** (str) - LB ID + - **LBName** (str) - LB名称 + - **Port** (int) - VS的端口 + - **Protocol** (str) - VS的协议 + - **VSID** (str) - VS ID + + **CertificateInfo** + + - **CertificateContent** (str) - 证书内容 + - **CertificateID** (str) - 证书ID + - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"] + - **CommonName** (str) - 主域名 + - **CreateTime** (int) - 创建时间(平台创建时间) + - **ExpireTime** (int) - 证书内容的过期时间 + - **Fingerprint** (str) - 证书指纹 + - **Name** (str) - 证书名 + - **Privatekey** (str) - 私钥内容 + - **Region** (str) - 地域 + - **Remark** (str) - 证书描述 + - **SubjectAlternativeNames** (list) - 备域名 + - **VSInfos** (list) - 见 **BindVSInfo** 模型定义 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeCertificateRequestSchema().dumps(d) + resp = self.invoke("DescribeCertificate", d, **kwargs) + return apis.DescribeCertificateResponseSchema().loads(resp)
+ +
[docs] def describe_disk(self, req=None, **kwargs): + """ DescribeDisk - 获取硬盘信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **DiskIDs** (list) - 【数组】磁盘的 ID。输入有效的 ID。调用方式举例:DiskIDs.0=“one-id”、DiskIDs.1=“two-id”。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Infos** (list) - 见 **DiskInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回磁盘总个数。 + + **Response Model** + + **DiskInfo** + + - **AttachResourceID** (str) - 绑定资源ID + - **ChargeType** (str) - 硬盘计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间。时间戳 + - **DiskID** (str) - 硬盘ID + - **DiskStatus** (str) - 硬盘状态。Creating:创建中,BeingCloned:正在被克隆中,Unbound:已解绑,Unbounding:解绑中,Bounding:绑定中,Bound:已绑定,Upgrading:升级中,Deleting:删除中,Deleted:已删除,Releasing:销毁中,Released:已销毁 + - **ExpireTime** (int) - 过期时间。时间戳 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **SetType** (str) - 磁盘类型。例如:Normal,SSD + - **Size** (int) - 大小。单位GB + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeDiskRequestSchema().dumps(d) + resp = self.invoke("DescribeDisk", d, **kwargs) + return apis.DescribeDiskResponseSchema().loads(resp)
+ +
[docs] def describe_eip(self, req=None, **kwargs): + """ DescribeEIP - 获取外网IP的信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **EIPIDs** (list) - 【数组】外网的 ID。输入有效的 ID。调用方式举例:EIPIDs.0=“one-id”、EIPIDs.1=“two-id” + - **Limit** (str) - 返回数据长度,默认为20,最大100。 + - **Offset** (str) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Infos** (list) - 见 **EIPInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **Totalcount** (int) - 返回现有外网IP总数 + + **Response Model** + + **EIPInfo** + + - **Bandwidth** (int) - 带宽大小 + - **BindResourceID** (str) - 绑定资源ID + - **BindResourceType** (str) - 绑定资源类型 + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间。时间戳 + - **EIPID** (str) - ID + - **ExpireTime** (int) - 过期时间。时间戳 + - **IP** (str) - 外网IP + - **Name** (str) - 名称 + - **OperatorName** (str) - 线路 + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **Status** (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁,BandwidthChanging:带宽修改中 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeEIPRequestSchema().dumps(d) + resp = self.invoke("DescribeEIP", d, **kwargs) + return apis.DescribeEIPResponseSchema().loads(resp)
+ +
[docs] def describe_image(self, req=None, **kwargs): + """ DescribeImage - 获取镜像信息,包括默认镜像和自制镜像。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **ImageIDs** (list) - 【数组】镜像的 ID。输入有效的 ID。调用方式举例:ImageIDs.0=“one-id”、ImageIDs.1=“two-id”。 + - **ImageType** (str) - 镜像类型。枚举值:Base(基础镜像,平台默认提供的镜像),Custom(自制镜像,通过虚拟机导出的镜像) 。若该值为空,默认查询所有镜像。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Action** (str) - 操作名称 + - **Infos** (list) - 见 **ImageInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **RetCode** (int) - 返回码 + - **TotalCount** (int) - 返回镜像的总个数。 + + **Response Model** + + **ImageInfo** + + - **CreateTime** (int) - 创建时间。时间戳。 + - **ImageID** (str) - 镜像ID + - **ImageStatus** (str) - 镜像状态。枚举类型:Making(创建中),Available(可用),Unavailable(不可用),Terminating(销毁中),Used(被使用中),Deleting(删除中),Deleted(已删除), Uploading(导入中) + - **ImageType** (str) - 镜像类型。枚举类型:Base(基础镜像),Custom(自制镜像)。 + - **Name** (str) - 镜像名称 + - **OSDistribution** (str) - 镜像系统发行版本。例如:Centos, Ubuntu, Windows等 + - **OSName** (str) - 系统名称。例如:CentOS 7.4 x86_64 + - **OSType** (str) - 系统类型。例如:Linux, Windows,Kylin + - **Region** (str) - 地域 + - **SetArch** (str) - 架构名称。例如:x86_64 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeImageRequestSchema().dumps(d) + resp = self.invoke("DescribeImage", d, **kwargs) + return apis.DescribeImageResponseSchema().loads(resp)
+ +
[docs] def describe_lb(self, req=None, **kwargs): + """ DescribeLB - 获取负载均衡信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **LBIDs** (list) - 【数组】负载均衡的 ID。调用方式举例:LBIDs.0=“one-id”、LBIDs.1=“two-id”。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **SubnetID** (str) - 子网ID + - **VPCID** (str) - VPCID + + **Response** + + - **Infos** (list) - 见 **LBInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回负载均衡总个数。 + + **Response Model** + + **LBInfo** + + - **AlarmTemplateID** (str) - 告警模板ID + - **ChargeType** (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间,时间戳 + - **ExpireTime** (int) - 过期时间,时间戳 + - **LBID** (str) - 负载均衡ID + - **LBStatus** (str) - 状态。Creating:创建中,Running:运行中,Deleting:删除中,Deleted:已删除 + - **LBType** (str) - 负载均衡类型,枚举值,WAN:外网负载均衡,LAN:内网负载均衡。 + - **Name** (str) - 名称 + - **PrivateIP** (str) - 负载均衡的内网 IP 地址,当LB为外网类型时,该值为空。 + - **PublicIP** (str) - 负载均衡的外网 IP 地址,当LB为内网类型时,该值为空。 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **SGID** (str) - 安全组 ID ,当LB为内网类型时,该值为空。 + - **SubnetID** (str) - 子网ID + - **VPCID** (str) - VPCID + - **VSCount** (int) - VServer的数量 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeLBRequestSchema().dumps(d) + resp = self.invoke("DescribeLB", d, **kwargs) + return apis.DescribeLBResponseSchema().loads(resp)
+ +
[docs] def describe_metric(self, req=None, **kwargs): + """ DescribeMetric - 获取资源监控信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BeginTime** (str) - (Required) 开始时间。使用unix时间戳 + - **EndTime** (str) - (Required) 结束时间。使用Unix时间戳 + - **MetricName** (list) - (Required) 监控指标。1. 获取虚拟机监控信息调用举例,MetricName.0="CPUUtilization"、MetricName.0="MemUsage"。虚拟机监控指标枚举值:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数;2. EIP监控指标:NetPacketIn:入包量;NetPacketOut:出包量;NICIn:入带宽;NICOut:出带宽;NICOutUsage:出带宽使用率; + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机;EIP:弹性IP + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,中国; + + **Response** + + - **Infos** (list) - 见 **MetricInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回监控信息条数 + + **Response Model** + + **MetricSet** + + - **Timestamp** (int) - 监控时间 + - **Value** (float) - 监控值 + + **MetricInfo** + + - **Infos** (list) - 见 **MetricSet** 模型定义 + - **MetricName** (str) - 监控指标。虚拟机的监控指标枚举值为:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeMetricRequestSchema().dumps(d) + resp = self.invoke("DescribeMetric", d, **kwargs) + return apis.DescribeMetricResponseSchema().loads(resp)
+ +
[docs] def describe_natgw(self, req=None, **kwargs): + """ DescribeNATGW - 获取NAT网关信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **NATGWIDs** (list) - 【数组】NAT网关的 ID。调用方式举例:NATGWIDs.0=“one-id”、NATGWIDs.1=“two-id”。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Infos** (list) - 见 **NATGWInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回NAT网关总个数 + + **Response Model** + + **NATGWInfo** + + - **AlarmTemplateID** (str) - 告警模板ID + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间,时间戳 + - **EIP** (str) - 虚拟IP + - **ExpireTime** (int) - 过期时间,时间戳 + - **NATGWID** (str) - NAT网关ID + - **NATGWStatus** (str) - 状态。Creating:创建中, Running:运行中, Deleting:删除中, Deleted:已删除 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **SGID** (str) - NAT网关绑定的安全组ID + - **SubnetID** (str) - NAT网关实例所在的子网 ID + - **VPCID** (str) - NAT网关实例所在的 VPC ID + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeNATGWRequestSchema().dumps(d) + resp = self.invoke("DescribeNATGW", d, **kwargs) + return apis.DescribeNATGWResponseSchema().loads(resp)
+ +
[docs] def describe_natgw_rule(self, req=None, **kwargs): + """ DescribeNATGWRule - 获取NAT网关白名单信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **NATGWID** (str) - (Required) NAT网关ID + - **NATGWType** (str) - (Required) NAT类型。枚举值:SNAT,DNAT + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **BindResourceIDs** (list) - 【数组】NAT网关白名单资源ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **RuleIDs** (list) - 【数组】NAT网关白名单ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。 + + **Response** + + - **Infos** (list) - 见 **NATGWRuleInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回NAT网关白名单资源总个数。 + + **Response Model** + + **NATGWRuleInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **BindResourceType** (str) - 绑定资源的类型 + - **CreateTime** (int) - 创建时间,时间戳。 + - **IP** (str) - 白名单资源的内网IP地址 + - **NATGWID** (str) - NAT网关ID + - **NATGWType** (str) - nat网关类型 + - **Name** (str) - 添加的白名单资源名称 + - **RuleID** (str) - 白名单ID + - **RuleStatus** (str) - 状态。Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Unbound:已解绑 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeNATGWRuleRequestSchema().dumps(d) + resp = self.invoke("DescribeNATGWRule", d, **kwargs) + return apis.DescribeNATGWRuleResponseSchema().loads(resp)
+ +
[docs] def describe_op_logs(self, req=None, **kwargs): + """ DescribeOPLogs - 查询操作日志 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BeginTime** (int) - (Required) 开始时间 + - **EndTime** (int) - (Required) 结束时间 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **IsSuccess** (str) - 是否操作成功 + - **Limit** (int) - + - **Offset** (int) - + - **ResourceID** (str) - 资源ID + - **ResourceType** (str) - 资源类型 + + **Response** + + - **Infos** (list) - 见 **OPLogInfo** 模型定义 + - **Message** (str) - 错误信息 + - **TotalCount** (int) - 总数 + + **Response Model** + + **OPLogInfo** + + - **CreateTime** (int) - 创建时间 + - **IsSuccess** (str) - 是否操作成功, Yes, No + - **OPLogsID** (str) - 日志ID + - **OPName** (str) - API + - **OPTime** (int) - 操作时间 + - **OpMessage** (str) - 错误信息 + - **Region** (str) - + - **ResourceID** (str) - 资源ID + - **ResourceType** (int) - 资源类型 + - **RetCode** (int) - 状态码 + - **UserEmail** (str) - 账号邮箱 + - **Zone** (str) - + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeOPLogsRequestSchema().dumps(d) + resp = self.invoke("DescribeOPLogs", d, **kwargs) + return apis.DescribeOPLogsResponseSchema().loads(resp)
+ +
[docs] def describe_physical_ip(self, req=None, **kwargs): + """ DescribePhysicalIP - 获取物理IP信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (str) - 返回数据长度,默认为20,最大100。 + - **Offset** (str) - 列表起始位置偏移量,默认为0。 + - **PhysicalIPIDs** (list) - 【数组】物理IP的 ID。输入有效的 ID。调用方式举例:PhysicalIPIDs.0=“one-id”、PhysicalIPIDs.1=“two-id” + + **Response** + + - **Infos** (list) - 见 **PhysicalIPInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回现有物理IP总数 + + **Response Model** + + **PhysicalIPInfo** + + - **BindResourceID** (str) - 绑定资源ID + - **BindResourceType** (str) - 绑定资源类型 + - **CreateTime** (int) - 创建时间。时间戳 + - **IP** (str) - 物理IP + - **Name** (str) - 名称 + - **OperatorName** (str) - 线路 + - **PhysicalIPID** (str) - 物理IP的ID + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **Status** (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁 + - **UpdateTime** (int) - 过期时间。时间戳 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribePhysicalIPRequestSchema().dumps(d) + resp = self.invoke("DescribePhysicalIP", d, **kwargs) + return apis.DescribePhysicalIPResponseSchema().loads(resp)
+ +
[docs] def describe_rs(self, req=None, **kwargs): + """ DescribeRS - 获取负载均衡服务的服务节点信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **RSIDs** (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 + - **VSID** (str) - VServer的ID + + **Response** + + - **Infos** (list) - 见 **RSInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回该负载均衡下VServer的总个数。 + + **Response Model** + + **RSInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **CreateTime** (int) - 创建时间,时间戳 + - **IP** (str) - 服务节点的内网 IP 地址 + - **LBID** (str) - 服务节点所属的负载均衡 ID + - **Name** (str) - 服务节点的资源名称 + - **Port** (int) - 服务节点暴露的服务端口号 + - **RSID** (str) - 服务节点的 ID + - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 + - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - 服务节点所属的 VServer ID + - **Weight** (int) - 服务节点的权重 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeRSRequestSchema().dumps(d) + resp = self.invoke("DescribeRS", d, **kwargs) + return apis.DescribeRSResponseSchema().loads(resp)
+ +
[docs] def describe_recycled_resource(self, req=None, **kwargs): + """ DescribeRecycledResource - 查询回收站资源 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **ResourceIDs** (list) - 【数组】资源ID,输入“有效”的ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 + + **Response** + + - **Infos** (list) - 见 **RecycledResourceInfo** 模型定义 + - **TotalCount** (int) - 返回回收站资源的总个数 + + **Response Model** + + **RecycledResourceInfo** + + - **CreateTime** (int) - 创建时间 + - **DeleteTime** (int) - 删除时间 + - **Description** (str) - 描述 + - **ExpireTime** (int) - 过期时间 + - **IsAutoTerminated** (bool) - 是否自动销户 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **ResourceID** (str) - 资源ID + - **ResourceType** (str) - 资源类型:VM:虚拟机,Disk:硬盘,EIP:外网IP,PIP:物理IP,MySQL:数据库,Redis:缓存 + - **Status** (str) - 资源状态 + - **WillTerminateTime** (int) - 销毁时间 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeRecycledResourceRequestSchema().dumps(d) + resp = self.invoke("DescribeRecycledResource", d, **kwargs) + return apis.DescribeRecycledResourceResponseSchema().loads(resp)
+ +
[docs] def describe_security_group(self, req=None, **kwargs): + """ DescribeSecurityGroup - 查询安全组信息 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **SGIDs** (list) - 【数组】安全组的 ID。输入有效的 ID。调用方式举例:SGIDs.0=“one-id”、SGIDs.1=“two-id” + + **Response** + + - **Infos** (list) - 见 **SGInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 安全组的总数 + + **Response Model** + + **SGRuleInfo** + + - **DstPort** (str) - 端口号 + - **IsIn** (str) - 方向。1:入,0:出 + - **Priority** (str) - 优先级。HIGH:高,MEDIUM:中,LOW:低 + - **ProtocolType** (str) - 协议 + - **RuleAction** (str) - 动作。ACCEPT:接受,DROP:拒绝 + - **RuleID** (str) - 规则ID + - **SrcIP** (str) - IP或者掩码/段形式。10.0.0.2,10.0.10.10/16 + + **SGInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **ResourceCount** (int) - 资源绑定数量 + - **Rule** (list) - 见 **SGRuleInfo** 模型定义 + - **RuleCount** (int) - 规则数量 + - **SGID** (str) - 安全组ID + - **Status** (str) - 状态。Creating:创建中,Updating:更新中,Available:有效,Deleted:已删除,Terminating:销毁中,Terminated:已销毁 + - **UpdateTime** (int) - 更新时间,时间戳 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeSecurityGroup", d, **kwargs) + return apis.DescribeSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def describe_storage_type(self, req=None, **kwargs): + """ DescribeStorageType - 查询存储类型 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Infos** (list) - 见 **StorageTypeInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 存储类型的总数 + + **Response Model** + + **StorageTypeInfo** + + - **Region** (str) - 地域 + - **SetArch** (str) - 架构 + - **StorageType** (str) - 存储类型 + - **StorageTypeAlias** (str) - 存储类型别名 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeStorageTypeRequestSchema().dumps(d) + resp = self.invoke("DescribeStorageType", d, **kwargs) + return apis.DescribeStorageTypeResponseSchema().loads(resp)
+ +
[docs] def describe_subnet(self, req=None, **kwargs): + """ DescribeSubnet - 查询子网信息 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **SubnetIDs** (list) - 【数组】子网 ID。调用方式举例:SubnetIDs.0=“one-id”、SubnetIDs.1=“two-id” + - **VPCID** (str) - VPCID + + **Response** + + - **Infos** (list) - 见 **SubnetInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 子网的总数 + + **Response Model** + + **SubnetInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Network** (str) - 网段 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **State** (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除 + - **SubnetID** (str) - ID + - **UpdateTime** (int) - 更新时间,时间戳 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeSubnetRequestSchema().dumps(d) + resp = self.invoke("DescribeSubnet", d, **kwargs) + return apis.DescribeSubnetResponseSchema().loads(resp)
+ +
[docs] def describe_user(self, req=None, **kwargs): + """ DescribeUser - 查询租户信息 + + **Request** + + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **UserIDs** (list) - 【数组】租户的 ID。输入有效的 ID。调用方式举例:UserIDs.0=123”、UserIDs.1=456 + + **Response** + + - **Infos** (list) - 见 **UserInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回现有租户总数 + + **Response Model** + + **UserInfo** + + - **Amount** (float) - 账户余额 + - **CreateTime** (int) - 账户创建时间。时间戳 + - **Email** (str) - 租户名称 + - **PrivateKey** (str) - 私钥 + - **PublicKey** (str) - 公钥 + - **Status** (str) - 用户状态。USER_STATUS_AVAILABLE:正常,USER_STATUS_FREEZE:冻结 + - **UpdateTime** (int) - 更新时间。时间戳 + - **UserID** (int) - 租户ID. + + """ + d = {} + req and d.update(req) + d = apis.DescribeUserRequestSchema().dumps(d) + resp = self.invoke("DescribeUser", d, **kwargs) + return apis.DescribeUserResponseSchema().loads(resp)
+ +
[docs] def describe_vm_instance(self, req=None, **kwargs): + """ DescribeVMInstance - 查询虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (str) - 列表起始位置偏移量,默认为0。 + - **SubnetID** (str) - 子网 ID。输入“有效”状态的子网 ID。 + - **VMIDs** (list) - 【数组】虚拟机的 ID。输入有效的 ID。调用方式举例:PrivateIp.0=“one-id”、PrivateIp.1=“two-id”。 + - **VPCID** (str) - VPC ID。输入“有效”状态的VPC ID。 + + **Response** + + - **Infos** (list) - 见 **VMInstanceInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回虚拟机总个数 + + **Response Model** + + **VMIPInfo** + + - **IP** (str) - IP 值 + - **IPVersion** (str) - IP版本,支持值:IPv4\\IPv6 + - **InterfaceID** (str) - 网卡 ID + - **IsElastic** (str) - 是否是弹性网卡。枚举值:Y,表示是;N,表示否; + - **MAC** (str) - MAC 地址值 + - **SGID** (str) - 安全组 ID + - **SGName** (str) - 安全组名称 + - **SubnetID** (str) - 子网 ID + - **SubnetName** (str) - 子网名称 + - **Type** (str) - IP 类型。枚举值:Private,表示内网;Public,表示外网;Physical,表示物理网; + - **VPCID** (str) - VPC ID + - **VPCName** (str) - VPC 名称 + + **VMDiskInfo** + + - **DiskID** (str) - 磁盘 ID + - **Drive** (str) - 磁盘盘符 + - **IsElastic** (str) - 是否是弹性磁盘。枚举值为:Y,表示是;N,表示否; + - **Name** (str) - 磁盘名称 + - **Size** (int) - 磁盘大小,单位 GB + - **Type** (str) - 磁盘类型。枚举值:Boot,表示系统盘;Data,表示数据盘; + + **VMInstanceInfo** + + - **CPU** (int) - CPU 个数 + - **ChargeType** (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 虚拟机创建时间 + - **DiskInfos** (list) - 见 **VMDiskInfo** 模型定义 + - **ExpireTime** (int) - 虚拟机过期时间 + - **IPInfos** (list) - 见 **VMIPInfo** 模型定义 + - **ImageID** (str) - 镜像 ID + - **Memory** (int) - 内存大小,单位 M + - **Name** (str) - 虚拟机名称 + - **OSName** (str) - 操作系统名称 + - **OSType** (str) - 操作系统类型 + - **Region** (str) - Region + - **RegionAlias** (str) - Region 别名 + - **Remark** (str) - 备注 + - **State** (str) - 虚拟机状态。枚举值:Initializing,表示初始化;Starting,表示启动中;Restarting,表示重启中;Running,表示运行;Stopping,表示关机中;Stopped,表示关机;Deleted,表示已删除;Resizing,表示修改配置中;Terminating,表示销毁中;Terminated,表示已销毁;Migrating,表示迁移中;WaitReinstall,表示等待重装系统;Reinstalling,表示重装中;Poweroffing,表示断电中;ChangeSGing,表示修改防火墙中; + - **SubnetID** (str) - 子网 ID + - **SubnetName** (str) - 子网 名称 + - **VMID** (str) - 虚拟机 ID + - **VMType** (str) - 虚拟机类型 + - **VMTypeAlias** (str) - 虚拟机类型别名 + - **VPCID** (str) - VPC ID + - **VPCName** (str) - VPC 名称 + - **Zone** (str) - Zone + - **ZoneAlias** (str) - Zone 别名 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVMInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeVMInstance", d, **kwargs) + return apis.DescribeVMInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_vm_type(self, req=None, **kwargs): + """ DescribeVMType - 查询主机机型 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Infos** (list) - 见 **VMTypeInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 主机机型的总数 + + **Response Model** + + **VMTypeInfo** + + - **Region** (str) - 地域 + - **SetArch** (str) - 架构 + - **VMType** (str) - 机型 + - **VMTypeAlias** (str) - 机型别名 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVMTypeRequestSchema().dumps(d) + resp = self.invoke("DescribeVMType", d, **kwargs) + return apis.DescribeVMTypeResponseSchema().loads(resp)
+ +
[docs] def describe_vpc(self, req=None, **kwargs): + """ DescribeVPC - 查询VPC信息 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **VPCIDs** (list) - 【数组】VPC的 ID。调用方式举例:VPCIDs.0=“one-id”、VPCIDs.1=“two-id” + + **Response** + + - **Infos** (list) - 见 **VPCInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - VPC的总数 + + **Response Model** + + **SubnetInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Network** (str) - 网段 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **State** (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除 + - **SubnetID** (str) - ID + - **UpdateTime** (int) - 更新时间,时间戳 + - **Zone** (str) - 可用区 + + **VPCInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Network** (str) - 网段,比如10.0.0.0/16 + - **Region** (str) - 地域。 + - **Remark** (str) - 描述 + - **State** (str) - 状态;Allocating:申请中,Available:有效,Terminating:销毁中,Terminated:已销毁 + - **SubnetCount** (int) - 该VPC下拥有的子网数目 + - **SubnetInfos** (list) - 见 **SubnetInfo** 模型定义 + - **UpdateTime** (int) - 修改时间,时间戳 + - **VPCID** (str) - VPC的ID + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPCRequestSchema().dumps(d) + resp = self.invoke("DescribeVPC", d, **kwargs) + return apis.DescribeVPCResponseSchema().loads(resp)
+ +
[docs] def describe_vs(self, req=None, **kwargs): + """ DescribeVS - 获取负载均衡 VServer 信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **VSIDs** (list) - 【数组】VServer的 ID。调用方式举例:VSIDs.0=“one-id”、VSIDs.1=“two-id”。 + + **Response** + + - **Infos** (list) - 见 **VSInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回当前负载均衡 VServer 总个数。 + + **Response Model** + + **VSPolicyInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **LBID** (str) - 负载均衡ID + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **PolicyID** (str) - 内容转发规则ID + - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServerID + + **RSInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **CreateTime** (int) - 创建时间,时间戳 + - **IP** (str) - 服务节点的内网 IP 地址 + - **LBID** (str) - 服务节点所属的负载均衡 ID + - **Name** (str) - 服务节点的资源名称 + - **Port** (int) - 服务节点暴露的服务端口号 + - **RSID** (str) - 服务节点的 ID + - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 + - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - 服务节点所属的 VServer ID + - **Weight** (int) - 服务节点的权重 + + **VSInfo** + + - **AlarmTemplateID** (str) - 告警模板ID + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 + - **HealthcheckType** (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。 + - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。 + - **LBID** (str) - VServer 所属的负载均衡 ID + - **Path** (str) - HTTP 健康检查的路径。当健康检查类型为端口检查时,该值为空。 + - **PersistenceKey** (str) - 会话保持KEY,仅当 VServer 协议为 HTTP 且会话保持为手动时有效。 + - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值为空;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **Port** (int) - 端口 + - **Protocol** (str) - 协议 + - **RSHealthStatus** (str) - 健康检查状态,枚举值,Empty:全部异常,Parts:部分异常,All:正常 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServer的ID + - **VSPolicyInfos** (list) - 见 **VSPolicyInfo** 模型定义 + - **VSStatus** (str) - VServer 的资源状态。枚举值,Available:可用,Updating:更新中,Deleted:已删除 。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVSRequestSchema().dumps(d) + resp = self.invoke("DescribeVS", d, **kwargs) + return apis.DescribeVSResponseSchema().loads(resp)
+ +
[docs] def describe_vs_policy(self, req=None, **kwargs): + """ DescribeVSPolicy - 获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **PolicyIDs** (list) - 【数组】七层负载均衡内容转发规则的 ID。调用方式举例:PolicyIDs.0=“one-id”、PolicyIDs.1=“two-id” + - **VSID** (str) - VServerID + + **Response** + + - **Infos** (list) - 见 **VSPolicyInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回内容转发规则的总个数。 + + **Response Model** + + **RSInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **CreateTime** (int) - 创建时间,时间戳 + - **IP** (str) - 服务节点的内网 IP 地址 + - **LBID** (str) - 服务节点所属的负载均衡 ID + - **Name** (str) - 服务节点的资源名称 + - **Port** (int) - 服务节点暴露的服务端口号 + - **RSID** (str) - 服务节点的 ID + - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 + - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - 服务节点所属的 VServer ID + - **Weight** (int) - 服务节点的权重 + + **VSPolicyInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **LBID** (str) - 负载均衡ID + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **PolicyID** (str) - 内容转发规则ID + - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServerID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVSPolicyRequestSchema().dumps(d) + resp = self.invoke("DescribeVSPolicy", d, **kwargs) + return apis.DescribeVSPolicyResponseSchema().loads(resp)
+ +
[docs] def detach_disk(self, req=None, **kwargs): + """ DetachDisk - 解绑UClouStack硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 硬盘ID + - **ResourceID** (str) - (Required) 绑定的资源ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DetachDiskRequestSchema().dumps(d) + resp = self.invoke("DetachDisk", d, **kwargs) + return apis.DetachDiskResponseSchema().loads(resp)
+ +
[docs] def disable_rs(self, req=None, **kwargs): + """ DisableRS - 禁用负载均衡的单个服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DisableRSRequestSchema().dumps(d) + resp = self.invoke("DisableRS", d, **kwargs) + return apis.DisableRSResponseSchema().loads(resp)
+ +
[docs] def enable_rs(self, req=None, **kwargs): + """ EnableRS - 启用负载均衡的单个服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.EnableRSRequestSchema().dumps(d) + resp = self.invoke("EnableRS", d, **kwargs) + return apis.EnableRSResponseSchema().loads(resp)
+ +
[docs] def get_disk_price(self, req=None, **kwargs): + """ GetDiskPrice - 获取硬盘价格 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DiskSpace** (int) - (Required) 磁盘大小 + - **SetType** (str) - (Required) 磁盘类型 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **Infos** (list) - 见 **PriceInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + + **Response Model** + + **PriceInfo** + + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Price** (float) - 价格 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetDiskPriceRequestSchema().dumps(d) + resp = self.invoke("GetDiskPrice", d, **kwargs) + return apis.GetDiskPriceResponseSchema().loads(resp)
+ +
[docs] def get_eip_price(self, req=None, **kwargs): + """ GetEIPPrice - 获取外网IP价格 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Bandwidth** (int) - (Required) 带宽,默认值1,默认范围1~100 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **OpertatorName** (str) - (Required) 线路。目前支持Bgp + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **Infos** (list) - 见 **PriceInfo** 模型定义 + - **Message** (str) - 返回信息描述 + + **Response Model** + + **PriceInfo** + + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Price** (float) - 价格 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetEIPPriceRequestSchema().dumps(d) + resp = self.invoke("GetEIPPrice", d, **kwargs) + return apis.GetEIPPriceResponseSchema().loads(resp)
+ +
[docs] def get_vm_instance_price(self, req=None, **kwargs): + """ GetVMInstancePrice - 获取虚拟机价格 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BootDiskSetType** (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **CPU** (int) - (Required) CPU 个数,目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DataDiskSetType** (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **DataDiskSpace** (int) - (Required) 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 + - **ImageID** (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。 + - **Memory** (int) - (Required) 内存大小,单位 M。目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。 + - **OSType** (str) - (Required) 系统类型。 + - **VMType** (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **Infos** (list) - 见 **PriceInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + + **Response Model** + + **PriceInfo** + + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Price** (float) - 价格 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetVMInstancePriceRequestSchema().dumps(d) + resp = self.invoke("GetVMInstancePrice", d, **kwargs) + return apis.GetVMInstancePriceResponseSchema().loads(resp)
+ +
[docs] def modify_eip_bandwidth(self, req=None, **kwargs): + """ ModifyEIPBandwidth - 调整外网IP带宽 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Bandwidth** (int) - (Required) 调整后的带宽 + - **EIPID** (str) - (Required) 外网IP的ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ModifyEIPBandwidthRequestSchema().dumps(d) + resp = self.invoke("ModifyEIPBandwidth", d, **kwargs) + return apis.ModifyEIPBandwidthResponseSchema().loads(resp)
+ +
[docs] def modify_name_and_remark(self, req=None, **kwargs): + """ ModifyNameAndRemark - 修改资源名称和备注 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **ResourceID** (str) - (Required) 资源ID; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ModifyNameAndRemarkRequestSchema().dumps(d) + resp = self.invoke("ModifyNameAndRemark", d, **kwargs) + return apis.ModifyNameAndRemarkResponseSchema().loads(resp)
+ +
[docs] def poweroff_vm_instance(self, req=None, **kwargs): + """ PoweroffVMInstance - 断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.PoweroffVMInstanceRequestSchema().dumps(d) + resp = self.invoke("PoweroffVMInstance", d, **kwargs) + return apis.PoweroffVMInstanceResponseSchema().loads(resp)
+ +
[docs] def recharge(self, req=None, **kwargs): + """ Recharge - 管理员给租户充值 + + **Request** + + - **Amount** (int) - (Required) 充值金额。最少100,最大500000 + - **FromType** (str) - (Required) 充值来源。INPOUR_FROM_ALIPAY:支付宝,INPOUR_FROM_OFFLINE:银行转账,INPOUR_FROM_SINPAY:新浪支付,INPOUR_FROM_WECHAT_PAY:微信转账。 + - **SerialNo** (str) - (Required) 充值单号。充值方式为“账户余额”时为必要参数。 + - **UserID** (int) - (Required) 租户的账户ID。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {} + req and d.update(req) + d = apis.RechargeRequestSchema().dumps(d) + resp = self.invoke("Recharge", d, **kwargs) + return apis.RechargeResponseSchema().loads(resp)
+ +
[docs] def reinstall_vm_instance(self, req=None, **kwargs): + """ ReinstallVMInstance - 重装系统,关机的虚拟机才可以重装系统 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **ImageID** (str) - (Required) 镜像ID + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ReinstallVMInstanceRequestSchema().dumps(d) + resp = self.invoke("ReinstallVMInstance", d, **kwargs) + return apis.ReinstallVMInstanceResponseSchema().loads(resp)
+ +
[docs] def release_eip(self, req=None, **kwargs): + """ ReleaseEIP - 删除外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 + - **EIPID** (str) - (Required) 外网IP的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国 + + **Response** + + - **Message** (str) - 返回状态描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ReleaseEIPRequestSchema().dumps(d) + resp = self.invoke("ReleaseEIP", d, **kwargs) + return apis.ReleaseEIPResponseSchema().loads(resp)
+ +
[docs] def renew_resource(self, req=None, **kwargs): + """ RenewResource - 续费回收站资源 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **ResourceID** (str) - (Required) 待续续的资源ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + - **Quantity** (int) - 购买时长,默认为 1。按小时(Dynamic)付费的资源无需此参数,按月付费的资源传 0 时,代表购买至月末。 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RenewResourceRequestSchema().dumps(d) + resp = self.invoke("RenewResource", d, **kwargs) + return apis.RenewResourceResponseSchema().loads(resp)
+ +
[docs] def reset_vm_instance_password(self, req=None, **kwargs): + """ ResetVMInstancePassword - 重置虚拟机密码,主机必须开机才可以重置密码 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Password** (str) - (Required) 密码 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ResetVMInstancePasswordRequestSchema().dumps(d) + resp = self.invoke("ResetVMInstancePassword", d, **kwargs) + return apis.ResetVMInstancePasswordResponseSchema().loads(resp)
+ +
[docs] def resize_vm_config(self, req=None, **kwargs): + """ ResizeVMConfig - 修改虚拟机配置 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **CPU** (int) - (Required) CPU 个数,如 1、2、4、8、16、32、64。 + - **Memory** (int) - (Required) 内存容量,如 2048、4096、8192、16384、32768、65536、131072。 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ResizeVMConfigRequestSchema().dumps(d) + resp = self.invoke("ResizeVMConfig", d, **kwargs) + return apis.ResizeVMConfigResponseSchema().loads(resp)
+ +
[docs] def restart_vm_instance(self, req=None, **kwargs): + """ RestartVMInstance - 重启虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机ID; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RestartVMInstanceRequestSchema().dumps(d) + resp = self.invoke("RestartVMInstance", d, **kwargs) + return apis.RestartVMInstanceResponseSchema().loads(resp)
+ +
[docs] def rollback_resource(self, req=None, **kwargs): + """ RollbackResource - 恢复回收站资源 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **ResourceID** (str) - (Required) 待恢复的资源ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RollbackResourceRequestSchema().dumps(d) + resp = self.invoke("RollbackResource", d, **kwargs) + return apis.RollbackResourceResponseSchema().loads(resp)
+ +
[docs] def rollback_snapshot(self, req=None, **kwargs): + """ RollbackSnapshot - 将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **DiskID** (str) - (Required) 对应的云硬盘 ID; + - **SnapshotID** (str) - (Required) 快照ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RollbackSnapshotRequestSchema().dumps(d) + resp = self.invoke("RollbackSnapshot", d, **kwargs) + return apis.RollbackSnapshotResponseSchema().loads(resp)
+ +
[docs] def start_vm_instance(self, req=None, **kwargs): + """ StartVMInstance - 开启虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机 ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.StartVMInstanceRequestSchema().dumps(d) + resp = self.invoke("StartVMInstance", d, **kwargs) + return apis.StartVMInstanceResponseSchema().loads(resp)
+ +
[docs] def stop_vm_instance(self, req=None, **kwargs): + """ StopVMInstance - 关闭虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机 ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + - **VMID** (str) - 虚拟机 ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.StopVMInstanceRequestSchema().dumps(d) + resp = self.invoke("StopVMInstance", d, **kwargs) + return apis.StopVMInstanceResponseSchema().loads(resp)
+ +
[docs] def terminate_resource(self, req=None, **kwargs): + """ TerminateResource - 销毁资源 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **ResourceID** (str) - (Required) 资源id + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.TerminateResourceRequestSchema().dumps(d) + resp = self.invoke("TerminateResource", d, **kwargs) + return apis.TerminateResourceResponseSchema().loads(resp)
+ +
[docs] def un_bind_eip(self, req=None, **kwargs): + """ UnBindEIP - 解绑外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 + - **EIPID** (str) - (Required) 外网IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnBindEIPRequestSchema().dumps(d) + resp = self.invoke("UnBindEIP", d, **kwargs) + return apis.UnBindEIPResponseSchema().loads(resp)
+ +
[docs] def un_bind_security_group(self, req=None, **kwargs): + """ UnBindSecurityGroup - 解绑安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **ResourceID** (str) - (Required) 解绑的资源ID。调用方式举例:ResourceID=“one-id”。 + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnBindSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("UnBindSecurityGroup", d, **kwargs) + return apis.UnBindSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def unbind_alarm_template(self, req=None, **kwargs): + """ UnbindAlarmTemplate - 解绑告警模板 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **AlarmTemplateID** (str) - (Required) 告警模板ID + - **ResourceIDs** (list) - (Required) 【数组】资源的 ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性网卡 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnbindAlarmTemplateRequestSchema().dumps(d) + resp = self.invoke("UnbindAlarmTemplate", d, **kwargs) + return apis.UnbindAlarmTemplateResponseSchema().loads(resp)
+ +
[docs] def unbind_physical_ip(self, req=None, **kwargs): + """ UnbindPhysicalIP - 解绑物理IP + + **Request** + + - **Region** (str) - (Config) 地域。 + - **PhysicalIPID** (str) - (Required) 物理IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnbindPhysicalIPRequestSchema().dumps(d) + resp = self.invoke("UnbindPhysicalIP", d, **kwargs) + return apis.UnbindPhysicalIPResponseSchema().loads(resp)
+ +
[docs] def update_alarm_template_rule(self, req=None, **kwargs): + """ UpdateAlarmTemplateRule - 更新告警模板规则 + + **Request** + + - **Region** (str) - (Config) 地域 + - **AlarmStrategy** (str) - (Required) 瘦脸策略 + - **AlarmTemplateID** (str) - (Required) 告警模板ID + - **AlarmTemplateRuleID** (str) - (Required) 告警规则ID + - **Compare** (str) - (Required) 对比方式 + - **ContactGroupID** (str) - (Required) 通知组ID + - **MetricName** (str) - (Required) 监控指标名称 + - **ResourceType** (str) - (Required) 资源类型 + - **Threshold** (str) - (Required) 告警阈值 + - **TriggerCount** (str) - (Required) 连续触发次数 + - **Zone** (str) - (Required) 可用区 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateAlarmTemplateRuleRequestSchema().dumps(d) + resp = self.invoke("UpdateAlarmTemplateRule", d, **kwargs) + return apis.UpdateAlarmTemplateRuleResponseSchema().loads(resp)
+ +
[docs] def update_rs(self, req=None, **kwargs): + """ UpdateRS - 修改负载均衡的服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) RServer所属的VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Port** (int) - 端口号 + - **Weight** (int) - 权重 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateRSRequestSchema().dumps(d) + resp = self.invoke("UpdateRS", d, **kwargs) + return apis.UpdateRSResponseSchema().loads(resp)
+ +
[docs] def update_security_group_rule(self, req=None, **kwargs): + """ UpdateSecurityGroupRule - 修改安全组规则 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Rules** (list) - (Required) 【数组】规则。输入有效的 规则。调用方式举例:Rules.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rules.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateSecurityGroupRuleRequestSchema().dumps(d) + resp = self.invoke("UpdateSecurityGroupRule", d, **kwargs) + return apis.UpdateSecurityGroupRuleResponseSchema().loads(resp)
+ +
[docs] def update_vs(self, req=None, **kwargs): + """ UpdateVS - 修改负载均衡VServer + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID + - **VSID** (str) - (Required) 需要更新的VSID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 + - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 + - **HealthcheckType** (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。仅当 VServer 协议类型为 HTTP 时,才可进行 HTTP 检查。 + - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。 + - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 + - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 + - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **Port** (int) - VServer 监听端口 + - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 + - **Scheduler** (str) - 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 + - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS 时有效。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateVSRequestSchema().dumps(d) + resp = self.invoke("UpdateVS", d, **kwargs) + return apis.UpdateVSResponseSchema().loads(resp)
+ +
[docs] def update_vs_policy(self, req=None, **kwargs): + """ UpdateVSPolicy - 更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **PolicyID** (str) - (Required) 内容转发规则ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **RSIDs** (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateVSPolicyRequestSchema().dumps(d) + resp = self.invoke("UpdateVSPolicy", d, **kwargs) + return apis.UpdateVSPolicyResponseSchema().loads(resp)
+ +
[docs] def upgrade_disk(self, req=None, **kwargs): + """ UpgradeDisk - 升级硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 硬盘ID + - **DiskSpace** (int) - (Required) 硬盘升级后的容量, 不能小于原硬盘容量,单位为 GB 。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpgradeDiskRequestSchema().dumps(d) + resp = self.invoke("UpgradeDisk", d, **kwargs) + return apis.UpgradeDiskResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/udb/client.html b/_modules/ucloud/services/udb/client.html new file mode 100644 index 0000000..bf9281c --- /dev/null +++ b/_modules/ucloud/services/udb/client.html @@ -0,0 +1,1416 @@ + + + + + + + + ucloud.services.udb.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.udb.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.udb.schemas import apis
+
+
+
[docs]class UDBClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UDBClient, self).__init__(config, transport, middleware, logger) + +
[docs] def backup_udb_instance(self, req=None, **kwargs): + """ BackupUDBInstance - 备份UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupName** (str) - (Required) 备份名称 + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **BackupMethod** (str) - 使用的备份方式。(快照备份即物理备份。注意只有SSD版本的mysql实例支持设置为snapshot) + - **Blacklist** (str) - 备份黑名单列表,以 ; 分隔。注意:只有逻辑备份下备份黑名单才生效,快照备份备份黑名单下无效 + - **ForceBackup** (bool) - true表示逻辑备份时是使用 --force 参数,false表示不使用 --force 参数。物理备份此参数无效。 + - **UseBlacklist** (bool) - 是否使用黑名单备份,默认false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("BackupUDBInstance", d, **kwargs) + return apis.BackupUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def backup_udb_instance_binlog(self, req=None, **kwargs): + """ BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupFile** (str) - (Required) 需要备份文件,可通过DescribeUDBInstanceBinlog获得 如果要传入多个文件名,以空格键分割,用单引号包含. + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **BackupName** (str) - DB备份文件名称 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceBinlogRequestSchema().dumps(d) + resp = self.invoke("BackupUDBInstanceBinlog", d, **kwargs) + return apis.BackupUDBInstanceBinlogResponseSchema().loads(resp)
+ +
[docs] def backup_udb_instance_error_log(self, req=None, **kwargs): + """ BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupName** (str) - (Required) 备份名称 + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceErrorLogRequestSchema().dumps(d) + resp = self.invoke("BackupUDBInstanceErrorLog", d, **kwargs) + return apis.BackupUDBInstanceErrorLogResponseSchema().loads(resp)
+ +
[docs] def backup_udb_instance_slow_log(self, req=None, **kwargs): + """ BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupName** (str) - (Required) 备份文件名称 + - **BeginTime** (int) - (Required) 过滤条件:起始时间(时间戳) + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **EndTime** (int) - (Required) 过滤条件:结束时间(时间戳) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceSlowLogRequestSchema().dumps(d) + resp = self.invoke("BackupUDBInstanceSlowLog", d, **kwargs) + return apis.BackupUDBInstanceSlowLogResponseSchema().loads(resp)
+ +
[docs] def check_recover_udb_instance(self, req=None, **kwargs): + """ CheckRecoverUDBInstance - 核查db是否可以使用回档功能 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SrcDBId** (str) - (Required) 源实例的Id(只支持普通版DB不支持高可用) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **LastestTime** (int) - 核查成功返回值为可以回档到的最近时刻,核查失败不返回 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CheckRecoverUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("CheckRecoverUDBInstance", d, **kwargs) + return apis.CheckRecoverUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def check_udb_instance_to_ha_allowance(self, req=None, **kwargs): + """ CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + + **Response** + + - **Allowance** (str) - Yes ,No ,Yes即可以升级,No为不可以升级 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CheckUDBInstanceToHAAllowanceRequestSchema().dumps(d) + resp = self.invoke("CheckUDBInstanceToHAAllowance", d, **kwargs) + return apis.CheckUDBInstanceToHAAllowanceResponseSchema().loads(resp)
+ +
[docs] def clear_udb_log(self, req=None, **kwargs): + """ ClearUDBLog - 清除UDB实例的log + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取 + - **LogType** (int) - (Required) 日志类型,10-error(暂不支持)、20-slow(暂不支持 )、30-binlog + - **BeforeTime** (int) - 删除时间点(至少前一天)之前log,采用时间戳(秒),默认当 前时间点前一天 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ClearUDBLogRequestSchema().dumps(d) + resp = self.invoke("ClearUDBLog", d, **kwargs) + return apis.ClearUDBLogResponseSchema().loads(resp)
+ +
[docs] def create_udb_instance(self, req=None, **kwargs): + """ CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AdminPassword** (str) - (Required) 管理员密码 + - **DBTypeId** (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6,14:postgresql-10.4 + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 3000G + - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M + - **Name** (str) - (Required) 实例名称,至少6位 + - **ParamGroupId** (int) - (Required) DB实例使用的配置参数组id + - **Port** (int) - (Required) 端口号,mysql默认3306,mongodb默认27017,postgresql默认5432 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AdminUser** (str) - 管理员帐户名,默认root + - **BackupCount** (int) - 备份策略,每周备份数量,默认7次 + - **BackupDuration** (int) - 备份策略,备份时间间隔,单位小时计,默认24小时 + - **BackupId** (int) - 备份id,如果指定,则表明从备份恢复实例 + - **BackupTime** (int) - 备份策略,备份开始时间,单位小时计,默认1点 + - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CPU** (int) - cpu核数 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Month + - **ClusterRole** (str) - 当DB类型(DBTypeId)为mongodb时,需要指定mongo的角色,可选值为configsrv (配置节点),shardsrv (数据节点) + - **CouponId** (str) - 使用的代金券id + - **DisableSemisync** (bool) - 是否开启异步高可用,默认不填,可置为true + - **HAArch** (str) - 高可用架构:1) haproxy(默认): 当前仅支持mysql。2) sentinel: 基于vip和哨兵节点的架构,当前支持mysql和pg。 + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例 "HA": 高可用版UDB实例 默认是"Normal" + - **InstanceType** (str) - UDB数据库机型 + - **Quantity** (int) - 购买时长,默认值1 + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **SubnetId** (str) - 子网ID + - **Tag** (str) - 实例所在的业务组名称 + - **UDBCId** (str) - 专区ID信息(如果这个参数存在这说明是在专区中创建DB) + - **UseSSD** (bool) - 是否使用SSD,默认为false。目前主要可用区、海外机房、新机房只提供SSD资源,非SSD资源不再提供。 + - **VPCId** (str) - VPC的ID + + **Response** + + - **DBId** (str) - BD实例id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBInstance", d, **kwargs) + return apis.CreateUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def create_udb_instance_by_recovery(self, req=None, **kwargs): + """ CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称,至少6位 + - **RecoveryTime** (int) - (Required) 恢复到某个时间点的时间戳(UTC时间格式,默认单位秒) + - **SrcDBId** (str) - (Required) 源实例的Id + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长,默认值1 + - **SubnetId** (str) - 子网ID + - **UDBCId** (str) - 专区的Id + - **UseSSD** (bool) - 指定是否是否使用SSD,默认使用主库的配置 + - **VPCId** (str) - VPC的ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - db实例id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBInstanceByRecoveryRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBInstanceByRecovery", d, **kwargs) + return apis.CreateUDBInstanceByRecoveryResponseSchema().loads(resp)
+ +
[docs] def create_udb_param_group(self, req=None, **kwargs): + """ CreateUDBParamGroup - 从已有配置文件创建新配置文件 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBTypeId** (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6 + - **Description** (str) - (Required) 参数组描述 + - **GroupName** (str) - (Required) 新配置参数组名称 + - **SrcGroupId** (int) - (Required) 源参数组id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RegionFlag** (bool) - 是否是地域级别的配置文件,默认是false + + **Response** + + - **GroupId** (int) - 新配置参数组id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBParamGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBParamGroup", d, **kwargs) + return apis.CreateUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def create_udb_replication_instance(self, req=None, **kwargs): + """ CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称,至少6位 + - **SrcId** (str) - (Required) primary节点的DBId,该值可以通过DescribeUDBInstance获取 + - **CouponId** (str) - 使用的代金券id + - **IsArbiter** (bool) - 是否是仲裁节点,默认false,仲裁节点按最小机型创建 + - **Port** (int) - 端口号,默认27017,取值范围3306至65535。 + - **UseSSD** (bool) - 是否使用SSD,默认不使用 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - 创建从节点的DBId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBReplicationInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBReplicationInstance", d, **kwargs) + return apis.CreateUDBReplicationInstanceResponseSchema().loads(resp)
+ +
[docs] def create_udb_route_instance(self, req=None, **kwargs): + """ CreateUDBRouteInstance - 创建mongos实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ConfigsvrId** (list) - (Required) 配置服务器的dbid,允许一个或者三个。 + - **DBTypeId** (str) - (Required) DB类型id,mongodb按版本细分有1:mongodb-2.4,2:mongodb-2.6,3:mongodb-3.0,4:mongodb-3.2 + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G + - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 600M/1500M/3000M /6000M/15000M/30000M + - **Name** (str) - (Required) 实例名称,至少6位 + - **ParamGroupId** (int) - (Required) DB实例使用的配置参数组id + - **Port** (int) - (Required) 端口号,mongodb默认27017 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Month + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长,默认值1 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - db实例id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBRouteInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBRouteInstance", d, **kwargs) + return apis.CreateUDBRouteInstanceResponseSchema().loads(resp)
+ +
[docs] def create_udb_slave(self, req=None, **kwargs): + """ CreateUDBSlave - 创建UDB实例的slave + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称,至少6位 + - **SrcId** (str) - (Required) master实例的DBId,该值可以通过DescribeUDBInstance获取 + - **CouponId** (str) - 使用的代金券id + - **DiskSpace** (int) - 磁盘空间(GB), 暂时支持20G - 3000G(API支持,前端暂时只开放内存定制) + - **InstanceMode** (str) - UDB实例部署模式,可选值如下:Normal: 普通单点实例HA: 高可用部署实例 + - **InstanceType** (str) - UDB实例类型:Normal和SATA_SSD + - **IsLock** (bool) - 是否锁主库,默认为true + - **MemoryLimit** (int) - 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M + - **Port** (int) - 端口号,mysql默认3306 + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - 创建slave的DBId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBSlaveRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBSlave", d, **kwargs) + return apis.CreateUDBSlaveResponseSchema().loads(resp)
+ +
[docs] def delete_udb_backup(self, req=None, **kwargs): + """ DeleteUDBBackup - 删除UDB实例备份 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 备份id,可通过DescribeUDBBackup获得 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见[可用区列表] + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBBackupRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBBackup", d, **kwargs) + return apis.DeleteUDBBackupResponseSchema().loads(resp)
+ +
[docs] def delete_udb_instance(self, req=None, **kwargs): + """ DeleteUDBInstance - 删除UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取 + - **UDBCId** (str) - 专区ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBInstance", d, **kwargs) + return apis.DeleteUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def delete_udb_log_package(self, req=None, **kwargs): + """ DeleteUDBLogPackage - 删除UDB日志包 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 日志包id,可通过DescribeUDBLogPackage获得 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBLogPackageRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBLogPackage", d, **kwargs) + return apis.DeleteUDBLogPackageResponseSchema().loads(resp)
+ +
[docs] def delete_udb_param_group(self, req=None, **kwargs): + """ DeleteUDBParamGroup - 删除配置参数组 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (int) - (Required) 参数组id,可通过DescribeUDBParamGroup获取 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RegionFlag** (bool) - 是否属于地域级别 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBParamGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBParamGroup", d, **kwargs) + return apis.DeleteUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def describe_udb_backup(self, req=None, **kwargs): + """ DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 + - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 + - **BackupId** (int) - 如果填了BackupId, 那么只拉取这个备份的记录 + - **BackupType** (int) - 备份类型,取值为0或1,0表示自动,1表示手动 + - **BeginTime** (int) - 过滤条件:起始时间(Unix时间戳) + - **ClassType** (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver) + - **DBId** (str) - DB实例Id,如果指定,则只获取该db的备份信息 该值可以通过DescribeUDBInstance获取 + - **EndTime** (int) - 过滤条件:结束时间(Unix时间戳) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBBackupSet** 模型定义 + - **TotalCount** (int) - 满足条件备份总数,如果指定dbid,则是该db备份总数 + + **Response Model** + + **UDBBackupSet** + + - **BackupEndTime** (int) - 备份完成时间(Unix时间戳) + - **BackupId** (int) - 备份id + - **BackupName** (str) - 备份名称 + - **BackupSize** (int) - 备份文件大小(字节) + - **BackupTime** (int) - 备份时间(Unix时间戳) + - **BackupType** (int) - 备份类型,取值为0或1,0表示自动,1表示手动 + - **BackupZone** (str) - 跨机房高可用备库所在可用区 + - **DBId** (str) - dbid + - **DBName** (str) - 对应的db名称 + - **ErrorInfo** (str) - 备份错误信息 + - **State** (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期 + - **Zone** (str) - 备份所在可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBBackupRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBBackup", d, **kwargs) + return apis.DescribeUDBBackupResponseSchema().loads(resp)
+ +
[docs] def describe_udb_backup_blacklist(self, req=None, **kwargs): + """ DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Blacklist** (str) - DB的黑名单列表, db.%为指定库 dbname.tablename为指定表 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBBackupBlacklistRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBBackupBlacklist", d, **kwargs) + return apis.DescribeUDBBackupBlacklistResponseSchema().loads(resp)
+ +
[docs] def describe_udb_binlog_backup_url(self, req=None, **kwargs): + """ DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) DB实例binlog备份ID,可以从DescribeUDBLogPackage结果当中获得 + - **DBId** (str) - (Required) DB实例Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - DB实例备份文件的公网地址 + - **InnerBackupPath** (str) - DB实例备份文件的内网地址 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBBinlogBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBBinlogBackupURL", d, **kwargs) + return apis.DescribeUDBBinlogBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance(self, req=None, **kwargs): + """ DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ClassType** (str) - DB种类,如果是列表操作,则需要指定,不区分大小写,其取值如下:mysql: SQL;mongo: NOSQL;postgresql: postgresql + - **DBId** (str) - DB实例id,如果指定则获取单个db实例的描述,否则为列表操作。 指定DBId时无需填写ClassType、Offset、Limit + - **IncludeSlaves** (bool) - 当只获取这个特定DBId的信息时,如果有该选项,那么把这个DBId实例的所有从库信息一起拉取并返回 + - **IsInUDBC** (bool) - 是否查看专区里面DB + - **Limit** (int) - 分页显示数量,列表操作时必填 + - **Offset** (int) - 分页显示起始偏移位置,列表操作时必填 + - **UDBCId** (str) - IsInUDBC为True,UDBCId为空,说明查看整个可用区的专区的db,如果UDBId不为空则只查看此专区下面的db + - **Zone** (str) - 可用区,不填时默认全部可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBInstanceSet** 模型定义 + - **TotalCount** (int) - 用户db组的数量,对于 mysql: 主从结对数量,没有slave,则只有master mongodb: 副本集数量 + + **Response Model** + + **UDBSlaveInstanceSet** + + - **AdminUser** (str) - 管理员帐户名,默认root + - **BackupBeginTime** (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点 + - **BackupBlacklist** (str) - 备份策略,备份黑名单,mongodb则不适用 + - **BackupCount** (int) - 备份策略,不可修改,备份文件保留的数量,默认7次 + - **BackupDate** (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能 + - **BackupDuration** (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **ClusterRole** (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式 + - **CreateTime** (int) - DB实例创建时间,采用UTC计时时间戳 + - **DBId** (str) - DB实例id + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 + - **DataFileSize** (float) - DB实例数据文件大小,单位GB + - **DiskSpace** (int) - 磁盘空间(GB), 默认根据配置机型 + - **DiskUsedSize** (float) - DB实例磁盘已使用空间,单位GB + - **ExpiredTime** (int) - DB实例过期时间,采用UTC计时时间戳 + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例;"HA": 高可用版UDB实例 + - **InstanceType** (str) - UDB数据库机型 + - **InstanceTypeId** (int) - UDB数据库机型ID + - **LogFileSize** (float) - DB实例日志文件大小,单位GB + - **MemoryLimit** (int) - 内存限制(MB),默认根据配置机型 + - **ModifyTime** (int) - DB实例修改时间,采用UTC计时时间戳 + - **Name** (str) - 实例名称,至少6位 + - **ParamGroupId** (int) - DB实例使用的配置参数组id + - **Port** (int) - 端口号,mysql默认3306,mongodb默认27017 + - **Role** (str) - DB实例角色,mysql区分master/slave,mongodb多种角色 + - **SSDType** (str) - SSD类型,SATA/PCI-E + - **SrcDBId** (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id + - **State** (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败 + - **SubnetId** (str) - 子网ID + - **SystemFileSize** (float) - DB实例系统文件大小,单位GB + - **Tag** (str) - 获取资源其他信息 + - **UseSSD** (bool) - 是否使用SSD + - **VPCId** (str) - VPC的ID + - **VirtualIP** (str) - DB实例虚ip + - **VirtualIPMac** (str) - DB实例虚ip的mac地址 + - **Zone** (str) - 可用区 + + **UDBInstanceSet** + + - **AdminUser** (str) - 管理员帐户名,默认root + - **BackupBeginTime** (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点 + - **BackupBlacklist** (str) - 备份策略,备份黑名单,mongodb则不适用 + - **BackupCount** (int) - 备份策略,不可修改,备份文件保留的数量,默认7次 + - **BackupDate** (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能 + - **BackupDuration** (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时 + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **CluserRole** (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式 + - **CreateTime** (int) - DB实例创建时间,采用UTC计时时间戳 + - **DBId** (str) - DB实例id + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 + - **DataFileSize** (float) - DB实例数据文件大小,单位GB + - **DataSet** (list) - 见 **UDBSlaveInstanceSet** 模型定义 + - **DiskSpace** (int) - 磁盘空间(GB), 默认根据配置机型 + - **DiskUsedSize** (float) - DB实例磁盘已使用空间,单位GB + - **ExpiredTime** (int) - DB实例过期时间,采用UTC计时时间戳 + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 + - **InstanceType** (str) - UDB数据库机型 + - **InstanceTypeId** (int) - UDB数据库机型ID + - **LogFileSize** (float) - DB实例日志文件大小,单位GB + - **MemoryLimit** (int) - 内存限制(MB),默认根据配置机型 + - **ModifyTime** (int) - DB实例修改时间,采用UTC计时时间戳 + - **Name** (str) - 实例名称,至少6位 + - **ParamGroupId** (int) - DB实例使用的配置参数组id + - **Port** (int) - 端口号,mysql默认3306,mongodb默认27017 + - **Role** (str) - DB实例角色,mysql区分master/slave,mongodb多种角色 + - **SSDType** (str) - SSD类型,SATA/PCI-E + - **SrcDBId** (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id + - **State** (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败 + - **SubnetId** (str) - 子网ID + - **SystemFileSize** (float) - DB实例系统文件大小,单位GB + - **Tag** (str) - 获取资源其他信息 + - **UseSSD** (bool) - 是否使用SSD + - **VPCId** (str) - VPC的ID + - **VirtualIP** (str) - DB实例虚ip + - **VirtualIPMac** (str) - DB实例虚ip的mac地址 + - **Zone** (str) - DB实例所在可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstance", d, **kwargs) + return apis.DescribeUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_backup_state(self, req=None, **kwargs): + """ DescribeUDBInstanceBackupState - 获取UDB实例备份状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 备份记录ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见[可用区列表] + + **Response** + + - **BackupEndTime** (int) - + - **BackupSize** (int) - + - **State** (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBackupStateRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBackupState", d, **kwargs) + return apis.DescribeUDBInstanceBackupStateResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_backup_url(self, req=None, **kwargs): + """ DescribeUDBInstanceBackupURL - 获取UDB备份下载地址 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) DB实例备份ID,该值可以通过DescribeUDBBackup获取 + - **DBId** (str) - (Required) DB实例Id,该值可通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - DB实例备份文件公网的地址 + - **InnerBackupPath** (str) - DB实例备份文件内网的地址 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBackupURL", d, **kwargs) + return apis.DescribeUDBInstanceBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_binlog(self, req=None, **kwargs): + """ DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BeginTime** (int) - (Required) 过滤条件:起始时间(时间戳) + - **DBId** (str) - (Required) DB实例Id + - **EndTime** (int) - (Required) 过滤条件:结束时间(时间戳) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBInstanceBinlogSet** 模型定义 + + **Response Model** + + **UDBInstanceBinlogSet** + + - **BeginTime** (int) - Binlog文件生成时间(时间戳) + - **EndTime** (int) - Binlog文件结束时间(时间戳) + - **Name** (str) - Binlog文件名 + - **Size** (int) - Binlog文件大小 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBinlogRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBinlog", d, **kwargs) + return apis.DescribeUDBInstanceBinlogResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_binlog_backup_state(self, req=None, **kwargs): + """ DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 备份记录ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + + **Response** + + - **BackupSize** (int) - 备份文件大小(字节) + - **State** (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBinlogBackupStateRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBinlogBackupState", d, **kwargs) + return apis.DescribeUDBInstanceBinlogBackupStateResponseSchema().loads( + resp + )
+ +
[docs] def describe_udb_instance_price(self, req=None, **kwargs): + """ DescribeUDBInstancePrice - 获取UDB实例价格信息 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBTypeId** (str) - (Required) UDB实例的DB版本字符串 + - **DiskSpace** (int) - (Required) 磁盘空间(GB),暂时支持20(GB) - 3000(GB), 输入不带单位 + - **MemoryLimit** (int) - (Required) 内存限制(MB),单位为MB.目前支持:1000-96000 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year,按年付费; Month,按月付费 Dynamic,按需付费(需开启权限) Trial,试用(需开启权限)默认为月付 + - **Count** (int) - 购买DB实例数量,最大数量为10台, 默认为1台 + - **InstanceMode** (str) - 实例的部署类型。可选值为:Normal: 普通单点实例,Slave: 从库实例,HA: 高可用部署实例,默认是Normal + - **Quantity** (int) - DB购买多少个"计费时间单位",默认值为1。比如:买2个月,Quantity就是2。如果计费单位是“按月”,并且Quantity为0,表示“购买到月底” + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必填 + - **UseSSD** (str) - 是否使用SSD,只能填true或false,默认为false + + **Response** + + - **DataSet** (list) - 见 **UDBInstancePriceSet** 模型定义 + + **Response Model** + + **UDBInstancePriceSet** + + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **Price** (int) - 价格,单位为分 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstancePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstancePrice", d, **kwargs) + return apis.DescribeUDBInstancePriceResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_state(self, req=None, **kwargs): + """ DescribeUDBInstanceState - 获取UDB实例状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **State** (str) - DB状态标记 Init:初始化中;Fail:安装失败; Starting:启动中; Running : 运行 ;Shutdown:关闭中; Shutoff :已关闭; Delete:已删除; Upgrading:升级中; Promoting: 提升为独库进行中; Recovering: 恢复中; Recover fail:恢复失败。 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceStateRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceState", d, **kwargs) + return apis.DescribeUDBInstanceStateResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_upgrade_price(self, req=None, **kwargs): + """ DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G + - **MemoryLimit** (int) - (Required) 内存限制(MB) + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Price** (int) - 价格,单位为分 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceUpgradePrice", d, **kwargs) + return apis.DescribeUDBInstanceUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def describe_udb_log_backup_url(self, req=None, **kwargs): + """ DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) DB实例备份ID + - **DBId** (str) - (Required) DB实例Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - 备份外网URL + - **UsernetPath** (str) - 备份用户网URL + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBLogBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBLogBackupURL", d, **kwargs) + return apis.DescribeUDBLogBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_udb_log_package(self, req=None, **kwargs): + """ DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 + - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 + - **BeginTime** (int) - 过滤条件:起始时间(时间戳) + - **DBId** (str) - DB实例Id,如果指定,则只获取该db的备份信息 + - **EndTime** (int) - 过滤条件:结束时间(时间戳) + - **Type** (int) - 需要列出的备份文件类型,每种文件的值如下 2 : BINLOG\\_BACKUP 3 : SLOW\\_QUERY\\_BACKUP 4 : ERRORLOG\\_BACKUP + - **Types** (list) - Types作为Type的补充,支持多值传入,可以获取多个类型的日志记录,如:Types.0=2&Types.1=3 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **LogPackageDataSet** 模型定义 + - **TotalCount** (int) - 备份总数,如果指定dbid,则是该db备份总数 + + **Response Model** + + **LogPackageDataSet** + + - **BackupId** (int) - 备份id + - **BackupName** (str) - 备份名称 + - **BackupSize** (int) - 备份文件大小 + - **BackupTime** (int) - 备份时间 + - **BackupType** (int) - 备份类型,包括2-binlog备份,3-slowlog备份 + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + - **DBId** (str) - dbid + - **DBName** (str) - 对应的db名称 + - **State** (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期 + - **Zone** (str) - 所在可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBLogPackageRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBLogPackage", d, **kwargs) + return apis.DescribeUDBLogPackageResponseSchema().loads(resp)
+ +
[docs] def describe_udb_param_group(self, req=None, **kwargs): + """ DescribeUDBParamGroup - 获取参数组详细参数信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 + - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 + - **ClassType** (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver) + - **GroupId** (int) - 参数组id,如果指定则获取描述,否则是列表操作,需要 指定Offset/Limit + - **IsInUDBC** (bool) - 是否选取专区中配置 + - **RegionFlag** (bool) - 当请求没有填写Zone时,如果指定为true,表示只拉取跨可用区的相关配置文件,否则,拉取所有机房的配置文件(包括每个单可用区和跨可用区) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBParamGroupSet** 模型定义 + - **TotalCount** (int) - 参数组总数,列表操作时才会有该参数 + + **Response Model** + + **UDBParamMemberSet** + + - **AllowedVal** (str) - 允许的值(根据参数类型,用分隔符表示) + - **ApplyType** (int) - 参数值应用类型,取值范围为{0,10,20},各值代表 意义为0-unknown、10-static、20-dynamic + - **FormatType** (int) - 允许值的格式类型,取值范围为{0,10,20},意义分 别为PVFT_UNKOWN=0,PVFT_RANGE=10, PVFT_ENUM=20 + - **Key** (str) - 参数名称 + - **Modifiable** (bool) - 是否可更改,默认为false + - **Value** (str) - 参数值 + - **ValueType** (int) - 参数值应用类型,取值范围为{0,10,20,30},各值 代表意义为 0-unknown、10-int、20-string、 30-bool + + **UDBParamGroupSet** + + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6 7:percona-5.6 + - **Description** (str) - 参数组描述 + - **GroupId** (int) - 参数组id + - **GroupName** (str) - 参数组名称 + - **Modifiable** (bool) - 参数组是否可修改 + - **ParamMember** (list) - 见 **UDBParamMemberSet** 模型定义 + - **RegionFlag** (bool) - + - **Zone** (str) - + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBParamGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBParamGroup", d, **kwargs) + return apis.DescribeUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def describe_udb_type(self, req=None, **kwargs): + """ DescribeUDBType - 获取UDB支持的类型信息 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用DB的备库所在区域,仅当该可用区支持跨可用区高可用时填入。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBClusterType** (str) - DB实例类型,如mysql,sqlserver,mongo,postgresql + - **DiskType** (str) - 返回支持某种磁盘类型的DB类型。如果没传,则表示任何磁盘类型均可。 + - **InstanceMode** (str) - 返回支持某种实例类型的DB类型。如果没传,则表示任何实例类型均可。normal:单点,ha:高可用,sharded_cluster:分片集群 + + **Response** + + - **Action** (str) - 操作名称 + - **DataSet** (list) - 见 **UDBTypeSet** 模型定义 + - **RetCode** (int) - 返回码 + + **Response Model** + + **UDBTypeSet** + + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id, 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBTypeRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBType", d, **kwargs) + return apis.DescribeUDBTypeResponseSchema().loads(resp)
+ +
[docs] def edit_udb_backup_blacklist(self, req=None, **kwargs): + """ EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Blacklist** (str) - (Required) 黑名单,规范示例,指定库mysql.%;test.%; 指定表city.address; + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.EditUDBBackupBlacklistRequestSchema().dumps(d) + resp = self.invoke("EditUDBBackupBlacklist", d, **kwargs) + return apis.EditUDBBackupBlacklistResponseSchema().loads(resp)
+ +
[docs] def fetch_udb_instance_earliest_recover_time(self, req=None, **kwargs): + """ FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **EarliestTime** (int) - 获取最早可回档时间点 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.FetchUDBInstanceEarliestRecoverTimeRequestSchema().dumps(d) + resp = self.invoke("FetchUDBInstanceEarliestRecoverTime", d, **kwargs) + return apis.FetchUDBInstanceEarliestRecoverTimeResponseSchema().loads( + resp + )
+ +
[docs] def modify_udb_instance_name(self, req=None, **kwargs): + """ ModifyUDBInstanceName - 重命名UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Name** (str) - (Required) 实例的新名字, 长度要求为6~63位 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUDBInstanceNameRequestSchema().dumps(d) + resp = self.invoke("ModifyUDBInstanceName", d, **kwargs) + return apis.ModifyUDBInstanceNameResponseSchema().loads(resp)
+ +
[docs] def modify_udb_instance_password(self, req=None, **kwargs): + """ ModifyUDBInstancePassword - 修改DB实例的管理员密码 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的ID,该值可以通过DescribeUDBInstance获取 + - **Password** (str) - (Required) 实例的新密码 + - **AccountName** (str) - sqlserver帐号,仅在sqlserver的情况下填该参数 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUDBInstancePasswordRequestSchema().dumps(d) + resp = self.invoke("ModifyUDBInstancePassword", d, **kwargs) + return apis.ModifyUDBInstancePasswordResponseSchema().loads(resp)
+ +
[docs] def promote_udb_instance_to_ha(self, req=None, **kwargs): + """ PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PromoteUDBInstanceToHARequestSchema().dumps(d) + resp = self.invoke("PromoteUDBInstanceToHA", d, **kwargs) + return apis.PromoteUDBInstanceToHAResponseSchema().loads(resp)
+ +
[docs] def promote_udb_slave(self, req=None, **kwargs): + """ PromoteUDBSlave - 从库提升为独立库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **IsForce** (bool) - 是否强制(如果从库落后可能会禁止提升),默认false 如果落后情况下,强制提升丢失数据 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PromoteUDBSlaveRequestSchema().dumps(d) + resp = self.invoke("PromoteUDBSlave", d, **kwargs) + return apis.PromoteUDBSlaveResponseSchema().loads(resp)
+ +
[docs] def resize_udb_instance(self, req=None, **kwargs): + """ ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G-3000G + - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/ 12000M/16000M/ 24000M/32000M/ 48000M/64000M/96000M。 + - **CouponId** (str) - 使用的代金券id + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例 "HA": 高可用版UDB实例 默认是"Normal" + - **InstanceType** (str) - UDB数据库机型: "Normal": "标准机型" , "SATA_SSD": "SSD机型" , "PCIE_SSD": "SSD高性能机型" , "Normal_Volume": "标准大容量机型", "SATA_SSD_Volume": "SSD大容量机型" , "PCIE_SSD_Volume": "SSD高性能大容量机型" + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **StartAfterUpgrade** (bool) - DB关闭状态下升降级,升降级后是否启动DB,默认为false + - **UDBCId** (str) - 专区的ID,如果有值表示专区中的DB配置升降级 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("ResizeUDBInstance", d, **kwargs) + return apis.ResizeUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def restart_udb_instance(self, req=None, **kwargs): + """ RestartUDBInstance - 重启UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RestartUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("RestartUDBInstance", d, **kwargs) + return apis.RestartUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def start_udb_instance(self, req=None, **kwargs): + """ StartUDBInstance - 启动UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StartUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("StartUDBInstance", d, **kwargs) + return apis.StartUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def stop_udb_instance(self, req=None, **kwargs): + """ StopUDBInstance - 关闭UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **ForceToKill** (bool) - 是否使用强制手段关闭DB,默认是false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StopUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("StopUDBInstance", d, **kwargs) + return apis.StopUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def switch_udb_instance_to_ha(self, req=None, **kwargs): + """ SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,不填则按现在单点计费执行 + - **Quantity** (str) - 购买时长,需要和 ChargeType 搭配使用,否则使用单点计费策略的值 + - **Tag** (str) - 业务组 + + **Response** + + - **DBId** (str) - 切换后高可用db实例的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SwitchUDBInstanceToHARequestSchema().dumps(d) + resp = self.invoke("SwitchUDBInstanceToHA", d, **kwargs) + return apis.SwitchUDBInstanceToHAResponseSchema().loads(resp)
+ +
[docs] def update_udb_instance_backup_strategy(self, req=None, **kwargs): + """ UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 主节点的Id + - **BackupDate** (str) - 备份时期标记位。共7位,每一位为一周中一天的备份情况,0表示关闭当天备份,1表示打开当天备份。最右边的一位为星期天的备份开关,其余从右到左依次为星期一到星期六的备份配置开关,每周必须至少设置两天备份。例如:1100000表示打开星期六和星期五的备份功能 + - **BackupMethod** (str) - 选择默认的备份方式,可选 snapshot 表示使用快照/物理备份,填 logic 表示使用逻辑备份。需要同时设置BackupDate字段。(注意现在只有SSD 版本的 MySQL实例支持物理备份) + - **BackupTime** (int) - 备份的整点时间,范围[0,23] + - **ForceDump** (bool) - 当导出某些数据遇到问题后,是否强制导出其他剩余数据默认是false需要同时设置BackupDate字段 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUDBInstanceBackupStrategyRequestSchema().dumps(d) + resp = self.invoke("UpdateUDBInstanceBackupStrategy", d, **kwargs) + return apis.UpdateUDBInstanceBackupStrategyResponseSchema().loads(resp)
+ +
[docs] def update_udb_instance_slave_backup_switch(self, req=None, **kwargs): + """ UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupSwitch** (int) - (Required) 从库的备份开关,范围[0,1],0表示从库备份功能关闭,1 表示从库备份开关打开。 + - **MasterDBId** (str) - (Required) 主库的Id + - **SlaveDBId** (str) - 从库的Id,如果从库备份开关设定为打开,则必须赋值。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUDBInstanceSlaveBackupSwitchRequestSchema().dumps(d) + resp = self.invoke("UpdateUDBInstanceSlaveBackupSwitch", d, **kwargs) + return apis.UpdateUDBInstanceSlaveBackupSwitchResponseSchema().loads( + resp + )
+ +
[docs] def update_udb_param_group(self, req=None, **kwargs): + """ UpdateUDBParamGroup - 更新UDB配置参数项 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (int) - (Required) 配置参数组id,使用DescribeUDBParamGroup获得 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Description** (str) - 配置文件的描述,不传时认为不修改 + - **Key** (str) - 参数名称(与Value配合使用) + - **Name** (str) - 配置文件的名字,不传时认为不修改名字,传了则不能为空 + - **RegionFlag** (bool) - 该配置文件是否是地域级别配置文件,默认是false + - **Value** (str) - 参数值(与Key配合使用) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUDBParamGroupRequestSchema().dumps(d) + resp = self.invoke("UpdateUDBParamGroup", d, **kwargs) + return apis.UpdateUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def upload_udb_param_group(self, req=None, **kwargs): + """ UploadUDBParamGroup - 导入UDB配置 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Content** (str) - (Required) 配置内容,导入的配置内容采用base64编码 + - **DBTypeId** (str) - (Required) DB类型id,DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6 + - **Description** (str) - (Required) 参数组描述 + - **GroupName** (str) - (Required) 配置参数组名称 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ParamGroupTypeId** (int) - 配置文件子类型 0-未知, 1-Shardsvr-MMAPv1, 2-Shardsvr-WiredTiger, 3-Configsvr-MMAPv1, 4-Configsvr-WiredTiger, 5-Mongos + - **RegionFlag** (bool) - 该配置文件是否是地域级别配置文件,默认是false + + **Response** + + - **GroupId** (int) - 配置参数组id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UploadUDBParamGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("UploadUDBParamGroup", d, **kwargs) + return apis.UploadUDBParamGroupResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/udisk/client.html b/_modules/ucloud/services/udisk/client.html new file mode 100644 index 0000000..e48d6ce --- /dev/null +++ b/_modules/ucloud/services/udisk/client.html @@ -0,0 +1,566 @@ + + + + + + + + ucloud.services.udisk.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.udisk.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.udisk.schemas import apis
+
+
+
[docs]class UDiskClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UDiskClient, self).__init__(config, transport, middleware, logger) + +
[docs] def attach_udisk(self, req=None, **kwargs): + """ AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 需要挂载的UDisk实例ID. + - **UHostId** (str) - (Required) UHost实例ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **MultiAttach** (str) - 是否允许多点挂载(Yes: 允许多点挂载, No: 不允许多点挂载, 不填默认Yes ) + + **Response** + + - **UDiskId** (str) - 挂载的UDisk实例ID + - **UHostId** (str) - 挂载的UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AttachUDiskRequestSchema().dumps(d) + resp = self.invoke("AttachUDisk", d, **kwargs) + return apis.AttachUDiskResponseSchema().loads(resp)
+ +
[docs] def clone_udisk(self, req=None, **kwargs): + """ CloneUDisk - 从UDisk创建UDisk克隆 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称 + - **SourceId** (str) - (Required) 克隆父Disk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic,Postpay 默认: Dynamic + - **Comment** (str) - Disk注释 + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长 默认: 1 + - **UDataArkMode** (str) - 方舟是否开启,"Yes":开启,"No":关闭;默认为"No" + + **Response** + + - **UDiskId** (list) - 创建UDisk Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CloneUDiskRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CloneUDisk", d, **kwargs) + return apis.CloneUDiskResponseSchema().loads(resp)
+ +
[docs] def clone_udisk_snapshot(self, req=None, **kwargs): + """ CloneUDiskSnapshot - 从快照创建UDisk克隆 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称 + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。 + - **SourceId** (str) - (Required) 克隆父Snapshot的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic,Postpay 默认: Dynamic + - **Comment** (str) - Disk注释 + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长 默认: 1 + - **UDataArkMode** (str) - 是否开启数据方舟 默认:No + + **Response** + + - **UDiskId** (list) - 创建UDisk Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CloneUDiskSnapshotRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CloneUDiskSnapshot", d, **kwargs) + return apis.CloneUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def create_udisk(self, req=None, **kwargs): + """ CreateUDisk - 创建UDisk磁盘 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称 + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,普通盘: 范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限;SSD盘: 范围[1~4000]。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic, Postpay, Trial 默认: Dynamic + - **CmkId** (str) - 加密需要的cmk id,UKmsMode为Yes时,必填 + - **CouponId** (str) - 使用的代金券id + - **DiskType** (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk) + - **Quantity** (int) - 购买时长 默认: 1 + - **Tag** (str) - 业务组 默认:Default + - **UDataArkMode** (str) - 是否开启数据方舟 + - **UKmsMode** (str) - 是否加密。Yes:加密,No:不加密,默认值(No) + + **Response** + + - **UDiskId** (list) - UDisk实例Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDiskRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDisk", d, **kwargs) + return apis.CreateUDiskResponseSchema().loads(resp)
+ +
[docs] def create_udisk_snapshot(self, req=None, **kwargs): + """ CreateUDiskSnapshot - 创建snapshot快照 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 快照名称 + - **UDiskId** (str) - (Required) 快照的UDisk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic 默认: Dynamic + - **Comment** (str) - 快照描述 + - **Quantity** (int) - 购买时长 默认: 1 + + **Response** + + - **SnapshotId** (list) - 快照Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDiskSnapshotRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDiskSnapshot", d, **kwargs) + return apis.CreateUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def delete_udisk(self, req=None, **kwargs): + """ DeleteUDisk - 删除UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 要删除的UDisk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDiskRequestSchema().dumps(d) + resp = self.invoke("DeleteUDisk", d, **kwargs) + return apis.DeleteUDiskResponseSchema().loads(resp)
+ +
[docs] def delete_udisk_snapshot(self, req=None, **kwargs): + """ DeleteUDiskSnapshot - 删除Snapshot + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SnapshotId** (str) - 快照Id(填写后不能填写UDisk Id) + - **UDiskId** (str) - UDisk Id,删除该盘所创建出来的所有快照(填写后不能填写SnapshotId) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDiskSnapshotRequestSchema().dumps(d) + resp = self.invoke("DeleteUDiskSnapshot", d, **kwargs) + return apis.DeleteUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def describe_udisk(self, req=None, **kwargs): + """ DescribeUDisk - 获取UDisk实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DiskType** (str) - ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:"CLOUD_NORMAL",IsBoot:"False"; 普通系统盘:DiskType:"CLOUD_NORMAL",IsBoot:"True";SSD数据盘:DiskType:"CLOUD_SSD",IsBoot:"False";SSD系统盘:DiskType:"CLOUD_SSD",IsBoot:"True";RSSD数据盘:DiskType:"CLOUD_RSSD",IsBoot:"False";为空拉取所有。ProtocolVersion字段为0或没有该字段时,可设为以下几个值:普通数据盘:DataDisk;普通系统盘;SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk;为空拉取所有。 + - **IsBoot** (str) - ProtocolVersion字段为1且DiskType不为空时,必须设置,设置规则请参照DiskType;ProtocolVersion字段为1且DiskType为空时,该字段无效。ProtocolVersion字段为0或没有该字段时,该字段无效。 + - **Limit** (int) - 返回数据长度, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **ProtocolVersion** (int) - 请求协议版本,建议升级为1,为1时DiskType与UHost磁盘类型定义一致;默认为0 + - **UDiskId** (str) - UDisk Id(留空返回全部) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDiskDataSet** 模型定义 + - **TotalCount** (int) - 根据过滤条件得到的总数 + + **Response Model** + + **UDiskDataSet** + + - **ArkSwitchEnable** (int) - 是否支持开启方舟,1支持 ,0不支持 + - **ChargeType** (str) - Year,Month,Dynamic,Trial,Postpay + - **CloneEnable** (int) - 是否支持克隆,1支持 ,0不支持 + - **CmkId** (str) - 该盘的cmk id + - **CmkIdAlias** (str) - cmk id 别名 + - **CmkIdStatus** (str) - 该盘cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘) + - **CreateTime** (int) - 创建时间 + - **DataKey** (str) - 该盘的密文密钥 + - **DeviceName** (str) - 挂载的设备名称 + - **DiskType** (str) - 请求中的ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:"CLOUD_NORMAL",IsBoot:"False"; 普通系统盘:DiskType:"CLOUD_NORMAL",IsBoot:"True";SSD数据盘:DiskType:"CLOUD_SSD",IsBoot:"False";SSD系统盘:DiskType:"CLOUD_SSD",IsBoot:"True";RSSD数据盘:DiskType:"CLOUD_RSSD",IsBoot:"False"。请求中的ProtocolVersion字段为0或没有该字段时,云硬盘类型参照如下:普通数据盘:DataDisk;普通系统盘:SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk。 + - **ExpiredTime** (int) - 过期时间 + - **IsBoot** (str) - 是否是系统盘,是:"True", 否:"False" + - **IsExpire** (str) - 资源是否过期,过期:"Yes", 未过期:"No" + - **Name** (str) - 实例名称 + - **Size** (int) - 容量单位GB + - **SnapEnable** (int) - 是否支持快照,1支持 ,0不支持 + - **SnapshotCount** (int) - 该盘快照个数 + - **SnapshotLimit** (int) - 该盘快照上限 + - **Status** (str) - 状态:Available(可用),Attaching(挂载中), InUse(已挂载), Detaching(卸载中), Initializating(分配中), Failed(创建失败),Cloning(克隆中),Restoring(恢复中),RestoreFailed(恢复失败), + - **Tag** (str) - 业务组名称 + - **UDataArkMode** (str) - 是否开启数据方舟,开启:"Yes", 不支持:"No" + - **UDiskId** (str) - UDisk实例Id + - **UHostIP** (str) - 挂载的UHost的IP + - **UHostId** (str) - 挂载的UHost的Id + - **UHostName** (str) - 挂载的UHost的Name + - **UKmsMode** (str) - 是否是加密盘,是:"Yes", 否:"No" + - **Version** (str) - 是否支持数据方舟,支持:"2.0", 不支持:"1.0" + - **Zone** (str) - 可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskRequestSchema().dumps(d) + resp = self.invoke("DescribeUDisk", d, **kwargs) + return apis.DescribeUDiskResponseSchema().loads(resp)
+ +
[docs] def describe_udisk_price(self, req=None, **kwargs): + """ DescribeUDiskPrice - 获取UDisk实例价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~1000] + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **DiskType** (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),SystemDisk(普通系统盘),SSDSystemDisk(SSD系统盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk) + - **Quantity** (int) - 购买UDisk的时长,默认值为1 + - **UDataArkMode** (str) - 是否打开数据方舟, 打开"Yes",关闭"No", 默认关闭 + + **Response** + + - **DataSet** (list) - 见 **UDiskPriceDataSet** 模型定义 + + **Response Model** + + **UDiskPriceDataSet** + + - **ChargeName** (str) - "UDataArk","UDisk" + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **OriginalPrice** (int) - 用户折后价 + - **Price** (int) - 价格 (单位: 分) + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskPriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDiskPrice", d, **kwargs) + return apis.DescribeUDiskPriceResponseSchema().loads(resp)
+ +
[docs] def describe_udisk_snapshot(self, req=None, **kwargs): + """ DescribeUDiskSnapshot - 获取UDisk快照 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **SnapshotId** (str) - 快照id,SnapshotId , UDiskId 同时传SnapshotId优先 + - **UDiskId** (str) - UDiskId,返回该盘所做快照.(必须同时传Zone) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDiskSnapshotSet** 模型定义 + - **TotalCount** (int) - 根据过滤条件得到的总数 + + **Response Model** + + **UDiskSnapshotSet** + + - **CmkId** (str) - 该快照的cmk id + - **CmkIdAlias** (str) - cmk id 别名 + - **CmkIdStatus** (str) - 该快照cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘) + - **Comment** (str) - 快照描述 + - **CreateTime** (int) - 创建时间 + - **DataKey** (str) - 该快照的密文密钥 + - **DiskType** (int) - 磁盘类型,0:数据盘,1:系统盘 + - **ExpiredTime** (int) - 过期时间 + - **IsUDiskAvailable** (bool) - 对应磁盘是否处于可用状态 + - **Name** (str) - 快照名称 + - **Size** (int) - 容量单位GB + - **SnapshotId** (str) - 快照Id + - **Status** (str) - 快照状态,Normal:正常,Failed:失败,Creating:制作中 + - **UDiskId** (str) - 快照的源UDisk的Id + - **UDiskName** (str) - 快照的源UDisk的Name + - **UHostId** (str) - 对应磁盘制作快照时所挂载的主机 + - **UKmsMode** (str) - 是否是加密盘快照,是:"Yes", 否:"No" + - **Version** (str) - 快照版本 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskSnapshotRequestSchema().dumps(d) + resp = self.invoke("DescribeUDiskSnapshot", d, **kwargs) + return apis.DescribeUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def describe_udisk_upgrade_price(self, req=None, **kwargs): + """ DescribeUDiskUpgradePrice - 获取UDisk升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。 + - **SourceId** (str) - (Required) 升级目标UDisk ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DiskType** (str) - 磁盘类型,SSDDataDisk:ssd数据盘,DataDisk:普通数据盘,SystemDisk:普通系统盘,SSDSystemDisk:ssd系统盘。默认为DataDisk + - **UDataArkMode** (str) - 是否打开数据方舟, 打开"Yes",关闭"No", 默认关闭 + + **Response** + + - **OriginalPrice** (int) - 用户折后价 + - **Price** (int) - 价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDiskUpgradePrice", d, **kwargs) + return apis.DescribeUDiskUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def detach_udisk(self, req=None, **kwargs): + """ DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 需要卸载的UDisk实例ID + - **UHostId** (str) - (Required) UHost实例ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UDiskId** (str) - 卸载的UDisk实例ID + - **UHostId** (str) - 卸载的UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DetachUDiskRequestSchema().dumps(d) + resp = self.invoke("DetachUDisk", d, **kwargs) + return apis.DetachUDiskResponseSchema().loads(resp)
+ +
[docs] def rename_udisk(self, req=None, **kwargs): + """ RenameUDisk - 重命名UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 重命名的UDisk的Id + - **UDiskName** (str) - (Required) 重命名UDisk的name + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RenameUDiskRequestSchema().dumps(d) + resp = self.invoke("RenameUDisk", d, **kwargs) + return apis.RenameUDiskResponseSchema().loads(resp)
+ +
[docs] def resize_udisk(self, req=None, **kwargs): + """ ResizeUDisk - 调整UDisk容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 调整后大小, 单位:GB, 范围[1~2000],权限位控制可达8000,若需要请申请开通相关权限。 + - **UDiskId** (str) - (Required) UDisk Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CouponId** (str) - 使用的代金券id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUDiskRequestSchema().dumps(d) + resp = self.invoke("ResizeUDisk", d, **kwargs) + return apis.ResizeUDiskResponseSchema().loads(resp)
+ +
[docs] def restore_udisk(self, req=None, **kwargs): + """ RestoreUDisk - 从备份恢复数据至UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 需要恢复的盘id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SnapshotId** (str) - 从指定的快照恢复 + - **SnapshotTime** (int) - 指定从方舟恢复的备份时间点 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RestoreUDiskRequestSchema().dumps(d) + resp = self.invoke("RestoreUDisk", d, **kwargs) + return apis.RestoreUDiskResponseSchema().loads(resp)
+ +
[docs] def set_udisk__udataark_mode(self, req=None, **kwargs): + """ SetUDiskUDataArkMode - 设置UDisk数据方舟的状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDataArkMode** (str) - (Required) 是否开启数据方舟,开启:"Yes", 不支持:"No" + - **UDiskId** (str) - (Required) 需要设置数据方舟的UDisk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SetUDiskUDataArkModeRequestSchema().dumps(d) + resp = self.invoke("SetUDiskUDataArkMode", d, **kwargs) + return apis.SetUDiskUDataArkModeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/udpn/client.html b/_modules/ucloud/services/udpn/client.html new file mode 100644 index 0000000..97c7ba6 --- /dev/null +++ b/_modules/ucloud/services/udpn/client.html @@ -0,0 +1,285 @@ + + + + + + + + ucloud.services.udpn.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.udpn.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.udpn.schemas import apis
+
+
+
[docs]class UDPNClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UDPNClient, self).__init__(config, transport, middleware, logger) + +
[docs] def allocate_udpn(self, req=None, **kwargs): + """ AllocateUDPN - 分配一条 UDPN 专线 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 带宽 + - **Peer1** (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **Peer2** (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **ChargeType** (str) - 计费类型,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费 + - **CouponId** (str) - 代金劵 + - **Quantity** (int) - 计费时长,默认 1 + + **Response** + + - **UDPNId** (str) - 资源名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateUDPNRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateUDPN", d, **kwargs) + return apis.AllocateUDPNResponseSchema().loads(resp)
+ +
[docs] def describe_udpn(self, req=None, **kwargs): + """ DescribeUDPN - 描述 UDPN + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度,默认为 20 + - **Offset** (int) - 列表起始位置偏移量,默认为 0 + - **UDPNId** (str) - 申请到的 UDPN 资源 ID。若为空,则查询该用户在机房所有的专线信息。非默认项目资源,需填写ProjectId + + **Response** + + - **DataSet** (list) - 见 **UDPNData** 模型定义 + - **TotalCount** (int) - 查询到的总数量 + + **Response Model** + + **UDPNData** + + - **Bandwidth** (int) - 带宽 + - **ChargeType** (str) - 计费类型 + - **CreateTime** (int) - unix 时间戳 创建时间 + - **ExpireTime** (int) - unix 时间戳 到期时间 + - **Peer1** (str) - 可用区域 1 + - **Peer2** (str) - 可用区域 2 + - **UDPNId** (str) - UDPN 资源短 ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDPNRequestSchema().dumps(d) + resp = self.invoke("DescribeUDPN", d, **kwargs) + return apis.DescribeUDPNResponseSchema().loads(resp)
+ +
[docs] def get_udpn_line_list(self, req=None, **kwargs): + """ GetUDPNLineList - 获取当前支持的专线线路列表 + + **Request** + + - **ProjectId** (str) - (Config) + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDPNLineSet** 模型定义 + - **TotalCount** (int) - DataSet中的元素个数 + + **Response Model** + + **UDPNLineSet** + + - **BandwidthUpperLimit** (int) - 线路带宽上限,单位 M + - **LocalRegion** (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky + - **RemoteRegion** (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUDPNLineListRequestSchema().dumps(d) + resp = self.invoke("GetUDPNLineList", d, **kwargs) + return apis.GetUDPNLineListResponseSchema().loads(resp)
+ +
[docs] def get_udpn_price(self, req=None, **kwargs): + """ GetUDPNPrice - 获取 UDPN 价格 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 带宽信息 + - **Peer1** (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **Peer2** (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **ChargeType** (str) - 计费类型 + - **Quantity** (int) - 购买时长 + + **Response** + + - **Price** (float) - 专线价格 + - **PurchaseValue** (int) - 资源有效期 unix 时间戳 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetUDPNPriceRequestSchema().dumps(d) + resp = self.invoke("GetUDPNPrice", d, **kwargs) + return apis.GetUDPNPriceResponseSchema().loads(resp)
+ +
[docs] def get_udpn_upgrade_price(self, req=None, **kwargs): + """ GetUDPNUpgradePrice - 获取专线升级价格 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 带宽 + - **UDPNId** (str) - (Required) 专线带宽资源 Id + + **Response** + + - **Price** (float) - 升级后的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUDPNUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("GetUDPNUpgradePrice", d, **kwargs) + return apis.GetUDPNUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def modify_udpn_bandwidth(self, req=None, **kwargs): + """ ModifyUDPNBandwidth - 修改带宽值 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 调整后专线带宽, 单位为Mbps,取值范围为大于等于2且小于等于1000([2-1000])的整数 + - **UDPNId** (str) - (Required) UDPN Id + - **CouponId** (str) - 代金劵 ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUDPNBandwidthRequestSchema().dumps(d) + resp = self.invoke("ModifyUDPNBandwidth", d, **kwargs) + return apis.ModifyUDPNBandwidthResponseSchema().loads(resp)
+ +
[docs] def release_udpn(self, req=None, **kwargs): + """ ReleaseUDPN - 释放 UDPN + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDPNId** (str) - (Required) UDPN 资源 Id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseUDPNRequestSchema().dumps(d) + resp = self.invoke("ReleaseUDPN", d, **kwargs) + return apis.ReleaseUDPNResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/ufs/client.html b/_modules/ucloud/services/ufs/client.html new file mode 100644 index 0000000..16bd475 --- /dev/null +++ b/_modules/ucloud/services/ufs/client.html @@ -0,0 +1,222 @@ + + + + + + + + ucloud.services.ufs.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ufs.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ufs.schemas import apis
+
+
+
[docs]class UFSClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UFSClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_ufs_volume(self, req=None, **kwargs): + """ CreateUFSVolume - 创建文件系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ProtocolType** (str) - (Required) 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议 + - **Size** (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB + - **StorageType** (str) - (Required) 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型 + - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限) 默认为Dynamic + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长 默认: 1 + - **Remark** (str) - 备注 + - **Tag** (str) - 文件系统所属业务组 + - **VolumeName** (str) - 文件系统名称 + + **Response** + + - **VolumeId** (str) - 文件系统ID + - **VolumeName** (str) - 文件系统名称 + - **VolumeStatus** (str) - 文件系统挂载点状态 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUFSVolumeRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUFSVolume", d, **kwargs) + return apis.CreateUFSVolumeResponseSchema().loads(resp)
+ +
[docs] def describe_ufs_volume_2(self, req=None, **kwargs): + """ DescribeUFSVolume2 - 获取文件系统列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 文件列表长度 + - **Offset** (int) - 文件列表起始 + - **VolumeId** (str) - 文件系统ID + + **Response** + + - **DataSet** (list) - 见 **UFSVolumeInfo2** 模型定义 + - **TotalCount** (int) - 文件系统总数 + + **Response Model** + + **UFSVolumeInfo2** + + - **CreateTime** (int) - 文件系统创建时间(unix时间戳) + - **ExpiredTime** (int) - 文件系统过期时间(unix时间戳) + - **IsExpired** (str) - 是否过期 + - **MaxMountPointNum** (int) - 文件系统允许创建的最大挂载点数目 + - **ProtocolType** (str) - 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议 + - **Remark** (str) - 文件系统备注信息 + - **Size** (int) - 文件系统大小,单位GB + - **StorageType** (str) - 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型 + - **Tag** (str) - 文件系统所属业务组 + - **TotalMountPointNum** (int) - 当前文件系统已创建的挂载点数目 + - **UsedSize** (int) - 文件系统当前使用容量,单位GB + - **VolumeId** (str) - 文件系统ID + - **VolumeName** (str) - 文件系统名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUFSVolume2RequestSchema().dumps(d) + resp = self.invoke("DescribeUFSVolume2", d, **kwargs) + return apis.DescribeUFSVolume2ResponseSchema().loads(resp)
+ +
[docs] def extend_ufs_volume(self, req=None, **kwargs): + """ ExtendUFSVolume - 文件系统扩容 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB + - **VolumeId** (str) - (Required) 文件系统ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ExtendUFSVolumeRequestSchema().dumps(d) + resp = self.invoke("ExtendUFSVolume", d, **kwargs) + return apis.ExtendUFSVolumeResponseSchema().loads(resp)
+ +
[docs] def remove_ufs_volume(self, req=None, **kwargs): + """ RemoveUFSVolume - 删除UFS文件系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VolumeId** (str) - (Required) 文件系统ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RemoveUFSVolumeRequestSchema().dumps(d) + resp = self.invoke("RemoveUFSVolume", d, **kwargs) + return apis.RemoveUFSVolumeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/uhost/client.html b/_modules/ucloud/services/uhost/client.html new file mode 100644 index 0000000..23a0d8b --- /dev/null +++ b/_modules/ucloud/services/uhost/client.html @@ -0,0 +1,944 @@ + + + + + + + + ucloud.services.uhost.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uhost.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uhost.schemas import apis
+
+
+
[docs]class UHostClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UHostClient, self).__init__(config, transport, middleware, logger) + +
[docs] def copy_custom_image(self, req=None, **kwargs): + """ CopyCustomImage - 复制自制镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SourceImageId** (str) - (Required) 源镜像Id, 参见 DescribeImage + - **TargetProjectId** (str) - (Required) 目标项目Id, 参见 GetProjectList + - **TargetImageDescription** (str) - 目标镜像描述 + - **TargetImageName** (str) - 目标镜像名称 + - **TargetRegion** (str) - 目标地域,不跨地域不用填 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TargetImageId** (str) - 目标镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CopyCustomImageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CopyCustomImage", d, **kwargs) + return apis.CopyCustomImageResponseSchema().loads(resp)
+ +
[docs] def create_custom_image(self, req=None, **kwargs): + """ CreateCustomImage - 从指定UHost实例,生成自定义镜像。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageName** (str) - (Required) 镜像名称 + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **ImageDescription** (str) - 镜像描述 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **ImageId** (str) - 镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateCustomImageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateCustomImage", d, **kwargs) + return apis.CreateCustomImageResponseSchema().loads(resp)
+ +
[docs] def create_uhost_instance(self, req=None, **kwargs): + """ CreateUHostInstance - 创建UHost实例。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - (Required) 镜像ID。 请通过 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ 获取 + - **LoginMode** (str) - (Required) 主机登陆模式。密码(默认选项): Password。 + - **Password** (str) - (Required) UHost密码。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AlarmTemplateId** (int) - 告警模板id,如果传了告警模板id,且告警模板id正确,则绑定告警模板。绑定告警模板失败只会在后台有日志,不会影响创建主机流程,也不会在前端报错。 + - **BootDiskSpace** (int) - 【待废弃,不建议调用】系统盘大小。 单位:GB, 范围[20,100], 步长:10 + - **CPU** (int) - 虚拟CPU核数。可选参数:1-64(具体机型与CPU的对应关系参照控制台)。默认值: 4。 + - **ChargeType** (str) - 计费模式。枚举值为: \\ > Year,按年付费; \\ > Month,按月付费;\\ > Dynamic,按小时预付费 \\ > Postpay,按小时后付费(支持关机不收费,目前仅部分可用区支持,请联系您的客户经理) \\ 默认为月付 + - **CouponId** (str) - 主机代金券ID。请通过DescribeCoupon接口查询,或登录用户中心查看 + - **DiskPassword** (str) - 【待废弃,不建议调用】加密盘的密码。若输入此字段,自动选择加密盘。加密盘需要权限位。 + - **DiskSpace** (int) - 【待废弃,不建议调用】数据盘大小。 单位:GB, 范围[0,8000], 步长:10, 默认值:20,云盘支持0-8000;本地普通盘支持0-2000;本地SSD盘(包括所有GPU机型)支持100-1000 + - **Disks** (list) - 见 **CreateUHostInstanceParamDisks** 模型定义 + - **GPU** (int) - GPU卡核心数。仅GPU机型支持此字段(可选范围与MachineType+GpuType相关) + - **GpuType** (str) - GPU类型,枚举值["K80", "P40", "V100"],MachineType为G时必填 + - **HostIp** (str) - 指定宿主机创建,此时SetId为必填 + - **HostType** (str) - 【已废弃】宿主机类型,N2,N1 + - **HotplugFeature** (bool) - 热升级特性。True为开启,False为未开启,默认False。 + - **InstallAgent** (str) - 【暂不支持】是否安装UGA。'yes': 安装;其他或者不填:不安装。 + - **IsolationGroup** (str) - 硬件隔离组id。可通过DescribeIsolationGroup获取。 + - **KeyPair** (str) - 【暂不支持】Keypair公钥,LoginMode为KeyPair时此项必须 + - **MachineType** (str) - 云主机机型(V2.0),在本字段和字段UHostType中,仅需要其中1个字段即可;当填写了MachineType时,必须填写MinimalCpuPlatform字段。枚举值["N", "C", "G", "O"]。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **MaxCount** (int) - 本次最大创建主机数量,取值范围是[1,100],默认值为1。 + - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值:8192 + - **MinimalCpuPlatform** (str) - 最低cpu平台,枚举值["Intel/Auto", "Intel/IvyBridge", "Intel/Haswell", "Intel/Broadwell", "Intel/Skylake", "Intel/Cascadelake"。 + - **Name** (str) - UHost实例名称。默认:UHost。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定实例名称。 + - **NetCapability** (str) - 网络增强特性。枚举值:Normal(默认),不开启; Super,开启网络增强1.0; Ultra,开启网络增强2.0(仅支持部分可用区,请参考控制台) + - **NetworkId** (str) - 【已废弃】网络ID(VPC2.0情况下无需填写)。VPC1.0情况下,若不填写,代表优先选择基础网络; 若填写,代表选择子网。参见DescribeSubnet。 + - **NetworkInterface** (list) - 见 **CreateUHostInstanceParamNetworkInterface** 模型定义 + - **PrivateIp** (list) - 【数组】创建云主机时指定内网IP。若不传值,则随机分配当前子网下的IP。调用方式举例:PrivateIp.0=x.x.x.x。当前只支持一个内网IP。 + - **PrivateMac** (str) - 【批量创建该参数无效】【内部字段】创建云主机时指定Mac。调用方式举例:PrivateMac="xx:xx:xx:xx:xx:xx"。 + - **Quantity** (int) - 购买时长。默认:值 1。按小时购买(Dynamic/Postpay)时无需此参数。 月付时,此参数传0,代表购买至月末。 + - **ResourceType** (int) - 【内部参数】资源类型 + - **SecurityGroupId** (str) - 防火墙ID,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 `DescribeFirewall <https://docs.ucloud.cn/api/unet-api/describe_firewall.html>`_ 。 + - **SetId** (int) - 指定set创建 + - **StorageType** (str) - 【待废弃,不建议调用】磁盘类型,同时设定系统盘和数据盘的磁盘类型。枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘;默认为LocalDisk。仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。 + - **SubnetId** (str) - 子网 ID。默认为当前地域的默认子网。 + - **Tag** (str) - 业务组。默认:Default(Default即为未分组)。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定业务组。 + - **TimemachineFeature** (str) - 【待废弃,不建议调用】是否开启方舟特性。Yes为开启方舟,No为关闭方舟。目前仅选择普通本地盘+普通本地盘 或 SSD云盘+普通云盘的组合支持开启方舟。 + - **UHostType** (str) - 【建议后续不再使用】云主机机型(V1.0),在本字段和字段MachineType中,仅需要其中1个字段即可。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **UserData** (str) - 【即将支持】用户自定义数据。当镜像支持Cloud-init Feature时可填写此字段。注意:1、总数据量大小不超多16K;2、使用base64编码 + - **UserDataScript** (str) - 【暂不支持】cloudinit方式下,用户初始化脚本 + - **VPCId** (str) - VPC ID。默认为当前地域的默认VPC。 + + **Response** + + - **IPs** (list) - 【批量创建不会返回】IP信息 + - **UHostIds** (list) - UHost实例Id集合 + + **Request Model** + + **CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH** + + - **Area** (str) - 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填其中之一。 + - **AreaCode** (str) - GlobalSSH的地区编码,格式为区域航空港国际通用代码。Area和AreaCode两者必填其中之一。 + - **Port** (int) - SSH端口,1-65535且不能使用80,443端口 + + **CreateUHostInstanceParamNetworkInterfaceEIP** + + - **Bandwidth** (int) - 【若绑定EIP,此参数必填】弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-300],带宽计费[1-800] + - **CouponId** (str) - 当前EIP代金券id。请通过DescribeCoupon接口查询,或登录用户中心查看。 + - **GlobalSSH** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH** 模型定义 + - **OperatorName** (str) - 【若绑定EIP,此参数必填】弹性IP的线路。枚举值: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International + - **PayMode** (str) - 弹性IP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; "ShareBandwidth",共享带宽模式. "Free":免费带宽模式.默认为 "Bandwidth". + - **ShareBandwidthId** (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效 + + **CreateUHostInstanceParamNetworkInterfaceIPv6** + + - **Adress** (str) - 第N个网卡对应的IPv6地址,默认不分配IPv6,“Auto”自动分配,不为空的其他字符串为实际要分配的IPv6地址 + - **ShareBandwidthId** (str) - 第N块网卡中IPv6对应的共享带宽id,默认不带外网 + + **CreateUHostInstanceParamDisks** + + - **BackupType** (str) - 磁盘备份方案。枚举值:\\ > NONE,无备份 \\ > DATAARK,数据方舟 \\ 当前磁盘支持的备份模式参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ + - **CouponId** (str) - 云盘代金券id。不适用于系统盘/本地盘。请通过DescribeCoupon接口查询,或登录用户中心查看 + - **Encrypted** (bool) - 【功能仅部分可用区开放,详询技术支持】磁盘是否加密。加密:true, 不加密: false加密必须传入对应的的KmsKeyId + - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 + - **KmsKeyId** (str) - 【功能仅部分可用区开放,详询技术支持】kms key id。选择加密盘时必填。 + - **Size** (int) - 磁盘大小,单位GB,必须是10GB的整数倍。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **Type** (str) - 磁盘类型。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + + **CreateUHostInstanceParamNetworkInterface** + + - **EIP** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceEIP** 模型定义 + - **IPv6** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceIPv6** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUHostInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUHostInstance", d, **kwargs) + return apis.CreateUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_image(self, req=None, **kwargs): + """ DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - 镜像Id + - **ImageType** (str) - 镜像类型。标准镜像:Base,镜像市场:Business, 自定义镜像:Custom,默认返回所有类型 + - **Limit** (int) - 返回数据长度,默认为20 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **OsType** (str) - 操作系统类型:Linux, Windows 默认返回所有类型 + - **PriceSet** (int) - 是否返回价格:1返回,0不返回;默认不返回 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **ImageSet** (list) - 见 **UHostImageSet** 模型定义 + - **TotalCount** (int) - 满足条件的镜像总数 + + **Response Model** + + **UHostImageSet** + + - **CreateTime** (int) - 创建时间,格式为Unix时间戳 + - **Features** (list) - 特殊状态标识, 目前包含NetEnhnced(网络增强1.0), NetEnhanced_Ultra](网络增强2.0),HotPlug(热升级),CloudInit + - **FuncType** (str) - 行业镜像类型(仅行业镜像将返回这个值) + - **ImageDescription** (str) - 镜像描述 + - **ImageId** (str) - 镜像ID + - **ImageName** (str) - 镜像名称 + - **ImageSize** (int) - 镜像大小 + - **ImageType** (str) - 镜像类型 标准镜像:Base, 行业镜像:Business,自定义镜像:Custom + - **IntegratedSoftware** (str) - 集成软件名称(仅行业镜像将返回这个值) + - **Links** (str) - 介绍链接(仅行业镜像将返回这个值) + - **MinimalCPU** (str) - 默认值为空'''。当CentOS 7.3/7.4/7.5等镜像会标记为“Broadwell” + - **OsName** (str) - 操作系统名称 + - **OsType** (str) - 操作系统类型:Liunx,Windows + - **State** (str) - 镜像状态, 可用:Available,制作中:Making, 不可用:Unavailable + - **Vendor** (str) - 供应商(仅行业镜像将返回这个值) + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeImageRequestSchema().dumps(d) + resp = self.invoke("DescribeImage", d, **kwargs) + return apis.DescribeImageResponseSchema().loads(resp)
+ +
[docs] def describe_isolation_group(self, req=None, **kwargs): + """ DescribeIsolationGroup - 查询硬件隔离组列表。 + + **Request** + + - **ProjectId** (str) - (Config) 项目id + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 待查的硬件隔离组id + - **Limit** (int) - 返回数据长度,默认为20,最大100 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + + **Response** + + - **IsolationGroupSet** (list) - 见 **IsolationGroup** 模型定义 + + **Response Model** + + **SpreadInfo** + + - **UHostCount** (int) - 可用区中硬件隔离组中云主机的数量,不超过7。 + - **Zone** (str) - 可用区信息 + + **IsolationGroup** + + - **GroupId** (str) - 硬件隔离组id + - **GroupName** (str) - 硬件隔离组名称 + - **Remark** (str) - 备注 + - **SpreadInfoSet** (list) - 见 **SpreadInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeIsolationGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeIsolationGroup", d, **kwargs) + return apis.DescribeIsolationGroupResponseSchema().loads(resp)
+ +
[docs] def describe_uhost_instance(self, req=None, **kwargs): + """ DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **IsolationGroup** (str) - 硬件隔离组id。通过硬件隔离组筛选主机。 + - **LifeCycle** (int) - 1:普通云主机;2:抢占型云主机;如不传此参数,默认全部获取 + - **Limit** (int) - 返回数据长度,默认为20,最大100 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **SubnetId** (str) - 子网id。通过子网筛选主机。北京一地域无效。 + - **Tag** (str) - 要查询的业务组名称 + - **UHostIds** (list) - 【数组】UHost主机的资源ID,例如UHostIds.0代表希望获取信息 的主机1,UHostIds.1代表主机2。 如果不传入,则返回当前Region 所有符合条件的UHost实例。 + - **VPCId** (str) - vpc id。通过VPC筛选主机。北京一地域无效。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Action** (str) - 操作名称 + - **RetCode** (int) - 返回码 + - **TotalCount** (int) - UHostInstance总数 + - **UHostSet** (list) - 见 **UHostInstanceSet** 模型定义 + + **Response Model** + + **UHostDiskSet** + + - **BackupType** (str) - 备份方案。若开通了数据方舟,则为DataArk + - **DiskId** (str) - 磁盘ID + - **DiskType** (str) - 磁盘类型。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **Drive** (str) - 磁盘盘符 + - **Encrypted** (bool) - true: 加密盘 false:非加密盘 + - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 + - **Name** (str) - UDisk名字(仅当磁盘是UDisk时返回) + - **Size** (int) - 磁盘大小,单位: GB + - **Type** (str) - 【建议不再使用】磁盘类型。系统盘: Boot,数据盘: Data,网络盘:Udisk + + **UHostIPSet** + + - **Bandwidth** (int) - IP对应的带宽, 单位: Mb (内网IP不显示带宽信息) + - **Default** (str) - 【暂未支持】是否为默认网卡。True: 是默认网卡;其他值:不是。 + - **IP** (str) - IP地址 + - **IPId** (str) - 外网IP资源ID 。(内网IP无对应的资源ID) + - **Mac** (str) - 当前网卡的Mac。 + - **SubnetId** (str) - IP地址对应的子网 ID。(北京一不支持,字段返回为空) + - **Type** (str) - 国际: Internation,BGP: Bgp,内网: Private + - **VPCId** (str) - IP地址对应的VPC ID。(北京一不支持,字段返回为空) + - **Weight** (int) - 当前EIP的权重。权重最大的为当前的出口IP。 + + **UHostInstanceSet** + + - **AutoRenew** (str) - 是否自动续费,自动续费:“Yes”,不自动续费:“No” + - **BasicImageId** (str) - 基础镜像ID(指当前自定义镜像的来源镜像) + - **BasicImageName** (str) - 基础镜像名称(指当前自定义镜像的来源镜像) + - **BootDiskState** (str) - 系统盘状态 Normal表示初始化完成;Initializing表示在初始化。仍在初始化的系统盘无法制作镜像。 + - **CPU** (int) - 虚拟CPU核数,单位: 个 + - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); + - **CreateTime** (int) - 创建时间,格式为Unix时间戳 + - **DiskSet** (list) - 见 **UHostDiskSet** 模型定义 + - **ExpireTime** (int) - 到期时间,格式为Unix时间戳 + - **GPU** (int) - GPU个数 + - **HostType** (str) - 【建议不再使用】主机系列:N2,表示系列2;N1,表示系列1 + - **HotplugFeature** (bool) - true: 开启热升级; false,未开启热升级 + - **IPSet** (list) - 见 **UHostIPSet** 模型定义 + - **ImageId** (str) - 【建议不再使用】主机的系统盘ID。 + - **IsolationGroup** (str) - 隔离组id,不在隔离组则返回"" + - **LifeCycle** (str) - 主机的生命周期类型。目前仅支持Normal:普通; + - **MachineType** (str) - 云主机机型(新)。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type#主机概念20版本>`_ 。 + - **Memory** (int) - 内存大小,单位: MB + - **Name** (str) - UHost实例名称 + - **NetCapability** (str) - 网络增强。Normal: 无;Super: 网络增强1.0; Ultra: 网络增强2.0 + - **NetworkState** (str) - 【建议不再使用】网络状态。 连接:Connected, 断开:NotConnected + - **OsName** (str) - 创建主机的最初来源镜像的操作系统名称(若直接通过基础镜像创建,此处返回和BasicImageName一致) + - **OsType** (str) - 操作系统类别。返回"Linux"或者"Windows" + - **Remark** (str) - 备注 + - **State** (str) - 实例状态,枚举值:\\ >初始化: Initializing; \\ >启动中: Starting; \\> 运行中: Running; \\> 关机中: Stopping; \\ >关机: Stopped \\ >安装失败: Install Fail; \\ >重启中: Rebooting + - **StorageType** (str) - 【建议不再使用】主机磁盘类型。 枚举值为:\\ > LocalDisk,本地磁盘; \\ > UDisk 云盘。\\只要有一块磁盘为本地盘,即返回LocalDisk。 + - **SubnetType** (str) - 【建议不再使用】仅北京A的云主机会返回此字段。基础网络模式:Default;子网模式:Private + - **Tag** (str) - 业务组名称 + - **TimemachineFeature** (str) - 【建议不再使用】数据方舟模式。枚举值:\\ > Yes: 开启方舟; \\ > no,未开启方舟 + - **TotalDiskSpace** (int) - 总的数据盘存储空间。 + - **UHostId** (str) - UHost实例ID + - **UHostType** (str) - 【建议不再使用】云主机机型(旧)。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeUHostInstance", d, **kwargs) + return apis.DescribeUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_uhost_instance_snapshot(self, req=None, **kwargs): + """ DescribeUHostInstanceSnapshot - 获取已经存在的UHost实例的存储快照列表。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **SnapshotSet** (list) - 见 **UHostSnapshotSet** 模型定义 + - **UhostId** (str) - UHost实例ID + + **Response Model** + + **UHostSnapshotSet** + + - **SnapshotName** (str) - 快照名称 + - **SnapshotState** (str) - 快照状态, 制作中:Capturing 制作成功:Success 制作失败:Fail + - **SnapshotTime** (str) - 快照制作时间 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUHostInstanceSnapshotRequestSchema().dumps(d) + resp = self.invoke("DescribeUHostInstanceSnapshot", d, **kwargs) + return apis.DescribeUHostInstanceSnapshotResponseSchema().loads(resp)
+ +
[docs] def describe_uhost_tags(self, req=None, **kwargs): + """ DescribeUHostTags - 获取指定数据中心的业务组列表。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TagSet** (list) - 见 **UHostTagSet** 模型定义 + - **TotalCount** (int) - 已有主机的业务组总个数 + + **Response Model** + + **UHostTagSet** + + - **Tag** (str) - 业务组名称 + - **TotalCount** (int) - 该业务组中包含的主机个数 + - **Zone** (str) - 可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUHostTagsRequestSchema().dumps(d) + resp = self.invoke("DescribeUHostTags", d, **kwargs) + return apis.DescribeUHostTagsResponseSchema().loads(resp)
+ +
[docs] def get_uhost_instance_price(self, req=None, **kwargs): + """ GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CPU** (int) - (Required) CPU核数。可选参数:1-64。可选范围参照控制台。默认值: 4 + - **Count** (int) - (Required) 购买台数,范围[1,5] + - **ImageId** (str) - (Required) 镜像Id,可通过 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ 获取镜像ID + - **Memory** (int) - (Required) 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参照好控制台)。默认值:8192 + - **ChargeType** (str) - 计费模式。枚举值为: \\ > Year,按年付费; \\ > Month,按月付费;\\ > Dynamic,按小时付费 \\ 默认为月付。 + - **DiskSpace** (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10,默认值: 0 + - **Disks** (list) - 见 **GetUHostInstancePriceParamDisks** 模型定义 + - **GPU** (int) - GPU卡核心数。仅GPU机型支持此字段。 + - **GpuType** (str) - GPU类型,枚举值["K80", "P40", "V100"] + - **LifeCycle** (int) - 【未支持】1:普通云主机;2:抢占性云主机;默认普通 + - **MachineType** (str) - 云主机机型(V2版本概念)。枚举值["N", "C", "G", "O"]。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **NetCapability** (str) - 网络增强。枚举值:Normal,不开启; Super,开启网络增强1.0。 默认值为Normal。 + - **Quantity** (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末。 + - **StorageType** (str) - 【待废弃】磁盘类型,同时设定系统盘和数据盘, 枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘; 默认为LocalDisk 仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。 + - **TimemachineFeature** (str) - 【待废弃】方舟机型。No,Yes。默认是No。 + - **UHostType** (str) - 【待废弃】云主机机型(V1版本概念)。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PriceSet** (list) - 见 **UHostPriceSet** 模型定义 + + **Request Model** + + **GetUHostInstancePriceParamDisks** + + - **BackupType** (str) - 磁盘备份方案。枚举值:\\ > NONE,无备份 \\ > DATAARK,数据方舟 \\ 当前磁盘支持的备份模式参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ + - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 + - **Size** (int) - 磁盘大小,单位GB。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **Type** (str) - 磁盘类型。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + + **Response Model** + + **UHostPriceSet** + + - **ChargeType** (str) - 计费类型。Year,Month,Dynamic + - **Price** (float) - 价格,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUHostInstancePriceRequestSchema().dumps(d) + resp = self.invoke("GetUHostInstancePrice", d, **kwargs) + return apis.GetUHostInstancePriceResponseSchema().loads(resp)
+ +
[docs] def get_uhost_instance_vnc_info(self, req=None, **kwargs): + """ GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + - **VncIP** (str) - Vnc登录IP + - **VncPassword** (str) - Vnc 登录密码 + - **VncPort** (int) - Vnc登录端口 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUHostInstanceVncInfoRequestSchema().dumps(d) + resp = self.invoke("GetUHostInstanceVncInfo", d, **kwargs) + return apis.GetUHostInstanceVncInfoResponseSchema().loads(resp)
+ +
[docs] def get_uhost_upgrade_price(self, req=None, **kwargs): + """ GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID。 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ 。 + - **BootDiskSpace** (int) - 【待废弃】系统大小,单位: GB,范围[20,100],步长: 10。 + - **CPU** (int) - 虚拟CPU核数。可选参数:1-64(可选范围参考控制台)。默认值为当前实例的CPU核数。 + - **DiskSpace** (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10, 默认值是该主机当前数据盘大小。 + - **HostType** (str) - 【待废弃】主机系列,目前支持N1,N2 + - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值为当前实例的内存大小。 + - **NetCapValue** (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变) + - **TimemachineFeature** (str) - 方舟机型。No,Yes。默认是No。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Price** (float) - 规格调整差价。精确到小数点后2位。 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUHostUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("GetUHostUpgradePrice", d, **kwargs) + return apis.GetUHostUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def import_custom_image(self, req=None, **kwargs): + """ ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Auth** (bool) - (Required) 是否授权。必须填true + - **Format** (str) - (Required) 镜像格式,可选RAW、VHD、VMDK、qcow2 + - **ImageName** (str) - (Required) 镜像名称 + - **OsName** (str) - (Required) 操作系统详细版本,请参考控制台的镜像版本;OsType为Other时,输入参数为Other + - **OsType** (str) - (Required) 操作系统平台,比如CentOS、Ubuntu、Windows、RedHat等,请参考控制台的镜像版本;若导入控制台上没有的操作系统,参数为Other + - **UFileUrl** (str) - (Required) UFile私有空间地址 + - **ImageDescription** (str) - 镜像描述 + + **Response** + + - **ImageId** (str) - 镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ImportCustomImageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("ImportCustomImage", d, **kwargs) + return apis.ImportCustomImageResponseSchema().loads(resp)
+ +
[docs] def modify_uhost_instance_name(self, req=None, **kwargs): + """ ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Name** (str) - UHost实例名称 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUHostInstanceNameRequestSchema().dumps(d) + resp = self.invoke("ModifyUHostInstanceName", d, **kwargs) + return apis.ModifyUHostInstanceNameResponseSchema().loads(resp)
+ +
[docs] def modify_uhost_instance_remark(self, req=None, **kwargs): + """ ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Remark** (str) - 备注 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUHostInstanceRemarkRequestSchema().dumps(d) + resp = self.invoke("ModifyUHostInstanceRemark", d, **kwargs) + return apis.ModifyUHostInstanceRemarkResponseSchema().loads(resp)
+ +
[docs] def modify_uhost_instance_tag(self, req=None, **kwargs): + """ ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Tag** (str) - 业务组名称 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUHostInstanceTagRequestSchema().dumps(d) + resp = self.invoke("ModifyUHostInstanceTag", d, **kwargs) + return apis.ModifyUHostInstanceTagResponseSchema().loads(resp)
+ +
[docs] def poweroff_uhost_instance(self, req=None, **kwargs): + """ PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PoweroffUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("PoweroffUHostInstance", d, **kwargs) + return apis.PoweroffUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def reboot_uhost_instance(self, req=None, **kwargs): + """ RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **DiskPassword** (str) - 加密盘密码 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RebootUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("RebootUHostInstance", d, **kwargs) + return apis.RebootUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def reinstall_uhost_instance(self, req=None, **kwargs): + """ ReinstallUHostInstance - 重新安装指定UHost实例的操作系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例资源ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **DNSServers** (list) - 针对非私有子网主机,可自定义DNS。n可为0-2 + - **ImageId** (str) - 镜像Id,默认使用原镜像 参见 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ + - **Password** (str) - 如果创建UHost实例时LoginMode为Password,则必须填写,如果LoginMode为KeyPair,不需要填写 (密码格式使用BASE64编码;LoginMode不可变更) + - **ReserveDisk** (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes + - **ResourceType** (int) - 云灾备指明191 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReinstallUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("ReinstallUHostInstance", d, **kwargs) + return apis.ReinstallUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def reset_uhost_instance_password(self, req=None, **kwargs): + """ ResetUHostInstancePassword - 重置UHost实例的管理员密码。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Password** (str) - (Required) UHost新密码(密码格式使用BASE64编码) + - **UHostId** (str) - (Required) UHost实例ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResetUHostInstancePasswordRequestSchema().dumps(d) + resp = self.invoke("ResetUHostInstancePassword", d, **kwargs) + return apis.ResetUHostInstancePasswordResponseSchema().loads(resp)
+ +
[docs] def resize_attached_disk(self, req=None, **kwargs): + """ ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DiskId** (str) - (Required) 磁盘ID。参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ 返回值中的DiskSet。 + - **DiskSpace** (int) - (Required) 磁盘大小,单位GB,步长为10。取值范围需大于当前磁盘大小,最大值请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **UHostId** (str) - (Required) UHost实例ID。 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ 。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DiskId** (str) - 改配成功的磁盘id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeAttachedDiskRequestSchema().dumps(d) + resp = self.invoke("ResizeAttachedDisk", d, **kwargs) + return apis.ResizeAttachedDiskResponseSchema().loads(resp)
+ +
[docs] def resize_uhost_instance(self, req=None, **kwargs): + """ ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,磁盘空间大小,网络增强等。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **BootDiskSpace** (int) - 系统盘大小,单位:GB,范围[20,100],步长:10,系统盘不支持缩容,因此不允许输入比当前实例系统盘小的值 + - **CPU** (int) - 虚拟CPU核数,单位:个,范围:[1,16],最小值为1,其他值是2的倍数,默认值为当前实例的CPU核数(*windows CPU>=2) + - **DiskSpace** (int) - 数据盘大小,单位:GB,范围[10,1000]; SSD机型,单位:GB,范围[100,500];步长:10,默认值为当前实例的数据盘大小,数据盘不支持缩容,因此不允许输入比当前实例数据盘大小的值 + - **Memory** (int) - 内存大小,单位:MB,范围[2048,65536],步长:2048,默认值为当前实例的内存大小(BGP-C数据中心最小支持1024,限Linux系统) + - **NetCapValue** (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("ResizeUHostInstance", d, **kwargs) + return apis.ResizeUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def start_uhost_instance(self, req=None, **kwargs): + """ StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **DiskPassword** (str) - 加密盘密码 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StartUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("StartUHostInstance", d, **kwargs) + return apis.StartUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def stop_uhost_instance(self, req=None, **kwargs): + """ StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StopUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("StopUHostInstance", d, **kwargs) + return apis.StopUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def terminate_custom_image(self, req=None, **kwargs): + """ TerminateCustomImage - 删除用户自定义镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - (Required) 自制镜像ID 参见 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **ImageId** (str) - 自制镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.TerminateCustomImageRequestSchema().dumps(d) + resp = self.invoke("TerminateCustomImage", d, **kwargs) + return apis.TerminateCustomImageResponseSchema().loads(resp)
+ +
[docs] def terminate_uhost_instance(self, req=None, **kwargs): + """ TerminateUHostInstance - 删除指定数据中心的UHost实例。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost资源Id 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Destroy** (int) - 是否直接删除,0表示按照原来的逻辑(有回收站权限,则进入回收站),1表示直接删除 + - **ReleaseEIP** (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。 + - **ReleaseUDisk** (bool) - 是否删除挂载的数据盘。true删除,其他不删除。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **InRecycle** (str) - 放入回收站:"Yes", 彻底删除:“No” + - **UHostId** (str) - UHost 实例 Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.TerminateUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("TerminateUHostInstance", d, **kwargs) + return apis.TerminateUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def upgrade_to_ark_uhost_instance(self, req=None, **kwargs): + """ UpgradeToArkUHostInstance - 普通升级为方舟机型 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostIds** (list) - (Required) UHost主机的资源ID,例如UHostIds.0代表希望升级的主机1,UHostIds.1代表主机2。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CouponId** (str) - 代金券ID 请参考DescribeCoupon接口 + + **Response** + + - **UHostSet** (list) - UHost主机的资源ID数组 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpgradeToArkUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("UpgradeToArkUHostInstance", d, **kwargs) + return apis.UpgradeToArkUHostInstanceResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/uhub/client.html b/_modules/ucloud/services/uhub/client.html new file mode 100644 index 0000000..9290afe --- /dev/null +++ b/_modules/ucloud/services/uhub/client.html @@ -0,0 +1,289 @@ + + + + + + + + ucloud.services.uhub.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uhub.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uhub.schemas import apis
+
+
+
[docs]class UHubClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UHubClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_repo(self, req=None, **kwargs): + """ CreateRepo - 创建镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 仓库名称,不可修改 + - **Description** (str) - 仓库备注 + - **IsShared** (bool) - 镜像仓库是否公开,公开为true、不公开为false;默认为false + + **Response** + + - **Message** (str) - 有错误时返回内容 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.CreateRepoRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateRepo", d, **kwargs) + return apis.CreateRepoResponseSchema().loads(resp)
+ +
[docs] def delete_repo(self, req=None, **kwargs): + """ DeleteRepo - 删除镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 镜像仓库名称 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteRepoRequestSchema().dumps(d) + resp = self.invoke("DeleteRepo", d, **kwargs) + return apis.DeleteRepoResponseSchema().loads(resp)
+ +
[docs] def delete_repo_image(self, req=None, **kwargs): + """ DeleteRepoImage - 删除镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ImageName** (str) - (Required) 镜像名称 + - **RepoName** (str) - (Required) 镜像仓库名称 + - **TagName** (str) - 不指定tag则删除全部tag + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteRepoImageRequestSchema().dumps(d) + resp = self.invoke("DeleteRepoImage", d, **kwargs) + return apis.DeleteRepoImageResponseSchema().loads(resp)
+ +
[docs] def get_image_tag(self, req=None, **kwargs): + """ GetImageTag - 获取镜像tag + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ImageName** (str) - (Required) 镜像名称 + - **RepoName** (str) - (Required) 镜像仓库名称 + - **Limit** (int) - 每次获取数量,默认为20 + - **Offset** (int) - 偏移量,默认0 + - **TagName** (str) - 默认不写,如果填写,代表查询该tag,否则查全部tag + + **Response** + + - **TagSet** (list) - 见 **TagSet** 模型定义 + - **TotalCount** (int) - tag总数 + + **Response Model** + + **TagSet** + + - **TagName** (str) - Tag名称 + - **UpdateTime** (str) - 镜像更新时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetImageTagRequestSchema().dumps(d) + resp = self.invoke("GetImageTag", d, **kwargs) + return apis.GetImageTagResponseSchema().loads(resp)
+ +
[docs] def get_repo(self, req=None, **kwargs): + """ GetRepo - 获取镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Limit** (int) - 数量,默认20 + - **Offset** (int) - 偏移量,默认0 + - **Type** (str) - private私有仓库,public公共仓库,默认public + + **Response** + + - **RepoSet** (list) - 见 **RepoSet** 模型定义 + - **TotalCount** (int) - 总的仓库数量 + + **Response Model** + + **RepoSet** + + - **CreateTime** (str) - 仓库创建时间 + - **Description** (str) - 镜像仓库描述 + - **IsOutSide** (str) - 镜像仓库是否外网可以访问,可以为ture,不可以为false + - **IsShared** (str) - 镜像仓库类型,false为私有;true为公有 + - **RepoName** (str) - 镜像仓库名称 + - **UpdateTime** (str) - 仓库更新时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetRepoRequestSchema().dumps(d) + resp = self.invoke("GetRepo", d, **kwargs) + return apis.GetRepoResponseSchema().loads(resp)
+ +
[docs] def get_repo_image(self, req=None, **kwargs): + """ GetRepoImage - 获取镜像仓库下的镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 镜像仓库名称 + - **Limit** (int) - 显示数量,默认为20 + - **Offset** (int) - 偏移量,默认0 + + **Response** + + - **ImageSet** (list) - 见 **ImageSet** 模型定义 + - **TotalCount** (int) - + + **Response Model** + + **ImageSet** + + - **CreateTime** (str) - 创建时间 + - **ImageName** (str) - 镜像名称 + - **LatestTag** (str) - 最新push的Tag + - **PullCount** (int) - 镜像被下载次数 + - **RepoName** (str) - 镜像仓库名称 + - **UpdateTime** (str) - 修改时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetRepoImageRequestSchema().dumps(d) + resp = self.invoke("GetRepoImage", d, **kwargs) + return apis.GetRepoImageResponseSchema().loads(resp)
+ +
[docs] def update_repo(self, req=None, **kwargs): + """ UpdateRepo - 更新镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 镜像仓库名称,不可修改 + - **Description** (str) - 备注 + - **IsShared** (str) - false设置为私有;true设置为公有。默认false + + **Response** + + - **Message** (str) - 错误的时候返回 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.UpdateRepoRequestSchema().dumps(d) + resp = self.invoke("UpdateRepo", d, **kwargs) + return apis.UpdateRepoResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/ulb/client.html b/_modules/ucloud/services/ulb/client.html new file mode 100644 index 0000000..0414960 --- /dev/null +++ b/_modules/ucloud/services/ulb/client.html @@ -0,0 +1,756 @@ + + + + + + + + ucloud.services.ulb.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ulb.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ulb.schemas import apis
+
+
+
[docs]class ULBClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(ULBClient, self).__init__(config, transport, middleware, logger) + +
[docs] def allocate_backend(self, req=None, **kwargs): + """ AllocateBackend - 添加ULB后端资源实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ResourceId** (str) - (Required) 所添加的后端资源的资源ID + - **ResourceType** (str) - (Required) 所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost” + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **VServerId** (str) - (Required) VServer实例的ID + - **Enabled** (int) - 后端实例状态开关,枚举值: 1:启用; 0:禁用 默认为启用 + - **Port** (int) - 所添加的后端资源服务端口,取值范围[1-65535],默认80 + - **Weight** (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 + + **Response** + + - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关),可用于 UpdateBackendAttribute/UpdateBackendAttributeBatch/ReleaseBackend + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateBackendRequestSchema().dumps(d) + resp = self.invoke("AllocateBackend", d, **kwargs) + return apis.AllocateBackendResponseSchema().loads(resp)
+ +
[docs] def allocate_backend_batch(self, req=None, **kwargs): + """ AllocateBackendBatch - 批量添加VServer后端节点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Backends** (list) - (Required) 用| 分割字段,格式:ResourceId| ResourceType| Port| Enabled|IP| Weight。ResourceId:所添加的后端资源的资源ID;ResourceType:所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”;Port:所添加的后端资源服务端口,取值范围[1-65535];Enabled:后端实例状态开关,枚举值: 1:启用; 0:禁用;IP:后端资源内网ip;Weight:所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **VServerId** (str) - (Required) VServer实例的ID + - **ApiVersion** (int) - + + **Response** + + - **BackendSet** (list) - 见 **BackendSet** 模型定义 + + **Response Model** + + **BackendSet** + + - **BackendId** (str) - rs的资源ID + - **ResourceId** (str) - rs对应的UHost ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateBackendBatchRequestSchema().dumps(d) + resp = self.invoke("AllocateBackendBatch", d, **kwargs) + return apis.AllocateBackendBatchResponseSchema().loads(resp)
+ +
[docs] def bind_ssl(self, req=None, **kwargs): + """ BindSSL - 将SSL证书绑定到VServer + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLId** (str) - (Required) SSL证书的Id + - **ULBId** (str) - (Required) 所绑定ULB实例ID + - **VServerId** (str) - (Required) 所绑定VServer实例ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BindSSLRequestSchema().dumps(d) + resp = self.invoke("BindSSL", d, **kwargs) + return apis.BindSSLResponseSchema().loads(resp)
+ +
[docs] def create_policy(self, req=None, **kwargs): + """ CreatePolicy - 创建VServer内容转发策略 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId + - **Match** (str) - (Required) 内容转发匹配字段 + - **ULBId** (str) - (Required) 需要添加内容转发策略的负载均衡实例ID + - **VServerId** (str) - (Required) 需要添加内容转发策略的VServer实例ID + - **Type** (str) - 内容转发匹配字段的类型 + + **Response** + + - **PolicyId** (str) - 内容转发策略ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreatePolicyRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreatePolicy", d, **kwargs) + return apis.CreatePolicyResponseSchema().loads(resp)
+ +
[docs] def create_ssl(self, req=None, **kwargs): + """ CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLName** (str) - (Required) SSL证书的名字,默认值为空 + - **CaCert** (str) - CA证书 + - **PrivateKey** (str) - 加密证书的私钥 + - **SSLContent** (str) - SSL证书的完整内容,包括用户证书、加密证书的私钥、CA证书 + - **SSLType** (str) - 所添加的SSL证书类型,目前只支持Pem格式 + - **UserCert** (str) - 用户的证书 + + **Response** + + - **SSLId** (str) - SSL证书的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateSSLRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateSSL", d, **kwargs) + return apis.CreateSSLResponseSchema().loads(resp)
+ +
[docs] def create_ulb(self, req=None, **kwargs): + """ CreateULB - 创建负载均衡实例,可以选择内网或者外网 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - ULB 所属的业务组ID,如果不传则使用默认的业务组 + - **ChargeType** (str) - 付费方式 + - **IPVersion** (str) - ULB ip类型,枚举值:IPv6 / IPv4 (内部测试,暂未对外开放) + - **InnerMode** (str) - 创建的ULB是否为内网模式 + - **ListenType** (str) - ULB 监听器类型,枚举值:RequestProxy / PacketsTransmit (内部测试,暂未对外开放) + - **OuterMode** (str) - 创建的ULB是否为外网模式,默认即为外网模式 + - **PrivateIp** (str) - 创建内网ULB时指定内网IP。若不传值,则随机分配当前子网下的IP(暂时不对外开放,创建外网ULB该字段会忽略) + - **Remark** (str) - 备注 + - **SubnetId** (str) - 内网ULB 所属的子网ID,如果不传则使用默认的子网 + - **Tag** (str) - 业务组 + - **ULBName** (str) - 负载均衡的名字,默认值为“ULB” + - **VPCId** (str) - ULB所在的VPC的ID, 如果不传则使用默认的VPC + + **Response** + + - **ULBId** (str) - 负载均衡实例的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateULBRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateULB", d, **kwargs) + return apis.CreateULBResponseSchema().loads(resp)
+ +
[docs] def create_vserver(self, req=None, **kwargs): + """ CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例ID + - **ClientTimeout** (int) - ListenType为RequestProxy时表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;ListenType为PacketsTransmit时表示连接保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持 + - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 + - **FrontendPort** (int) - VServer后端端口,取值范围[1-65535];默认值为80 + - **ListenType** (str) - 监听器类型,枚举值为:RequestProxy -> 请求代理;PacketsTransmit -> 报文转发;默认为"RequestProxy" + - **Method** (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:"Roundrobin" + - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; + - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 + - **PersistenceInfo** (str) - 根据PersistenceType确认; None和ServerInsert: 此字段无意义; UserDefined:此字段传入自定义会话保持String + - **PersistenceType** (str) - VServer会话保持方式,默认关闭会话保持。枚举值:None -> 关闭;ServerInsert -> 自动生成KEY;UserDefined -> 用户自定义KEY。 + - **Protocol** (str) - VServer实例的协议,请求代理模式下有 HTTP、HTTPS、TCP,报文转发下有 TCP,UDP。默认为“HTTP" + - **VServerName** (str) - VServer实例名称,默认为"VServer" + + **Response** + + - **VServerId** (str) - VServer实例的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateVServerRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateVServer", d, **kwargs) + return apis.CreateVServerResponseSchema().loads(resp)
+ +
[docs] def delete_policy(self, req=None, **kwargs): + """ DeletePolicy - 删除内容转发策略 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PolicyId** (str) - (Required) 内容转发策略ID + - **GroupId** (str) - 内容转发策略组ID + - **VServerId** (str) - VServer 资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeletePolicyRequestSchema().dumps(d) + resp = self.invoke("DeletePolicy", d, **kwargs) + return apis.DeletePolicyResponseSchema().loads(resp)
+ +
[docs] def delete_ssl(self, req=None, **kwargs): + """ DeleteSSL - 删除SSL证书 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLId** (str) - (Required) SSL证书的ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteSSLRequestSchema().dumps(d) + resp = self.invoke("DeleteSSL", d, **kwargs) + return apis.DeleteSSLResponseSchema().loads(resp)
+ +
[docs] def delete_ulb(self, req=None, **kwargs): + """ DeleteULB - 删除负载均衡实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **ReleaseEip** (bool) - 删除ulb时是否释放绑定的EIP,false标识只解绑EIP,true表示会释放绑定的EIP,默认是false + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteULBRequestSchema().dumps(d) + resp = self.invoke("DeleteULB", d, **kwargs) + return apis.DeleteULBResponseSchema().loads(resp)
+ +
[docs] def delete_vserver(self, req=None, **kwargs): + """ DeleteVServer - 删除VServer实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **VServerId** (str) - (Required) VServer实例的ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteVServerRequestSchema().dumps(d) + resp = self.invoke("DeleteVServer", d, **kwargs) + return apis.DeleteVServerResponseSchema().loads(resp)
+ +
[docs] def describe_ssl(self, req=None, **kwargs): + """ DescribeSSL - 获取SSL证书信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 数据分页值,默认为20 + - **Offset** (int) - 数据偏移量,默认值为0 + - **SSLId** (str) - SSL证书的Id + + **Response** + + - **DataSet** (list) - 见 **ULBSSLSet** 模型定义 + - **TotalCount** (int) - 满足条件的SSL证书总数 + + **Response Model** + + **ULBSSLSet** + + - **HashValue** (str) - + - **SSLId** (str) - SSL证书的Id + - **SSLName** (str) - SSL证书的名字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeSSLRequestSchema().dumps(d) + resp = self.invoke("DescribeSSL", d, **kwargs) + return apis.DescribeSSLResponseSchema().loads(resp)
+ +
[docs] def describe_ulb(self, req=None, **kwargs): + """ DescribeULB - 获取ULB详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - ULB所属的业务组ID + - **Limit** (int) - 数据分页值,默认为20 + - **Offset** (int) - 数据偏移量,默认为0 + - **SubnetId** (str) - ULB所属的子网ID + - **ULBId** (str) - 负载均衡实例的Id。 若指定则返回指定的负载均衡实例的信息; 若不指定则返回当前数据中心中所有的负载均衡实例的信息 + - **VPCId** (str) - ULB所属的VPC + + **Response** + + - **DataSet** (list) - 见 **ULBSet** 模型定义 + - **TotalCount** (int) - 满足条件的ULB总数 + + **Response Model** + + **PolicyBackendSet** + + - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关 + - **ObjectId** (str) - 后端资源的对象ID + - **Port** (int) - 所添加的后端资源服务端口 + - **PrivateIP** (str) - 后端资源的内网IP + - **ResourceName** (str) - 后端资源的实例名称 + + **ULBPolicySet** + + - **BackendSet** (list) - 见 **PolicyBackendSet** 模型定义 + - **Match** (str) - 内容转发匹配字段;默认内容转发类型下为空。 + - **PolicyId** (str) - 内容转发Id,默认内容转发类型下为空。 + - **PolicyPriority** (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。 + - **PolicyType** (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发 + - **TotalCount** (int) - 默认内容转发类型下返回当前rs总数 + - **Type** (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空 + - **VServerId** (str) - 所属VServerId + + **ULBBackendSet** + + - **BackendId** (str) - 后端资源实例的Id + - **Enabled** (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用 + - **Port** (int) - 后端提供服务的端口 + - **PrivateIP** (str) - 后端提供服务的内网IP + - **ResourceId** (str) - 资源实例的资源Id + - **ResourceName** (str) - 资源实例的资源名称 + - **ResourceType** (str) - 资源实例的类型 + - **Status** (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常 + - **SubResourceId** (str) - 资源绑定的虚拟网卡实例的资源Id + - **SubResourceName** (str) - 资源绑定的虚拟网卡实例的资源名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡实例的类型 + - **SubnetId** (str) - 后端提供服务的资源所在的子网的ID + - **Weight** (int) - + + **ULBSSLSet** + + - **HashValue** (str) - + - **SSLId** (str) - SSL证书的Id + - **SSLName** (str) - SSL证书的名字 + + **ULBVServerSet** + + - **BackendSet** (list) - 见 **ULBBackendSet** 模型定义 + - **ClientTimeout** (int) - 空闲连接的回收时间,单位:秒。 + - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 + - **FrontendPort** (int) - VServer服务端口 + - **ListenType** (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发 + - **Method** (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。 + - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; + - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 + - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。 + - **PersistenceType** (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。 + - **PolicySet** (list) - 见 **ULBPolicySet** 模型定义 + - **Protocol** (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。 + - **SSLSet** (list) - 见 **ULBSSLSet** 模型定义 + - **Status** (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。 + - **VServerId** (str) - VServer实例的Id + - **VServerName** (str) - VServer实例的名字 + + **ULBIPSet** + + - **Bandwidth** (int) - 弹性IP的带宽值(暂未对外开放) + - **BandwidthType** (int) - 弹性IP的带宽类型,枚举值:1 表示是共享带宽,0 普通带宽类型(暂未对外开放) + - **EIP** (str) - 弹性IP地址 + - **EIPId** (str) - 弹性IP的ID + - **OperatorName** (str) - 弹性IP的运营商信息,枚举值为: Bgp:BGP IP International:国际IP + + **ULBSet** + + - **Bandwidth** (int) - 带宽 + - **BandwidthType** (int) - 带宽类型,枚举值为: 0,非共享带宽; 1,共享带宽 + - **BusinessId** (str) - ULB 所属的业务组ID + - **CreateTime** (int) - ULB的创建时间,格式为Unix Timestamp + - **ExpireTime** (int) - ULB的到期时间,格式为Unix Timestamp + - **IPSet** (list) - 见 **ULBIPSet** 模型定义 + - **Name** (str) - 负载均衡的资源名称(资源系统中),缺省值“ULB” + - **PrivateIP** (str) - ULB的内网IP,当ULBType为OuterMode时,该值为空 + - **Remark** (str) - 负载均衡的备注,缺省值“” + - **Resource** (list) - ULB的详细信息列表(废弃) + - **SubnetId** (str) - ULB 为 InnerMode 时,ULB 所属的子网ID,默认为空 + - **Tag** (str) - 负载均衡的业务组名称,缺省值“Default” + - **ULBId** (str) - 负载均衡的资源ID + - **ULBName** (str) - 负载均衡的资源名称(内部记载,废弃) + - **ULBType** (str) - ULB 的类型 + - **VPCId** (str) - ULB所在的VPC的ID + - **VServerSet** (list) - 见 **ULBVServerSet** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeULBRequestSchema().dumps(d) + resp = self.invoke("DescribeULB", d, **kwargs) + return apis.DescribeULBResponseSchema().loads(resp)
+ +
[docs] def describe_vserver(self, req=None, **kwargs): + """ DescribeVServer - 获取ULB下的VServer的详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例的Id + - **Limit** (int) - 数据分页值 + - **Offset** (int) - 数据偏移量 + - **VServerId** (str) - VServer实例的Id;若指定则返回指定的VServer实例的信息; 若不指定则返回当前负载均衡实例下所有VServer的信息 + + **Response** + + - **DataSet** (list) - 见 **ULBVServerSet** 模型定义 + - **TotalCount** (int) - 满足条件的VServer总数 + + **Response Model** + + **PolicyBackendSet** + + - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关 + - **ObjectId** (str) - 后端资源的对象ID + - **Port** (int) - 所添加的后端资源服务端口 + - **PrivateIP** (str) - 后端资源的内网IP + - **ResourceName** (str) - 后端资源的实例名称 + + **ULBSSLSet** + + - **HashValue** (str) - + - **SSLId** (str) - SSL证书的Id + - **SSLName** (str) - SSL证书的名字 + + **ULBPolicySet** + + - **BackendSet** (list) - 见 **PolicyBackendSet** 模型定义 + - **Match** (str) - 内容转发匹配字段;默认内容转发类型下为空。 + - **PolicyId** (str) - 内容转发Id,默认内容转发类型下为空。 + - **PolicyPriority** (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。 + - **PolicyType** (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发 + - **TotalCount** (int) - 默认内容转发类型下返回当前rs总数 + - **Type** (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空 + - **VServerId** (str) - 所属VServerId + + **ULBBackendSet** + + - **BackendId** (str) - 后端资源实例的Id + - **Enabled** (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用 + - **Port** (int) - 后端提供服务的端口 + - **PrivateIP** (str) - 后端提供服务的内网IP + - **ResourceId** (str) - 资源实例的资源Id + - **ResourceName** (str) - 资源实例的资源名称 + - **ResourceType** (str) - 资源实例的类型 + - **Status** (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常 + - **SubResourceId** (str) - 资源绑定的虚拟网卡实例的资源Id + - **SubResourceName** (str) - 资源绑定的虚拟网卡实例的资源名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡实例的类型 + - **SubnetId** (str) - 后端提供服务的资源所在的子网的ID + - **Weight** (int) - + + **ULBVServerSet** + + - **BackendSet** (list) - 见 **ULBBackendSet** 模型定义 + - **ClientTimeout** (int) - 空闲连接的回收时间,单位:秒。 + - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 + - **FrontendPort** (int) - VServer服务端口 + - **ListenType** (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发 + - **Method** (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。 + - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; + - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 + - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。 + - **PersistenceType** (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。 + - **PolicySet** (list) - 见 **ULBPolicySet** 模型定义 + - **Protocol** (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。 + - **SSLSet** (list) - 见 **ULBSSLSet** 模型定义 + - **Status** (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。 + - **VServerId** (str) - VServer实例的Id + - **VServerName** (str) - VServer实例的名字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVServerRequestSchema().dumps(d) + resp = self.invoke("DescribeVServer", d, **kwargs) + return apis.DescribeVServerResponseSchema().loads(resp)
+ +
[docs] def release_backend(self, req=None, **kwargs): + """ ReleaseBackend - 从VServer释放后端资源实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID) + - **ULBId** (str) - (Required) 负载均衡实例的ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseBackendRequestSchema().dumps(d) + resp = self.invoke("ReleaseBackend", d, **kwargs) + return apis.ReleaseBackendResponseSchema().loads(resp)
+ +
[docs] def unbind_ssl(self, req=None, **kwargs): + """ UnbindSSL - 从VServer解绑SSL证书 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLId** (str) - (Required) SSL证书的Id + - **ULBId** (str) - (Required) 所绑定ULB实例ID + - **VServerId** (str) - (Required) 所绑定VServer实例ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UnbindSSLRequestSchema().dumps(d) + resp = self.invoke("UnbindSSL", d, **kwargs) + return apis.UnbindSSLResponseSchema().loads(resp)
+ +
[docs] def update_backend_attribute(self, req=None, **kwargs): + """ UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID) + - **ULBId** (str) - (Required) 负载均衡资源ID + - **Enabled** (int) - 后端实例状态开关 + - **Port** (int) - 后端资源服务端口,取值范围[1-65535] + - **Weight** (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateBackendAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateBackendAttribute", d, **kwargs) + return apis.UpdateBackendAttributeResponseSchema().loads(resp)
+ +
[docs] def update_policy(self, req=None, **kwargs): + """ UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId + - **Match** (str) - (Required) 内容转发匹配字段 + - **PolicyId** (str) - (Required) 转发规则的ID + - **ULBId** (str) - (Required) 需要添加内容转发策略的负载均衡实例ID + - **VServerId** (str) - (Required) 需要添加内容转发策略的VServer实例ID + - **Type** (str) - 内容转发匹配字段的类型 + + **Response** + + - **PolicyId** (str) - 转发规则的ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdatePolicyRequestSchema().dumps(d) + resp = self.invoke("UpdatePolicy", d, **kwargs) + return apis.UpdatePolicyResponseSchema().loads(resp)
+ +
[docs] def update_ulb_attribute(self, req=None, **kwargs): + """ UpdateULBAttribute - 更新ULB名字业务组备注等属性字段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) ULB资源ID + - **Name** (str) - 名字 + - **Remark** (str) - 备注 + - **Tag** (str) - 业务 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateULBAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateULBAttribute", d, **kwargs) + return apis.UpdateULBAttributeResponseSchema().loads(resp)
+ +
[docs] def update_vserver_attribute(self, req=None, **kwargs): + """ UpdateVServerAttribute - 更新VServer实例属性 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例ID + - **VServerId** (str) - (Required) VServer实例ID + - **ClientTimeout** (int) - 请求代理的VServer下表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;报文转发的VServer下表示回话保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持 + - **Domain** (str) - MonitorType 为 Path 时指定健康检查发送请求时HTTP HEADER 里的域名 + - **Method** (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:"Roundrobin" + - **MonitorType** (str) - 健康检查的类型,Port:端口,Path:路径 + - **Path** (str) - MonitorType 为 Path 时指定健康检查发送请求时的路径,默认为 / + - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert, 此字段无意义; UserDefined, 则此字段传入用户自定义会话保持String. 若无此字段则不做修改 + - **PersistenceType** (str) - VServer会话保持模式,若无此字段则不做修改。枚举值:None:关闭;ServerInsert:自动生成KEY;UserDefined:用户自定义KEY。 + - **Protocol** (str) - VServer协议类型,请求代理只支持修改为 HTTP/HTTPS,报文转发VServer只支持修改为 TCP/UDP + - **VServerName** (str) - VServer实例名称,若无此字段则不做修改 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateVServerAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateVServerAttribute", d, **kwargs) + return apis.UpdateVServerAttributeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/umem/client.html b/_modules/ucloud/services/umem/client.html new file mode 100644 index 0000000..8c51628 --- /dev/null +++ b/_modules/ucloud/services/umem/client.html @@ -0,0 +1,831 @@ + + + + + + + + ucloud.services.umem.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.umem.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.umem.schemas import apis
+
+
+
[docs]class UMemClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UMemClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_umem_space(self, req=None, **kwargs): + """ CreateUMemSpace - 创建UMem内存空间 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 空间名称,长度(6<=size<=63) + - **Size** (int) - (Required) 内存大小, 单位:GB, 范围[1~1024] + - **ChargeType** (str) - Year , Month, Dynamic, Trial 默认: Month + - **CouponId** (str) - 使用的代金券id + - **Password** (str) - URedis密码。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。 + - **Protocol** (str) - 协议:memcache, redis (默认redis).注意:redis无single类型 + - **Quantity** (int) - 购买时长 默认: 1 + - **SubnetId** (str) - + - **Tag** (str) - + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + - **VPCId** (str) - + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **SpaceId** (str) - 创建内存空间ID列表 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUMemSpaceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUMemSpace", d, **kwargs) + return apis.CreateUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def create_umem_cache_group(self, req=None, **kwargs): + """ CreateUMemcacheGroup - 创建单机Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 请求创建组的名称 范围[6-60] + - **ChargeType** (str) - 计费模式,Year , Month, Dynamic 默认: Month + - **ConfigId** (str) - 配置ID,目前仅支持默认配置id 默认配置id:"9a891891-c245-4b66-bce8-67e59430d67c" + - **CouponId** (str) - 代金券ID + - **Protocol** (str) - + - **Quantity** (int) - 购买时长,默认为1 + - **Size** (int) - 每个节点的内存大小,单位GB,默认1GB 目前仅支持1/2/4/8/16/32这几档 + - **SubnetId** (str) - + - **Tag** (str) - 业务组 默认:Default + - **VPCId** (str) - + - **Version** (str) - Memcache版本信息,默认为1.4.31 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **GroupId** (str) - 创建的组ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUMemcacheGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUMemcacheGroup", d, **kwargs) + return apis.CreateUMemcacheGroupResponseSchema().loads(resp)
+ +
[docs] def create_uredis_group(self, req=None, **kwargs): + """ CreateURedisGroup - 创建主备redis + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **HighAvailability** (str) - (Required) 是否开启高可用,enable或disable + - **Name** (str) - (Required) 请求创建组的名称 (范围[6-63],只能包含英文、数字以及符号-和_) + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AutoBackup** (str) - 是否自动备份,enable或disable,默认disable + - **BackupId** (str) - 有此项代表从备份中创建,无代表正常创建 + - **BackupTime** (int) - 自动备份开始时间,范围[0-23],默认3点 + - **ChargeType** (str) - 计费模式,Year , Month, Dynamic 默认: Month + - **ConfigId** (str) - 配置ID,目前支持 3.0版本配置ID:"03f58ca9-b64d-4bdd-abc7-c6b9a46fd801",3.2版本配置ID:"3e45ac48-f8a2-a9q2-261d-l342dab130gf", 4.0版本配置ID:"6c9298a3-9d7f-428c-b1d0-e87ab3b8a1ea",默认版本3.0,从备份创建为必传项 + - **CouponId** (str) - 代金券ID + - **MasterGroupId** (str) - Master Redis Group的ID,创建只读Slave时,必须填写 + - **Password** (str) - 初始化密码,需要 base64 编码 + - **Quantity** (int) - 购买时长,默认为1 + - **Size** (int) - 每个节点的内存大小,单位GB,默认1GB,目前仅支持1/2/4/8/16/32,六种 + - **SlaveZone** (str) - 跨机房URedis,slave所在可用区(必须和Zone在同一Region,且不可相同) + - **SubnetId** (str) - + - **Tag** (str) - 业务组名称 + - **VPCId** (str) - + - **Version** (str) - Redis版本信息(详见DescribeURedisVersion返回结果),默认版本3.0 + + **Response** + + - **GroupId** (str) - 创建的组ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateURedisGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateURedisGroup", d, **kwargs) + return apis.CreateURedisGroupResponseSchema().loads(resp)
+ +
[docs] def delete_umem_space(self, req=None, **kwargs): + """ DeleteUMemSpace - 删除UMem内存空间 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SpaceId** (str) - (Required) UMem内存空间ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUMemSpaceRequestSchema().dumps(d) + resp = self.invoke("DeleteUMemSpace", d, **kwargs) + return apis.DeleteUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def delete_umem_cache_group(self, req=None, **kwargs): + """ DeleteUMemcacheGroup - 删除单机Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUMemcacheGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteUMemcacheGroup", d, **kwargs) + return apis.DeleteUMemcacheGroupResponseSchema().loads(resp)
+ +
[docs] def delete_uredis_group(self, req=None, **kwargs): + """ DeleteURedisGroup - 删除主备redis + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteURedisGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteURedisGroup", d, **kwargs) + return apis.DeleteURedisGroupResponseSchema().loads(resp)
+ +
[docs] def describe_umem_price(self, req=None, **kwargs): + """ DescribeUMemPrice - 获取UMem实例价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买umem大小,单位:GB,范围[1~1024] + - **Type** (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year, Month, Dynamic,Trial 如果不指定,则一次性获取三种计费 + - **Quantity** (int) - 购买UMem的时长,默认值为1 + - **RegionFlag** (bool) - + + **Response** + + - **DataSet** (list) - 见 **UMemPriceSet** 模型定义 + + **Response Model** + + **UMemPriceSet** + + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **OriginalPrice** (int) - 原价 + - **Price** (int) - 现价,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemPriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemPrice", d, **kwargs) + return apis.DescribeUMemPriceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_space(self, req=None, **kwargs): + """ DescribeUMemSpace - 获取UMem内存空间列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **SpaceId** (str) - 内存空间ID (无ID,则获取所有) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UMemSpaceSet** 模型定义 + - **TotalCount** (int) - 根据过滤条件得到的总数 + + **Response Model** + + **UMemSpaceAddressSet** + + - **IP** (str) - UMem实例访问IP + - **Port** (int) - UMem实例访问Port + + **UMemSpaceSet** + + - **Address** (list) - 见 **UMemSpaceAddressSet** 模型定义 + - **ChargeType** (str) - Year, Month, Dynamic, Trial + - **CreateTime** (int) - 创建时间 + - **ExpireTime** (int) - 到期时间 + - **Name** (str) - 内存空间名称 + - **Protocol** (str) - 协议类型: memcache, redis + - **RewriteTime** (int) - 运维时间0 //0点1 //1点依次类推 + - **Size** (int) - 容量单位GB + - **SpaceId** (str) - 内存空间ID + - **State** (str) - Starting:创建中 Running:运行中 Fail:失败 + - **SubnetId** (str) - + - **Tag** (str) - + - **Type** (str) - 空间类型:single(无热备),double(热备) + - **UsedSize** (int) - 使用量单位MB + - **VPCId** (str) - + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemSpaceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemSpace", d, **kwargs) + return apis.DescribeUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_upgrade_price(self, req=None, **kwargs): + """ DescribeUMemUpgradePrice - 获取UMem升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买UMem大小,单位:GB + - **SpaceId** (str) - (Required) 需要升级的空间的SpaceId + - **Type** (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 + - **Price** (int) - 价格(兼容老版本) + + **Response Model** + + **PriceDataSet** + + - **CustomPrice** (int) - 用户折后价 + - **PurchaseValue** (int) - 资源有效期 + - **TotalPrice** (int) - 升降级资源的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemUpgradePrice", d, **kwargs) + return apis.DescribeUMemUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_cache_group(self, req=None, **kwargs): + """ DescribeUMemcacheGroup - 显示Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit + - **Limit** (int) - 分页显示的条目数, 默认值为20 + - **Offset** (int) - 分页显示的起始偏移, 默认值为0 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UMemcacheGroupSet** 模型定义 + - **TotalCount** (int) - 组的总的节点个数 + + **Response Model** + + **UMemcacheGroupSet** + + - **ChargeType** (str) - 计费类型:Year,Month,Dynamic 默认Dynamic + - **ConfigId** (str) - 节点的配置ID + - **CreateTime** (int) - 创建时间 (UNIX时间戳) + - **ExpireTime** (int) - 过期时间 (UNIX时间戳) + - **GroupId** (str) - 组ID + - **ModifyTime** (int) - 修改时间 (UNIX时间戳) + - **Name** (str) - 组名称 + - **Port** (int) - 节点分配的服务端口 + - **Size** (int) - 容量单位GB + - **State** (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败Restarting // 重启中 + - **SubnetId** (str) - + - **Tag** (str) - 业务组名称 + - **UsedSize** (int) - 使用量单位MB + - **VPCId** (str) - + - **Version** (str) - Memcache版本信息,默认为1.4.31 + - **VirtualIP** (str) - 节点的虚拟IP地址 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemcacheGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemcacheGroup", d, **kwargs) + return apis.DescribeUMemcacheGroupResponseSchema().loads(resp)
+ +
[docs] def describe_umem_cache_price(self, req=None, **kwargs): + """ DescribeUMemcachePrice - 获取umemcache组价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 容量大小,单位:GB 取值范围[1-32] + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - 计费模式,Year, Month, Dynamic,默认: Dynamic 默认: 获取所有计费模式的价格 + - **Quantity** (int) - 购买umemcache的时长,默认值为1 + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + + **Response** + + - **DataSet** (list) - 见 **UMemcachePriceSet** 模型定义 + + **Response Model** + + **UMemcachePriceSet** + + - **ChargeType** (str) - 计费模式,Year, Month, Dynamic + - **OriginalPrice** (int) - 原价 + - **Price** (int) - 总价格,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemcachePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemcachePrice", d, **kwargs) + return apis.DescribeUMemcachePriceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_cache_upgrade_price(self, req=None, **kwargs): + """ DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 需要升级的空间的GroupId,请参考DescribeUMemcacheGroup接口 + - **Size** (int) - (Required) 购买umemcache大小,单位:GB + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 + - **Price** (int) - 价格,单位:元 + + **Response Model** + + **PriceDataSet** + + - **CustomPrice** (int) - 用户折后价 + - **PurchaseValue** (int) - 资源有效期 + - **TotalPrice** (int) - 升降级资源的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemcacheUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemcacheUpgradePrice", d, **kwargs) + return apis.DescribeUMemcacheUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_backup(self, req=None, **kwargs): + """ DescribeURedisBackup - 查询主备redis备份 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 组的ID + - **Limit** (int) - 分页显示的条目数, 默认值为10 + - **Offset** (int) - 分页显示的起始偏移, 默认值为0 + + **Response** + + - **DataSet** (list) - 见 **URedisBackupSet** 模型定义 + - **TotalCount** (int) - 用户名下总的备份个数 + + **Response Model** + + **URedisBackupSet** + + - **BackupId** (str) - 备份ID + - **BackupName** (str) - 备份的名称 + - **BackupSize** (int) - 备份文件大小, 以字节为单位 + - **BackupTime** (int) - 备份时间 (UNIX时间戳) + - **BackupType** (str) - 备份类型: Manual 手动 Auto 自动 + - **GroupId** (str) - 对应的实例ID + - **GroupName** (str) - 组名称 + - **State** (str) - 备份的状态: Backuping 备份中 Success 备份成功 Error 备份失败 Expired 备份过期 + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisBackupRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisBackup", d, **kwargs) + return apis.DescribeURedisBackupResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_backup_url(self, req=None, **kwargs): + """ DescribeURedisBackupURL - 获取主备Redis备份下载链接 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (str) - (Required) 备份ID + - **GroupId** (str) - 实例名称 + - **RegionFlag** (bool) - 是否是跨机房URedis(默认false) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - 备份文件公网的地址 + - **BackupURL** (str) - 备份文件公网的地址 + - **InnerBackupPath** (str) - + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisBackupURL", d, **kwargs) + return apis.DescribeURedisBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_group(self, req=None, **kwargs): + """ DescribeURedisGroup - 查询主备Redis + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit + - **Limit** (int) - 分页显示的条目数, 默认值为20 + - **Offset** (int) - 分页显示的起始偏移, 默认值为0 + - **Zone** (str) - + + **Response** + + - **DataSet** (list) - 见 **URedisGroupSet** 模型定义 + - **TotalCount** (int) - 组的总的节点个数 + + **Response Model** + + **URedisGroupSet** + + - **AutoBackup** (str) - 是否需要自动备份,enable,disable + - **BackupTime** (int) - 组自动备份开始时间,单位小时计,范围[0-23] + - **ChargeType** (str) - 计费类型:Year,Month,Dynamic 默认Dynamic + - **ConfigId** (str) - 节点的配置ID + - **CreateTime** (int) - 创建时间 (UNIX时间戳) + - **ExpireTime** (int) - 过期时间 (UNIX时间戳) + - **GroupId** (str) - 组ID + - **GroupName** (str) - 组名称 + - **HighAvailability** (str) - 是否开启高可用,enable,disable + - **MemorySize** (int) - 容量单位GB + - **ModifyTime** (int) - 修改时间 (UNIX时间戳) + - **Name** (str) - 组名称 + - **Port** (int) - 节点分配的服务端口 + - **Protocol** (str) - 协议 + - **RewriteTime** (int) - 返回运维时间 0 //0点 1 //1点 以此类推 + - **Size** (int) - 容量单位GB + - **SlaveZone** (str) - 跨机房URedis,slave redis所在可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **State** (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败 + - **SubnetId** (str) - + - **Tag** (str) - 业务组名称 + - **Type** (str) - + - **UsedSize** (int) - 使用量单位MB + - **VPCId** (str) - + - **Version** (str) - Redis版本信息 + - **VirtualIP** (str) - 节点的虚拟IP地址 + - **Zone** (str) - 实例所在可用区,或者master redis所在可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisGroup", d, **kwargs) + return apis.DescribeURedisGroupResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_price(self, req=None, **kwargs): + """ DescribeURedisPrice - 取uredis价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 量大小,单位:GB 取值范围[1-32] + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - 计费模式,Year, Month, Dynamic;如果不指定,则一次性获取三种计费 + - **ProductType** (str) - 产品类型:MS_Redis(标准主备版),S_Redis(从库),默认为MS_Redis + - **Quantity** (int) - 计费模式为Dynamic时,购买的时长, 默认为1 + - **RegionFlag** (bool) - 是否是跨机房URedis(默认false) + - **Type** (str) - + + **Response** + + - **DataSet** (list) - 见 **URedisPriceSet** 模型定义 + + **Response Model** + + **URedisPriceSet** + + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **OriginalPrice** (int) - 原价 + - **Price** (int) - 总价格,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisPriceRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisPrice", d, **kwargs) + return apis.DescribeURedisPriceResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_upgrade_price(self, req=None, **kwargs): + """ DescribeURedisUpgradePrice - 获取uredis升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 要升级的空间的GroupId,请参考DescribeURedisGroup接口 + - **Size** (int) - (Required) 购买uredis大小,单位:GB,范围是[1-32] + - **Type** (str) - + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 + - **Price** (int) - 扩容差价,单位: 元,保留小数点后两位有效数字(兼容老版本) + + **Response Model** + + **PriceDataSet** + + - **CustomPrice** (int) - 用户折后价 + - **PurchaseValue** (int) - 资源有效期 + - **TotalPrice** (int) - 升降级资源的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisUpgradePrice", d, **kwargs) + return apis.DescribeURedisUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def get_umem_space_state(self, req=None, **kwargs): + """ GetUMemSpaceState - 获取UMem内存空间列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SpaceId** (str) - (Required) 内存空间ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **State** (str) - Starting:创建中 Running:运行中 Fail:失败 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUMemSpaceStateRequestSchema().dumps(d) + resp = self.invoke("GetUMemSpaceState", d, **kwargs) + return apis.GetUMemSpaceStateResponseSchema().loads(resp)
+ +
[docs] def modify_umem_space_name(self, req=None, **kwargs): + """ ModifyUMemSpaceName - 修改UMem内存空间名称 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 新的名称,长度(6<=size<=63) + - **SpaceId** (str) - (Required) UMem内存空间ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUMemSpaceNameRequestSchema().dumps(d) + resp = self.invoke("ModifyUMemSpaceName", d, **kwargs) + return apis.ModifyUMemSpaceNameResponseSchema().loads(resp)
+ +
[docs] def modify_uredis_group_name(self, req=None, **kwargs): + """ ModifyURedisGroupName - 修改主备redis名称 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组的ID + - **Name** (str) - (Required) Redis组名称 (范围[6-63],只能包含英文、数字以及符号-和_) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyURedisGroupNameRequestSchema().dumps(d) + resp = self.invoke("ModifyURedisGroupName", d, **kwargs) + return apis.ModifyURedisGroupNameResponseSchema().loads(resp)
+ +
[docs] def resize_udredis_space(self, req=None, **kwargs): + """ ResizeUDredisSpace - 调整内存空间容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024) + - **SpaceId** (str) - (Required) 高性能UMem 内存空间Id + - **CouponId** (str) - 使用的代金券Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUDredisSpaceRequestSchema().dumps(d) + resp = self.invoke("ResizeUDredisSpace", d, **kwargs) + return apis.ResizeUDredisSpaceResponseSchema().loads(resp)
+ +
[docs] def resize_umem_space(self, req=None, **kwargs): + """ ResizeUMemSpace - 调整内存空间容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024) + - **SpaceId** (str) - (Required) UMem 内存空间Id + - **ChargeType** (str) - + - **CouponId** (str) - 使用的代金券Id + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUMemSpaceRequestSchema().dumps(d) + resp = self.invoke("ResizeUMemSpace", d, **kwargs) + return apis.ResizeUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def resize_uredis_group(self, req=None, **kwargs): + """ ResizeURedisGroup - 调整主备redis容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组ID + - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,且小于等于32) 目前仅支持1/2/4/8/16/32 G 六种容量规格 + - **ChargeType** (str) - + - **CouponId** (int) - 代金券ID 请参考DescribeCoupon接口 + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeURedisGroupRequestSchema().dumps(d) + resp = self.invoke("ResizeURedisGroup", d, **kwargs) + return apis.ResizeURedisGroupResponseSchema().loads(resp)
+ +
[docs] def restart_umem_cache_group(self, req=None, **kwargs): + """ RestartUMemcacheGroup - 重启单机Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组的ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RestartUMemcacheGroupRequestSchema().dumps(d) + resp = self.invoke("RestartUMemcacheGroup", d, **kwargs) + return apis.RestartUMemcacheGroupResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/unet/client.html b/_modules/ucloud/services/unet/client.html new file mode 100644 index 0000000..259f71f --- /dev/null +++ b/_modules/ucloud/services/unet/client.html @@ -0,0 +1,1033 @@ + + + + + + + + ucloud.services.unet.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.unet.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.unet.schemas import apis
+
+
+
[docs]class UNetClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UNetClient, self).__init__(config, transport, middleware, logger) + +
[docs] def allocate_eip(self, req=None, **kwargs): + """ AllocateEIP - 根据提供信息, 申请弹性IP + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域。 + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-200],带宽计费[1-800] + - **OperatorName** (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International + - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按需付费(需开启权限); Trial, 试用(需开启权限) 默认为按月付费 + - **CouponId** (str) - 代金券ID, 默认不使用 + - **Name** (str) - 弹性IP的名称, 默认为 "EIP" + - **PayMode** (str) - 弹性IP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; "ShareBandwidth",共享带宽模式. 默认为 "Bandwidth". + - **Quantity** (int) - 购买时长, 默认: 1 + - **Remark** (str) - 弹性IP的备注, 默认为空 + - **ShareBandwidthId** (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效 + - **Tag** (str) - 业务组名称, 默认为 "Default" + + **Response** + + - **EIPSet** (list) - 见 **UnetAllocateEIPSet** 模型定义 + + **Response Model** + + **UnetEIPAddrSet** + + - **IP** (str) - IP地址 + - **OperatorName** (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp + + **UnetAllocateEIPSet** + + - **EIPAddr** (list) - 见 **UnetEIPAddrSet** 模型定义 + - **EIPId** (str) - 申请到的EIP资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateEIPRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateEIP", d, **kwargs) + return apis.AllocateEIPResponseSchema().loads(resp)
+ +
[docs] def allocate_share_bandwidth(self, req=None, **kwargs): + """ AllocateShareBandwidth - 开通共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - (Required) 付费方式:Year 按年,Month 按月,Dynamic 按时; + - **Name** (str) - (Required) 共享带宽名字 + - **ShareBandwidth** (int) - (Required) 共享带宽值 + - **BwType** (str) - 共享带宽类型,ipv4或者ipv6,不传默认ipv4 + - **Quantity** (int) - 购买时长 + - **ShareBandwidthGuarantee** (int) - 共享带宽保底值(后付费) + + **Response** + + - **ShareBandwidthId** (str) - 共享带宽资源Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateShareBandwidthRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateShareBandwidth", d, **kwargs) + return apis.AllocateShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def allocate_vip(self, req=None, **kwargs): + """ AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域 + - **SubnetId** (str) - (Required) 子网id + - **VPCId** (str) - (Required) 指定vip所属的VPC + - **BusinessId** (str) - 业务组 + - **Count** (int) - 申请数量,默认: 1 + - **Ip** (str) - 指定ip + - **Name** (str) - vip名,默认为VIP + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组名称,默认为Default + - **Zone** (str) - 可用区 + + **Response** + + - **DataSet** (list) - 申请到的VIP地址 + - **VIPSet** (list) - 见 **VIPSet** 模型定义 + + **Response Model** + + **VIPSet** + + - **VIP** (str) - 虚拟ip + - **VIPId** (str) - 虚拟ip id + - **VPCId** (str) - VPC id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateVIPRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateVIP", d, **kwargs) + return apis.AllocateVIPResponseSchema().loads(resp)
+ +
[docs] def associate_eip_with_share_bandwidth(self, req=None, **kwargs): + """ AssociateEIPWithShareBandwidth - 将EIP加入共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域。 + - **EIPIds** (list) - (Required) 要加入共享带宽的EIP的资源Id + - **ShareBandwidthId** (str) - (Required) 共享带宽ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AssociateEIPWithShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("AssociateEIPWithShareBandwidth", d, **kwargs) + return apis.AssociateEIPWithShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def bind_eip(self, req=None, **kwargs): + """ BindEIP - 将尚未使用的弹性IP绑定到指定的资源 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **EIPId** (str) - (Required) 弹性IP的资源Id + - **ResourceId** (str) - (Required) 弹性IP请求绑定的资源ID + - **ResourceType** (str) - (Required) 弹性IP请求绑定的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:natgw;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni:虚拟网卡。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BindEIPRequestSchema().dumps(d) + resp = self.invoke("BindEIP", d, **kwargs) + return apis.BindEIPResponseSchema().loads(resp)
+ +
[docs] def create_bandwidth_package(self, req=None, **kwargs): + """ CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域 + - **Bandwidth** (int) - (Required) 带宽大小(单位Mbps), 取值范围[2,800] (最大值受地域限制) + - **EIPId** (str) - (Required) 所绑定弹性IP的资源ID + - **TimeRange** (int) - (Required) 带宽包有效时长, 取值范围为大于0的整数, 即该带宽包在EnableTime到 EnableTime+TimeRange时间段内生效 + - **CouponId** (str) - 代金券ID + - **EnableTime** (int) - 生效时间, 格式为 Unix timestamp, 默认为立即开通 + + **Response** + + - **BandwidthPackageId** (str) - 所创建带宽包的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateBandwidthPackageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateBandwidthPackage", d, **kwargs) + return apis.CreateBandwidthPackageResponseSchema().loads(resp)
+ +
[docs] def create_firewall(self, req=None, **kwargs): + """ CreateFirewall - 创建防火墙 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **Name** (str) - (Required) 防火墙名称 + - **Rule** (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注 + - **Remark** (str) - 防火墙描述,默认为空 + - **Tag** (str) - 防火墙业务组,默认为Default + + **Response** + + - **FWId** (str) - 防火墙ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateFirewallRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateFirewall", d, **kwargs) + return apis.CreateFirewallResponseSchema().loads(resp)
+ +
[docs] def delete_bandwidth_package(self, req=None, **kwargs): + """ DeleteBandwidthPackage - 删除弹性IP上已附加带宽包 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **BandwidthPackageId** (str) - (Required) 带宽包资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteBandwidthPackageRequestSchema().dumps(d) + resp = self.invoke("DeleteBandwidthPackage", d, **kwargs) + return apis.DeleteBandwidthPackageResponseSchema().loads(resp)
+ +
[docs] def delete_firewall(self, req=None, **kwargs): + """ DeleteFirewall - 删除防火墙 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **FWId** (str) - (Required) 防火墙资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteFirewallRequestSchema().dumps(d) + resp = self.invoke("DeleteFirewall", d, **kwargs) + return apis.DeleteFirewallResponseSchema().loads(resp)
+ +
[docs] def describe_bandwidth_package(self, req=None, **kwargs): + """ DescribeBandwidthPackage - 获取某地域下的带宽包信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20 + - **Offset** (int) - 返回数据偏移量, 默认为0 + + **Response** + + - **DataSets** (list) - 见 **UnetBandwidthPackageSet** 模型定义 + - **TotalCount** (int) - 满足条件的带宽包总数 + + **Response Model** + + **EIPAddrSet** + + - **IP** (str) - 弹性IP地址 + - **OperatorName** (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际. + + **UnetBandwidthPackageSet** + + - **Bandwidth** (int) - 带宽包的临时带宽值, 单位Mbps + - **BandwidthPackageId** (str) - 带宽包的资源ID + - **CreateTime** (int) - 创建时间, 格式为 Unix Timestamp + - **DisableTime** (int) - 失效时间, 格式为 Unix Timestamp + - **EIPAddr** (list) - 见 **EIPAddrSet** 模型定义 + - **EIPId** (str) - 带宽包所绑定弹性IP的资源ID + - **EnableTime** (int) - 生效时间, 格式为 Unix Timestamp + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeBandwidthPackageRequestSchema().dumps(d) + resp = self.invoke("DescribeBandwidthPackage", d, **kwargs) + return apis.DescribeBandwidthPackageResponseSchema().loads(resp)
+ +
[docs] def describe_bandwidth_usage(self, req=None, **kwargs): + """ DescribeBandwidthUsage - 获取带宽用量信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPIds** (list) - 弹性IP的资源Id. 如果为空, 则返回当前 Region中符合条件的所有EIP的带宽用量, n为自然数 + - **Limit** (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20 + - **OffSet** (int) - 返回数据偏移量, 默认为0 + + **Response** + + - **EIPSet** (list) - 见 **UnetBandwidthUsageEIPSet** 模型定义 + - **TotalCount** (int) - EIPSet中的元素个数 + + **Response Model** + + **UnetBandwidthUsageEIPSet** + + - **CurBandwidth** (float) - 最近5分钟带宽用量, 单位Mbps + - **EIPId** (str) - 弹性IP资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeBandwidthUsageRequestSchema().dumps(d) + resp = self.invoke("DescribeBandwidthUsage", d, **kwargs) + return apis.DescribeBandwidthUsageResponseSchema().loads(resp)
+ +
[docs] def describe_eip(self, req=None, **kwargs): + """ DescribeEIP - 获取弹性IP信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **EIPIds** (list) - 弹性IP的资源ID如果为空, 则返回当前 Region中符合条件的的所有EIP + - **Limit** (int) - 数据分页值, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + + **Response** + + - **EIPSet** (list) - 见 **UnetEIPSet** 模型定义 + - **TotalBandwidth** (int) - 满足条件的弹性IP带宽总和, 单位Mbps + - **TotalCount** (int) - 满足条件的弹性IP总数 + + **Response Model** + + **ShareBandwidthSet** + + - **ShareBandwidth** (int) - 共享带宽带宽值 + - **ShareBandwidthId** (str) - 共享带宽ID + - **ShareBandwidthName** (str) - 共享带宽的资源名称 + + **UnetEIPAddrSet** + + - **IP** (str) - IP地址 + - **OperatorName** (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp + + **UnetEIPResourceSet** + + - **EIPId** (str) - 弹性IP的资源ID + - **ResourceId** (str) - 已绑定资源的资源ID + - **ResourceName** (str) - 已绑定的资源名称 + - **ResourceType** (str) - 已绑定的资源类型, 枚举值为: uhost, 云主机;natgw:NAT网关;ulb:负载均衡器;upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;vpngw:IPSec VPN;ucdr:云灾备;dbaudit:数据库审计,uni:虚拟网卡。 + - **SubResourceId** (str) - 资源绑定的虚拟网卡的ID + - **SubResourceName** (str) - 资源绑定的虚拟网卡的名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡的类型。uni,虚拟网卡。 + + **UnetEIPSet** + + - **Bandwidth** (int) - 弹性IP的带宽, 单位为Mbps, 当BandwidthType=1时, 该处显示为共享带宽值. 当BandwidthType=0时, 该处显示这个弹性IP的带宽. + - **BandwidthType** (int) - 带宽模式, 枚举值为: 0: 非共享带宽模式, 1: 共享带宽模式 + - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按小时付费; Trial, 试用. 按小时付费和试用这两种付费模式需要开通权限. + - **CreateTime** (int) - 弹性IP的创建时间, 格式为Unix Timestamp + - **EIPAddr** (list) - 见 **UnetEIPAddrSet** 模型定义 + - **EIPId** (str) - 弹性IP的资源ID + - **Expire** (bool) - 弹性IP是否到期 + - **ExpireTime** (int) - 弹性IP的到期时间, 格式为Unix Timestamp + - **Name** (str) - 弹性IP的名称,缺省值为 "EIP" + - **PayMode** (str) - 弹性IP的计费模式, 枚举值为: "Bandwidth", 带宽计费; "Traffic", 流量计费; "ShareBandwidth",共享带宽模式. 默认为 "Bandwidth". + - **Remark** (str) - 弹性IP的备注, 缺省值为 "" + - **Resource** (dict) - 见 **UnetEIPResourceSet** 模型定义 + - **ShareBandwidthSet** (dict) - 见 **ShareBandwidthSet** 模型定义 + - **Status** (str) - 弹性IP的资源绑定状态, 枚举值为: used: 已绑定, free: 未绑定, freeze: 已冻结 + - **Tag** (str) - 弹性IP的业务组标识, 缺省值为 "Default" + - **Weight** (int) - 外网出口权重, 默认为50, 范围[0-100] + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeEIPRequestSchema().dumps(d) + resp = self.invoke("DescribeEIP", d, **kwargs) + return apis.DescribeEIPResponseSchema().loads(resp)
+ +
[docs] def describe_firewall(self, req=None, **kwargs): + """ DescribeFirewall - 获取防火墙组信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **FWId** (str) - 防火墙ID,默认为返回所有防火墙 + - **Limit** (int) - 返回数据长度,默认为20,最大10000000 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **ResourceId** (str) - 绑定防火墙组的资源ID + - **ResourceType** (str) - 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:"unatgw",NAT网关; "uhost",云主机; "upm",物理云主机; "hadoophost",hadoop节点; "fortresshost",堡垒机; "udhost",私有专区主机;"udockhost",容器;"dbaudit",数据库审计. + + **Response** + + - **DataSet** (list) - 见 **FirewallDataSet** 模型定义 + - **TotalCount** (int) - + + **Response Model** + + **FirewallRuleSet** + + - **DstPort** (str) - 目标端口 + - **Priority** (str) - 优先级 + - **ProtocolType** (str) - 协议类型 + - **Remark** (str) - 防火墙规则备注 + - **RuleAction** (str) - 防火墙动作 + - **SrcIP** (str) - 源地址 + + **FirewallDataSet** + + - **CreateTime** (int) - 防火墙组创建时间,格式为Unix Timestamp + - **FWId** (str) - 防火墙ID + - **GroupId** (str) - 安全组ID(即将废弃) + - **Name** (str) - 防火墙名称 + - **Remark** (str) - 防火墙备注 + - **ResourceCount** (int) - 防火墙绑定资源数量 + - **Rule** (list) - 见 **FirewallRuleSet** 模型定义 + - **Tag** (str) - 防火墙业务组 + - **Type** (str) - 防火墙组类型,枚举值为: "user defined", 用户自定义防火墙; "recommend web", 默认Web防火墙; "recommend non web", 默认非Web防火墙 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeFirewallRequestSchema().dumps(d) + resp = self.invoke("DescribeFirewall", d, **kwargs) + return apis.DescribeFirewallResponseSchema().loads(resp)
+ +
[docs] def describe_firewall_resource(self, req=None, **kwargs): + """ DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙ID + - **Limit** (int) - 返回数据长度,默认为20,最大10000000 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + + **Response** + + - **ResourceSet** (list) - 见 **ResourceSet** 模型定义 + - **TotalCount** (int) - 绑定资源总数 + + **Response Model** + + **ResourceSet** + + - **Name** (str) - 名称 + - **PrivateIP** (str) - 内网IP + - **Remark** (str) - 备注 + - **ResourceID** (str) - 绑定该防火墙的资源id + - **ResourceType** (str) - 绑定资源的资源类型,如"uhost","upm","umem","uhive","uvip","uredis","uhadoop","ufortress","dbaudit","udw","udocker", "umemcache" + - **Status** (int) - 状态 + - **Tag** (str) - 业务组 + - **Zone** (int) - 可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeFirewallResourceRequestSchema().dumps(d) + resp = self.invoke("DescribeFirewallResource", d, **kwargs) + return apis.DescribeFirewallResourceResponseSchema().loads(resp)
+ +
[docs] def describe_share_bandwidth(self, req=None, **kwargs): + """ DescribeShareBandwidth - 获取共享带宽信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ShareBandwidthIds** (list) - 需要返回的共享带宽Id + + **Response** + + - **DataSet** (list) - 见 **UnetShareBandwidthSet** 模型定义 + - **TotalCount** (int) - 符合条件的共享带宽总数,大于等于返回DataSet长度 + + **Response Model** + + **EIPAddrSet** + + - **IP** (str) - 弹性IP地址 + - **OperatorName** (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际. + + **EIPSetData** + + - **Bandwidth** (int) - EIP带宽值 + - **EIPAddr** (list) - 见 **EIPAddrSet** 模型定义 + - **EIPId** (str) - EIP资源Id + + **UnetShareBandwidthSet** + + - **BandwidthGuarantee** (int) - 共享带宽保底值(后付费) + - **ChargeType** (str) - 付费方式, 预付费:Year 按年,Month 按月,Dynamic 按需;后付费:PostPay(按月) + - **CreateTime** (int) - 创建时间, 格式为Unix Timestamp + - **EIPSet** (list) - 见 **EIPSetData** 模型定义 + - **ExpireTime** (int) - 过期时间, 格式为Unix Timestamp + - **Name** (str) - 共享带宽名称 + - **PostPayStartTime** (int) - 共享带宽后付费开始计费时间(后付费) + - **ShareBandwidth** (int) - 共享带宽值(预付费)/共享带宽峰值(后付费), 单位Mbps + - **ShareBandwidthId** (str) - 共享带宽的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("DescribeShareBandwidth", d, **kwargs) + return apis.DescribeShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def describe_vip(self, req=None, **kwargs): + """ DescribeVIP - 获取内网VIP详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - 业务组 + - **SubnetId** (str) - 子网id,不指定则获取VPCId下的所有vip + - **Tag** (str) - 业务组名称, 默认为 Default + - **VPCId** (str) - vpc的id,指定SubnetId时必填 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 内网VIP地址列表 + - **TotalCount** (int) - vip数量 + - **VIPSet** (list) - 见 **VIPDetailSet** 模型定义 + + **Response Model** + + **VIPDetailSet** + + - **CreateTime** (int) - 创建时间 + - **Name** (str) - + - **RealIp** (str) - 真实主机ip + - **SubnetId** (str) - 子网id + - **VIP** (str) - 虚拟ip + - **VIPId** (str) - 虚拟ip id + - **VPCId** (str) - VPC id + - **Zone** (str) - 地域 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVIPRequestSchema().dumps(d) + resp = self.invoke("DescribeVIP", d, **kwargs) + return apis.DescribeVIPResponseSchema().loads(resp)
+ +
[docs] def disassociate_eip_with_share_bandwidth(self, req=None, **kwargs): + """ DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 移出共享带宽后,EIP的外网带宽, 单位为Mbps. 各地域带宽范围如下: 流量计费[1-200],带宽计费[1-800] + - **ShareBandwidthId** (str) - (Required) 共享带宽ID + - **EIPIds** (list) - EIP的资源Id;默认移出该共享带宽下所有的EIP + - **PayMode** (str) - 移出共享带宽后,EIP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; 默认为 "Bandwidth". + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DisassociateEIPWithShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("DisassociateEIPWithShareBandwidth", d, **kwargs) + return apis.DisassociateEIPWithShareBandwidthResponseSchema().loads( + resp + )
+ +
[docs] def get_eip_pay_mode(self, req=None, **kwargs): + """ GetEIPPayMode - 获取弹性IP计费模式 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **EIPId** (list) - (Required) 弹性IP的资源Id + + **Response** + + - **EIPPayMode** (list) - 见 **EIPPayModeSet** 模型定义 + + **Response Model** + + **EIPPayModeSet** + + - **EIPId** (str) - EIP的资源ID + - **EIPPayMode** (str) - EIP的计费模式. 枚举值为:Bandwidth, 带宽计费;Traffic, 流量计费; "ShareBandwidth",共享带宽模式 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetEIPPayModeRequestSchema().dumps(d) + resp = self.invoke("GetEIPPayMode", d, **kwargs) + return apis.GetEIPPayModeResponseSchema().loads(resp)
+ +
[docs] def get_eip_price(self, req=None, **kwargs): + """ GetEIPPrice - 获取弹性IP价格 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [0-800] + - **OperatorName** (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International,泉州为移动单线cn-qz:ChinaMobile + - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按时付费; 默认为获取三种价格 + - **PayMode** (str) - 弹性IP计费方式r. 枚举值为: Traffic, 流量计费; Bandwidth, 带宽计费; "ShareBandwidth",共享带宽模式. 默认为Bandwidth + - **Quantity** (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末 + + **Response** + + - **PriceSet** (list) - 见 **EIPPriceDetailSet** 模型定义 + + **Response Model** + + **EIPPriceDetailSet** + + - **ChargeType** (str) - 弹性IP付费方式 + - **Price** (float) - 弹性IP价格, 单位"元" + - **PurchaseValue** (int) - 资源有效期, 以Unix Timestamp表示 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetEIPPriceRequestSchema().dumps(d) + resp = self.invoke("GetEIPPrice", d, **kwargs) + return apis.GetEIPPriceResponseSchema().loads(resp)
+ +
[docs] def get_eip_upgrade_price(self, req=None, **kwargs): + """ GetEIPUpgradePrice - 获取弹性IP带宽改动价格 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [1-800] + - **EIPId** (str) - (Required) 弹性IP的资源ID + + **Response** + + - **Price** (float) - 调整带宽后的EIP价格, 单位为"元", 如需退费此处为负值 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetEIPUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("GetEIPUpgradePrice", d, **kwargs) + return apis.GetEIPUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def grant_firewall(self, req=None, **kwargs): + """ GrantFirewall - 将防火墙应用到资源上 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙资源ID + - **ResourceId** (str) - (Required) 所应用资源ID + - **ResourceType** (str) - (Required) 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:"unatgw",NAT网关; "uhost",云主机; "upm",物理云主机; "hadoophost",hadoop节点; "fortresshost",堡垒机; "udhost",私有专区主机;"udockhost",容器;"dbaudit",数据库审计,”uni“,虚拟网卡。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GrantFirewallRequestSchema().dumps(d) + resp = self.invoke("GrantFirewall", d, **kwargs) + return apis.GrantFirewallResponseSchema().loads(resp)
+ +
[docs] def modify_eip_bandwidth(self, req=None, **kwargs): + """ ModifyEIPBandwidth - 调整弹性IP的外网带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 各地域的带宽值范围如下:流量计费[1-200],带宽计费[1-800] + - **EIPId** (str) - (Required) 弹性IP的资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyEIPBandwidthRequestSchema().dumps(d) + resp = self.invoke("ModifyEIPBandwidth", d, **kwargs) + return apis.ModifyEIPBandwidthResponseSchema().loads(resp)
+ +
[docs] def modify_eip_weight(self, req=None, **kwargs): + """ ModifyEIPWeight - 修改弹性IP的外网出口权重 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) 弹性IP的资源ID + - **Weight** (int) - (Required) 外网出口权重, 范围[0-100] 取值为0时, 该弹性IP不会被使用. 取值为100时, 同主机下只会使用这个弹性IP,其他弹性IP不会被使用 请勿将多个绑定在同一资源的弹性IP设置为相同权重 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyEIPWeightRequestSchema().dumps(d) + resp = self.invoke("ModifyEIPWeight", d, **kwargs) + return apis.ModifyEIPWeightResponseSchema().loads(resp)
+ +
[docs] def release_eip(self, req=None, **kwargs): + """ ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态. + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) 弹性IP的资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseEIPRequestSchema().dumps(d) + resp = self.invoke("ReleaseEIP", d, **kwargs) + return apis.ReleaseEIPResponseSchema().loads(resp)
+ +
[docs] def release_share_bandwidth(self, req=None, **kwargs): + """ ReleaseShareBandwidth - 关闭共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPBandwidth** (int) - (Required) 关闭共享带宽后,各EIP恢复为的带宽值 + - **ShareBandwidthId** (str) - (Required) 共享带宽ID + - **PayMode** (str) - Bandwidth 带宽计费, Traffic 转流量计费 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("ReleaseShareBandwidth", d, **kwargs) + return apis.ReleaseShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def release_vip(self, req=None, **kwargs): + """ ReleaseVIP - 释放VIP资源 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **VIPId** (str) - (Required) 内网VIP的id + - **Zone** (str) - 可用区 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseVIPRequestSchema().dumps(d) + resp = self.invoke("ReleaseVIP", d, **kwargs) + return apis.ReleaseVIPResponseSchema().loads(resp)
+ +
[docs] def resize_share_bandwidth(self, req=None, **kwargs): + """ ResizeShareBandwidth - 调整共享带宽的带宽值 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ShareBandwidth** (int) - (Required) 带宽值,单位为Mb,范围 [20-5000] (最大值受地域限制) + - **ShareBandwidthId** (str) - (Required) 共享带宽的Id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("ResizeShareBandwidth", d, **kwargs) + return apis.ResizeShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def set_eip_pay_mode(self, req=None, **kwargs): + """ SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费. + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 调整的目标带宽值, 单位Mbps. 各地域的带宽值范围如下: 流量计费[1-200],其余情况[1-800] + - **EIPId** (str) - (Required) 弹性IP的资源Id + - **PayMode** (str) - (Required) 计费模式. 枚举值:"Traffic", 流量计费模式; "Bandwidth", 带宽计费模式 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SetEIPPayModeRequestSchema().dumps(d) + resp = self.invoke("SetEIPPayMode", d, **kwargs) + return apis.SetEIPPayModeResponseSchema().loads(resp)
+ +
[docs] def un_bind_eip(self, req=None, **kwargs): + """ UnBindEIP - 将弹性IP从资源上解绑 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) 弹性IP的资源Id + - **ResourceId** (str) - (Required) 弹性IP请求解绑的资源ID + - **ResourceType** (str) - (Required) 弹性IP请求解绑的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:NAT网关;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni,虚拟网卡。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UnBindEIPRequestSchema().dumps(d) + resp = self.invoke("UnBindEIP", d, **kwargs) + return apis.UnBindEIPResponseSchema().loads(resp)
+ +
[docs] def update_eip_attribute(self, req=None, **kwargs): + """ UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) EIP资源ID + - **Name** (str) - 名字(Name Tag Remark都为空则报错) + - **Remark** (str) - 备注 + - **Tag** (str) - 业务 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateEIPAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateEIPAttribute", d, **kwargs) + return apis.UpdateEIPAttributeResponseSchema().loads(resp)
+ +
[docs] def update_firewall(self, req=None, **kwargs): + """ UpdateFirewall - 更新防火墙规则 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙资源ID + - **Rule** (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注 + + **Response** + + - **FWId** (str) - 防火墙id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateFirewallRequestSchema().dumps(d) + resp = self.invoke("UpdateFirewall", d, **kwargs) + return apis.UpdateFirewallResponseSchema().loads(resp)
+ +
[docs] def update_firewall_attribute(self, req=None, **kwargs): + """ UpdateFirewallAttribute - 更新防火墙规则 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙资源ID + - **Name** (str) - 防火墙名称,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 + - **Remark** (str) - 防火墙备注,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 + - **Tag** (str) - 防火墙业务组,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateFirewallAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateFirewallAttribute", d, **kwargs) + return apis.UpdateFirewallAttributeResponseSchema().loads(resp)
+ + _deprecated = { + "allocate_e_ip": "allocate_eip", + "associate_e_ip_with_share_bandwidth": "associate_eip_with_share_bandwidth", + "bind_e_ip": "bind_eip", + "describe_e_ip": "describe_eip", + "disassociate_e_ip_with_share_bandwidth": "disassociate_eip_with_share_bandwidth", + "get_e_ip_pay_mode": "get_eip_pay_mode", + "get_e_ip_price": "get_eip_price", + "get_e_ip_upgrade_price": "get_eip_upgrade_price", + "modify_e_ip_bandwidth": "modify_eip_bandwidth", + "modify_e_ip_weight": "modify_eip_weight", + "release_e_ip": "release_eip", + "set_e_ip_pay_mode": "set_eip_pay_mode", + "un_bind_e_ip": "un_bind_eip", + "update_e_ip_attribute": "update_eip_attribute", + "release_v_ip": "release_vip", + "allocate_v_ip": "allocate_vip", + "describe_v_ip": "describe_vip", + } + + def __getattr__(self, item): + if item in self._deprecated: + instead_of = self._deprecated[item] + msg = "the method {} is deprecated, please use {} instead, this method will remove after 0.5.0 version" + self.logger.warning(msg.format(item, instead_of)) + return getattr(self, self._deprecated[item]) + raise AttributeError( + "'{}' object has no attribute '{}'".format( + self.__class__.__name__, item + ) + )
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/uphost/client.html b/_modules/ucloud/services/uphost/client.html new file mode 100644 index 0000000..09c09b9 --- /dev/null +++ b/_modules/ucloud/services/uphost/client.html @@ -0,0 +1,457 @@ + + + + + + + + ucloud.services.uphost.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uphost.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uphost.schemas import apis
+
+
+
[docs]class UPHostClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UPHostClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def create_phost(self, req=None, **kwargs): + """ CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - (Required) 镜像ID。 请通过 [DescribePHostImage]获取 + - **Password** (str) - (Required) 密码(密码需使用base64进行编码) + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - 计费模式,枚举值为:year, 按年付费; month,按月付费;dynamic,按需付费,(需开启权限) trial, 试用(需开启权限)。默认为按月付费 + - **Cluster** (str) - 网络环境,可选千兆:1G ,万兆:10G, 默认1G + - **Count** (int) - 购买数量,默认为1,(暂不支持) + - **CouponId** (str) - 代金券 + - **Name** (str) - 物理机名称,默认为phost + - **Quantity** (str) - 购买时长,默认为1,范围[1-10] + - **Raid** (str) - Raid配置,默认Raid10 支持:Raid0、Raid1、Raid5、Raid10,NoRaid + - **Remark** (str) - 物理机备注,默认为空 + - **SecurityGroupId** (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 `DescribeSecurityGroup <https://docs.ucloud.cn/api/unet-api/describe_security_group.html>`_ + - **SubnetId** (str) - 子网ID,不填为默认,VPC2.0下需要填写此字段。 + - **Tag** (str) - 业务组,默认为default + - **Type** (str) - 物理机类型,默认为:db-2(基础型-SAS-V3) + - **VPCId** (str) - VPC ID,不填为默认,VPC2.0下需要填写此字段。 + + **Response** + + - **PHostId** (list) - PHost的资源ID数组 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreatePHostRequestSchema().dumps(d) + resp = self.invoke("CreatePHost", d, **kwargs) + return apis.CreatePHostResponseSchema().loads(resp)
+ +
[docs] def describe_phost(self, req=None, **kwargs): + """ DescribePHost - 获取物理机详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度,默认为20 + - **Offset** (int) - 数据偏移量,默认为0 + - **PHostId** (list) - PHost资源ID,若为空,则返回当前Region所有PHost。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostSet** (list) - 见 **PHostSet** 模型定义 + - **TotalCount** (int) - 满足条件的PHost总数 + + **Response Model** + + **PHostCPUSet** + + - **CoreCount** (int) - CPU核数 + - **Count** (int) - CPU个数 + - **Frequence** (float) - CPU主频 + - **Model** (str) - CPU型号 + + **PHostDiskSet** + + - **Count** (int) - 磁盘数量 + - **IOCap** (int) - 磁盘IO性能,单位MB/s(待废弃) + - **Name** (str) - 磁盘名称,sys/data + - **Space** (int) - 单盘大小,单位GB + - **Type** (str) - 磁盘属性 + + **PHostIPSet** + + - **Bandwidth** (int) - IP对应带宽,单位Mb,内网IP不显示带宽信息 + - **IPAddr** (str) - IP地址, + - **IPId** (str) - IP资源ID(内网IP无资源ID)(待废弃) + - **MACAddr** (str) - MAC地址 + - **OperatorName** (str) - 国际: Internation, BGP: BGP, 内网: Private + - **SubnetId** (str) - 子网ID + - **VPCId** (str) - VPC ID + + **PHostSet** + + - **AutoRenew** (str) - 自动续费 + - **CPUSet** (dict) - 见 **PHostCPUSet** 模型定义 + - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限)默认为月付 + - **Cluster** (str) - 网络环境。枚举值:千兆:1G ,万兆:10G + - **Components** (str) - 组件信息(暂不支持) + - **CreateTime** (int) - 创建时间 + - **DiskSet** (list) - 见 **PHostDiskSet** 模型定义 + - **ExpireTime** (int) - 到期时间 + - **IPSet** (list) - 见 **PHostIPSet** 模型定义 + - **ImageName** (str) - 镜像名称 + - **IsSupportKVM** (str) - 是否支持紧急登录 + - **Memory** (int) - 内存大小,单位:MB + - **Name** (str) - 物理机名称 + - **OSType** (str) - 操作系统类型 + - **OSname** (str) - 操作系统名称 + - **PHostId** (str) - PHost资源ID + - **PHostType** (str) - 物理机类型,参见DescribePHostMachineType返回值 + - **PMStatus** (str) - 物理云主机状态。枚举值:\\ > 初始化:Initializing; \\ > 启动中:Starting; \\ > 运行中:Running;\\ > 关机中:Stopping; \\ > 安装失败:InstallFailed; \\ > 重启中:Rebooting;\\ > 关机:Stopped; + - **PowerState** (str) - 电源状态,on 或 off + - **RaidSupported** (str) - 是否支持Raid。枚举值:Yes:支持;No:不支持。 + - **Remark** (str) - 物理机备注 + - **SN** (str) - 物理机序列号 + - **Tag** (str) - 业务组 + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribePHostRequestSchema().dumps(d) + resp = self.invoke("DescribePHost", d, **kwargs) + return apis.DescribePHostResponseSchema().loads(resp)
+ +
[docs] def describe_phost_image(self, req=None, **kwargs): + """ DescribePHostImage - 获取物理云主机镜像列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (list) - 镜像ID + - **ImageType** (str) - 镜像类别,枚举为:Base,标准镜像;默认为标准镜像。 + - **Limit** (int) - 返回数据长度,默认为20 + - **Offset** (int) - 数据偏移量,默认为0 + + **Response** + + - **ImageSet** (list) - 见 **PHostImageSet** 模型定义 + - **TotalCount** (int) - 满足条件的镜像总数 + + **Response Model** + + **PHostImageSet** + + - **ImageId** (str) - 镜像ID + - **ImageName** (str) - 镜像名称 + - **OsName** (str) - 操作系统名称 + - **OsType** (str) - 操作系统类型 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribePHostImageRequestSchema().dumps(d) + resp = self.invoke("DescribePHostImage", d, **kwargs) + return apis.DescribePHostImageResponseSchema().loads(resp)
+ +
[docs] def describe_phost_tags(self, req=None, **kwargs): + """ DescribePHostTags - 获取物理机tag列表(业务组) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TagSet** (list) - 见 **PHostTagSet** 模型定义 + - **TotalCount** (int) - Tag的个数 + + **Response Model** + + **PHostTagSet** + + - **Tag** (str) - 业务组名称 + - **TotalCount** (int) - 该业务组中包含的主机个数 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribePHostTagsRequestSchema().dumps(d) + resp = self.invoke("DescribePHostTags", d, **kwargs) + return apis.DescribePHostTagsResponseSchema().loads(resp)
+ +
[docs] def get_phost_price(self, req=None, **kwargs): + """ GetPHostPrice - 获取物理机价格列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - (Required) 计费模式,枚举值为: Year/Month/Trial/Dynamic + - **Count** (int) - (Required) 购买数量,范围[1-5] + - **Quantity** (int) - (Required) 购买时长,1-10个月或1-10年 + - **Cluster** (str) - 网络环境,可选千兆:1G ,万兆:10G + - **Type** (str) - 默认为:DB(数据库型) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PriceSet** (list) - 见 **PHostPriceSet** 模型定义 + + **Response Model** + + **PHostPriceSet** + + - **ChargeType** (str) - Year/Month/Trial/Dynamic + - **Price** (float) - 价格, 单位:元, 保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetPHostPriceRequestSchema().dumps(d) + resp = self.invoke("GetPHostPrice", d, **kwargs) + return apis.GetPHostPriceResponseSchema().loads(resp)
+ +
[docs] def modify_phost_info(self, req=None, **kwargs): + """ ModifyPHostInfo - 更改物理机信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) 物理机资源ID + - **Name** (str) - 物理机名称,默认不更改 + - **Remark** (str) - 物理机备注,默认不更改 + - **Tag** (str) - 业务组,默认不更改 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyPHostInfoRequestSchema().dumps(d) + resp = self.invoke("ModifyPHostInfo", d, **kwargs) + return apis.ModifyPHostInfoResponseSchema().loads(resp)
+ +
[docs] def poweroff_phost(self, req=None, **kwargs): + """ PoweroffPHost - 断电物理云主机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PoweroffPHostRequestSchema().dumps(d) + resp = self.invoke("PoweroffPHost", d, **kwargs) + return apis.PoweroffPHostResponseSchema().loads(resp)
+ +
[docs] def reboot_phost(self, req=None, **kwargs): + """ RebootPHost - 重启物理机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RebootPHostRequestSchema().dumps(d) + resp = self.invoke("RebootPHost", d, **kwargs) + return apis.RebootPHostResponseSchema().loads(resp)
+ +
[docs] def reinstall_phost(self, req=None, **kwargs): + """ ReinstallPHost - 重装物理机操作系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Password** (str) - (Required) 密码 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - 镜像Id,参考镜像列表,默认使用原镜像 + - **Name** (str) - 物理机名称,默认不更改 + - **Raid** (str) - 不保留数据盘重装,可选Raid + - **Remark** (str) - 物理机备注,默认为不更改。 + - **ReserveDisk** (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes + - **Tag** (str) - 业务组,默认不更改。 + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReinstallPHostRequestSchema().dumps(d) + resp = self.invoke("ReinstallPHost", d, **kwargs) + return apis.ReinstallPHostResponseSchema().loads(resp)
+ +
[docs] def start_phost(self, req=None, **kwargs): + """ StartPHost - 启动物理机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StartPHostRequestSchema().dumps(d) + resp = self.invoke("StartPHost", d, **kwargs) + return apis.StartPHostResponseSchema().loads(resp)
+ +
[docs] def terminate_phost(self, req=None, **kwargs): + """ TerminatePHost - 删除物理云主机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **ReleaseEIP** (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.TerminatePHostRequestSchema().dumps(d) + resp = self.invoke("TerminatePHost", d, **kwargs) + return apis.TerminatePHostResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/usms/client.html b/_modules/ucloud/services/usms/client.html new file mode 100644 index 0000000..ddaec03 --- /dev/null +++ b/_modules/ucloud/services/usms/client.html @@ -0,0 +1,385 @@ + + + + + + + + ucloud.services.usms.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.usms.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.usms.schemas import apis
+
+
+
[docs]class USMSClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(USMSClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_usms_signature(self, req=None, **kwargs): + """ CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **CertificateType** (int) - (Required) 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书; + - **Description** (str) - (Required) 短信签名申请原因 + - **File** (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB + - **SigContent** (str) - (Required) 短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加 + - **SigPurpose** (int) - (Required) 签名用途,0-自用,1-他用; + - **SigType** (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称; + - **ProxyFile** (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项; + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + - **SigContent** (str) - 短信签名名称 + - **SigId** (str) - 短信签名ID(短信签名申请时的工单ID) + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.CreateUSMSSignatureRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUSMSSignature", d, **kwargs) + return apis.CreateUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def create_usms_template(self, req=None, **kwargs): + """ CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Purpose** (int) - (Required) 短信模板用途类型:1-验证码类短信模板;2-系统通知类短信模板;3-会员推广类短信模板; + - **Template** (str) - (Required) 短信模板内容,说明如下:字数不超过500,每个中文、符号、英文、数组等都计为一个字;模板中的变量填写格式:{N},其中N为大于1的整数,有多个参数时,建议N从1开始顺次,例如:{1}、{2}等;短信模板禁止仅包括变量的情况; + - **TemplateName** (str) - (Required) 短信模板名称,不超过32个字符,每个中文、符号、英文、数字等都计为1个字。 + - **Remark** (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。 + - **UnsubscribeInfo** (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + - **TemplateId** (str) - 短信模板ID(短信模板申请时的工单ID) + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUSMSTemplateRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUSMSTemplate", d, **kwargs) + return apis.CreateUSMSTemplateResponseSchema().loads(resp)
+ +
[docs] def delete_usms_signature(self, req=None, **kwargs): + """ DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **SigIds** (list) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1...SigIds.N方式传入 + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteUSMSSignatureRequestSchema().dumps(d) + resp = self.invoke("DeleteUSMSSignature", d, **kwargs) + return apis.DeleteUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def delete_usms_template(self, req=None, **kwargs): + """ DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **TemplateIds** (list) - (Required) 模板ID(也即短信模板申请时的工单ID),支持以数组的方式,举例,以TemplateIds.0、TemplateIds.1...TemplateIds.N方式传入 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUSMSTemplateRequestSchema().dumps(d) + resp = self.invoke("DeleteUSMSTemplate", d, **kwargs) + return apis.DeleteUSMSTemplateResponseSchema().loads(resp)
+ +
[docs] def get_usms_send_receipt(self, req=None, **kwargs): + """ GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SessionNoSet** (list) - (Required) 发送短信时返回的SessionNo集合,SessionNoSet.0,SessionNoSet.1....格式 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Data** (list) - 见 **ReceiptPerSession** 模型定义 + - **Message** (str) - 错误描述 + + **Response Model** + + **ReceiptPerPhone** + + - **CostCount** (int) - 消耗短信条数 + - **Phone** (str) - 手机号码 + - **ReceiptDesc** (str) - 回执结果描述 + - **ReceiptResult** (str) - 回执结果 + - **ReceiptTime** (int) - 回执返回时间 + + **ReceiptPerSession** + + - **ReceiptSet** (list) - 见 **ReceiptPerPhone** 模型定义 + - **SessionNo** (str) - 发送短信时返回的SessionNo + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUSMSSendReceiptRequestSchema().dumps(d) + resp = self.invoke("GetUSMSSendReceipt", d, **kwargs) + return apis.GetUSMSSendReceiptResponseSchema().loads(resp)
+ +
[docs] def query_usms_signature(self, req=None, **kwargs): + """ QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **SigContent** (str) - 签名内容;签名ID和签名至少需填写1项; + - **SigId** (str) - 已申请的短信签名ID(短信签名申请时的工单ID);签名ID和签名至少需填写1项; + + **Response** + + - **Data** (dict) - 见 **OutSignature** 模型定义 + - **Message** (str) - 发生错误时,表示具体错误描述 + + **Response Model** + + **OutSignature** + + - **ErrDesc** (str) - 签名审核失败原因 + - **SigContent** (str) - 签名内容 + - **SigId** (str) - 签名ID + - **Status** (int) - 签名状态。0-待审核 1-审核中 2-审核通过 3-审核未通过 4-被禁用 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.QueryUSMSSignatureRequestSchema().dumps(d) + resp = self.invoke("QueryUSMSSignature", d, **kwargs) + return apis.QueryUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def query_usms_template(self, req=None, **kwargs): + """ QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **TemplateId** (str) - (Required) 模板ID + + **Response** + + - **Data** (dict) - 见 **OutTemplate** 模型定义 + - **Message** (str) - 当RetCode不为0时,Message中显示具体错误描述 + + **Response Model** + + **OutTemplate** + + - **CreateTime** (int) - 创建时间 + - **ErrDesc** (str) - 审核失败原因 + - **Purpose** (int) - 模板类型,选项:1-验证码类 2-通知类 3-会员推广类 + - **Remark** (str) - 模板说明 + - **Status** (int) - 短信模板状态;状态说明:0-待审核,1-审核中,2-审核通过,3-审核未通过,4-被禁用 + - **Template** (str) - 短信模板内容 + - **TemplateId** (str) - 短信模板ID + - **TemplateName** (str) - 短信模板名称 + - **UnsubscribeInfo** (str) - 退订信息;一般填写方式“回T退订”,当purpose为3(也即会员推广类)时,为必填项 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.QueryUSMSTemplateRequestSchema().dumps(d) + resp = self.invoke("QueryUSMSTemplate", d, **kwargs) + return apis.QueryUSMSTemplateResponseSchema().loads(resp)
+ +
[docs] def send_usms_message(self, req=None, **kwargs): + """ SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PhoneNumbers** (list) - (Required) 电话号码数组,电话号码格式为(60)1xxxxxxxx,()中为国际长途区号(如中国为86或0086,两种格式都支持),后面为电话号码.若不传入国际区号,如1851623xxxx,则默认为国内手机号 + - **TemplateId** (str) - (Required) 模板ID。若指定的模板ID审核未通过(status不等于2)则不允许发送 + - **TemplateParams** (list) - (Required) 模板参数数组,以TempalteParams.0,TempalteParams.1.。。格式。若模板ID指定的模板无可变参数,则不传入该参数。模板参数个数与模板不匹配,则不允许发送 + - **SigContent** (str) - 使用的签名,如果不输入则使用默认签名,若没有申请默认签名不允许发送;若输入的签名没有申请,则无法发送 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Action** (str) - 操作名称 + - **Message** (str) - 发生错误时表示错误描述 + - **RetCode** (int) - 返回码 + - **SessionNo** (str) - 本次提交发送的短信的唯一ID,可根据该值查询本次发送的短信列表 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SendUSMSMessageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("SendUSMSMessage", d, **kwargs) + return apis.SendUSMSMessageResponseSchema().loads(resp)
+ +
[docs] def update_usms_signature(self, req=None, **kwargs): + """ UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **File** (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB + - **SigContent** (str) - (Required) 新的短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加 + - **SigId** (str) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1...SigIds.N方式传入 + - **SigPurpose** (int) - (Required) 签名用途,0-自用,1-他用; + - **SigType** (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称; + - **CertificateType** (int) - 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书; + - **ProxyFile** (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项; + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.UpdateUSMSSignatureRequestSchema().dumps(d) + resp = self.invoke("UpdateUSMSSignature", d, **kwargs) + return apis.UpdateUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def update_usms_template(self, req=None, **kwargs): + """ UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Template** (str) - (Required) 新的模板内容。模板名称和模板内容必须提供一个,否则会报错。小于等于600个字 + - **TemplateId** (str) - (Required) 短信模板ID + - **Remark** (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。 + - **TemplateName** (str) - 新的模板名称。小于等于32个字,每个中文、英文、数组、符合都计为一个字 + - **UnsubscribeInfo** (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 发生错误时表示错误描述 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUSMSTemplateRequestSchema().dumps(d) + resp = self.invoke("UpdateUSMSTemplate", d, **kwargs) + return apis.UpdateUSMSTemplateResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/_modules/ucloud/services/vpc/client.html b/_modules/ucloud/services/vpc/client.html new file mode 100644 index 0000000..1a41845 --- /dev/null +++ b/_modules/ucloud/services/vpc/client.html @@ -0,0 +1,640 @@ + + + + + + + + ucloud.services.vpc.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.vpc.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.vpc.schemas import apis
+
+
+
[docs]class VPCClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(VPCClient, self).__init__(config, transport, middleware, logger) + +
[docs] def add_vpc_network(self, req=None, **kwargs): + """ AddVPCNetwork - 添加VPC网段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Network** (list) - (Required) 增加网段 + - **VPCId** (str) - (Required) 源VPC短ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AddVPCNetworkRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AddVPCNetwork", d, **kwargs) + return apis.AddVPCNetworkResponseSchema().loads(resp)
+ +
[docs] def associate_route_table(self, req=None, **kwargs): + """ AssociateRouteTable - 绑定子网的路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 路由表ID,仅限自定义路由表 + - **SubnetId** (str) - (Required) 子网ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AssociateRouteTableRequestSchema().dumps(d) + resp = self.invoke("AssociateRouteTable", d, **kwargs) + return apis.AssociateRouteTableResponseSchema().loads(resp)
+ +
[docs] def clone_route_table(self, req=None, **kwargs): + """ CloneRouteTable - 根据一张现有路由表复制一张新的路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 被克隆的路由表ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CloneRouteTableRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CloneRouteTable", d, **kwargs) + return apis.CloneRouteTableResponseSchema().loads(resp)
+ +
[docs] def create_route_table(self, req=None, **kwargs): + """ CreateRouteTable - 创建路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VPCId** (str) - (Required) VPC ID + - **Name** (str) - 路由表名称 Default RouteTable + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组 + + **Response** + + - **RouteTableId** (str) - 路由表ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateRouteTableRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateRouteTable", d, **kwargs) + return apis.CreateRouteTableResponseSchema().loads(resp)
+ +
[docs] def create_subnet(self, req=None, **kwargs): + """ CreateSubnet - 创建子网 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Subnet** (str) - (Required) 子网网络地址,例如192.168.0.0 + - **VPCId** (str) - (Required) VPC资源ID + - **Netmask** (int) - 子网网络号位数,默认为24 + - **Remark** (str) - 备注 + - **SubnetName** (str) - 子网名称,默认为Subnet + - **Tag** (str) - 业务组名称,默认为Default + + **Response** + + - **SubnetId** (str) - 子网ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateSubnetRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateSubnet", d, **kwargs) + return apis.CreateSubnetResponseSchema().loads(resp)
+ +
[docs] def create_vpc(self, req=None, **kwargs): + """ CreateVPC - 创建VPC + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) VPC名称 + - **Network** (list) - (Required) VPC网段 + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组名称 + - **Type** (int) - VPC类型 + + **Response** + + - **VPCId** (str) - VPC资源Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateVPCRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateVPC", d, **kwargs) + return apis.CreateVPCResponseSchema().loads(resp)
+ +
[docs] def create_vpc_intercom(self, req=None, **kwargs): + """ CreateVPCIntercom - 新建VPC互通关系 + + **Request** + + - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DstVPCId** (str) - (Required) 目的VPC短ID + - **VPCId** (str) - (Required) 源VPC短ID + - **DstProjectId** (str) - 目的VPC项目ID。默认与源VPC同项目。 + - **DstRegion** (str) - 目的VPC所在地域,默认与源VPC同地域。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateVPCIntercomRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateVPCIntercom", d, **kwargs) + return apis.CreateVPCIntercomResponseSchema().loads(resp)
+ +
[docs] def delete_route_table(self, req=None, **kwargs): + """ DeleteRouteTable - 删除自定义路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 路由ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteRouteTableRequestSchema().dumps(d) + resp = self.invoke("DeleteRouteTable", d, **kwargs) + return apis.DeleteRouteTableResponseSchema().loads(resp)
+ +
[docs] def delete_subnet(self, req=None, **kwargs): + """ DeleteSubnet - 删除子网 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SubnetId** (str) - (Required) 子网ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteSubnetRequestSchema().dumps(d) + resp = self.invoke("DeleteSubnet", d, **kwargs) + return apis.DeleteSubnetResponseSchema().loads(resp)
+ +
[docs] def delete_vpc(self, req=None, **kwargs): + """ DeleteVPC - 删除VPC + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VPCId** (str) - (Required) VPC资源Id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteVPCRequestSchema().dumps(d) + resp = self.invoke("DeleteVPC", d, **kwargs) + return apis.DeleteVPCResponseSchema().loads(resp)
+ +
[docs] def delete_vpc_intercom(self, req=None, **kwargs): + """ DeleteVPCIntercom - 删除VPC互通关系 + + **Request** + + - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DstVPCId** (str) - (Required) 目的VPC短ID + - **VPCId** (str) - (Required) 源VPC短ID + - **DstProjectId** (str) - 目的VPC所在项目ID,默认为源VPC所在项目ID + - **DstRegion** (str) - 目的VPC所在地域,默认为源VPC所在地域 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteVPCIntercomRequestSchema().dumps(d) + resp = self.invoke("DeleteVPCIntercom", d, **kwargs) + return apis.DeleteVPCIntercomResponseSchema().loads(resp)
+ +
[docs] def describe_route_table(self, req=None, **kwargs): + """ DescribeRouteTable - 获取路由表详细信息(包括路由策略) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - 业务组ID + - **Limit** (int) - Limit + - **OffSet** (int) - OffSet + - **RouteTableId** (str) - 路由表ID + - **VPCId** (str) - VPC ID + + **Response** + + - **RouteTables** (list) - 见 **RouteTableInfo** 模型定义 + - **TotalCount** (int) - RouteTables字段的数量 + + **Response Model** + + **RouteRuleInfo** + + - **DstAddr** (str) - 目的地址,比如10.10.8/24 + - **NexthopId** (str) - 路由下一跳ID,比如uvnet-3eljvj + - **NexthopType** (str) - 下一跳类型,比如local、vnet + - **Remark** (str) - 路由规则备注 + - **RouteRuleId** (str) - 规则ID + - **RuleType** (int) - 路由规则类型(0表示系统路由,1表示自定义路由) + + **RouteTableInfo** + + - **CreateTime** (int) - 创建时间戳 + - **Remark** (str) - 路由表备注 + - **RouteRules** (list) - 见 **RouteRuleInfo** 模型定义 + - **RouteTableId** (str) - 路由表ID + - **RouteTableType** (int) - 路由表类型,1为默认,0为自定义 + - **SubnetCount** (str) - 绑定了该路由表的子网数量 + - **Tag** (str) - 业务组 + - **VPCId** (str) - 路由表所属vpc + - **VPCName** (str) - vpc名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeRouteTableRequestSchema().dumps(d) + resp = self.invoke("DescribeRouteTable", d, **kwargs) + return apis.DescribeRouteTableResponseSchema().loads(resp)
+ +
[docs] def describe_subnet(self, req=None, **kwargs): + """ DescribeSubnet - 获取子网信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - 业务组 + - **Limit** (int) - 列表长度,默认为20 + - **Offset** (int) - 偏移量,默认为0 + - **RouteTableId** (str) - 路由表Id + - **ShowAvailableIPs** (bool) - 是否返回子网的可用IP数,true为是,false为否,默认不返回 + - **SubnetId** (str) - 子网id,适用于一次查询一个子网信息 + - **SubnetIds** (list) - 子网id数组,适用于一次查询多个子网信息 + - **Tag** (str) - 业务组名称,默认为Default + - **VPCId** (str) - VPC资源id + + **Response** + + - **DataSet** (list) - 见 **SubnetInfo** 模型定义 + - **TotalCount** (int) - 子网总数量 + + **Response Model** + + **SubnetInfo** + + - **AvailableIPs** (int) - 可用IP数量 + - **CreateTime** (int) - 创建时间 + - **Gateway** (str) - 子网网关 + - **HasNATGW** (bool) - 是否有natgw + - **IPv6Network** (str) - 子网关联的IPv6网段 + - **Netmask** (str) - 子网掩码 + - **Remark** (str) - 备注 + - **RouteTableId** (str) - 路由表Id + - **Subnet** (str) - 子网网段 + - **SubnetId** (str) - 子网Id + - **SubnetName** (str) - 子网名称 + - **SubnetType** (int) - 子网类型 + - **Tag** (str) - 业务组 + - **VPCId** (str) - VPCId + - **VPCName** (str) - VPC名称 + - **Zone** (str) - 可用区名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeSubnetRequestSchema().dumps(d) + resp = self.invoke("DescribeSubnet", d, **kwargs) + return apis.DescribeSubnetResponseSchema().loads(resp)
+ +
[docs] def describe_subnet_resource(self, req=None, **kwargs): + """ DescribeSubnetResource - 展示子网资源 + **Request** + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SubnetId** (str) - (Required) 子网id + - **Limit** (int) - 单页返回数据长度,默认为20 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **ResourceType** (str) - 资源类型,默认为全部资源类型。枚举值为:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP. + + **Response** + - **DataSet** (list) - 见 **SubnetResource** 模型定义 + - **TotalCount** (int) - 总数 + + **Response Model** + + **SubnetResource** + + - **IP** (str) - 资源ip + - **IPv6Address** (str) - 资源的IPv6地址 + - **Name** (str) - 资源名称 + - **ResourceId** (str) - 资源Id + - **ResourceType** (str) - 资源类型。对应的资源类型:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP. + - **SubResourceId** (str) - 资源绑定的虚拟网卡的实例ID + - **SubResourceName** (str) - 资源绑定的虚拟网卡的实例名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡的类型 + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeSubnetResourceRequestSchema().dumps(d) + resp = self.invoke("DescribeSubnetResource", d, **kwargs) + return apis.DescribeSubnetResourceResponseSchema().loads(resp)
+ +
[docs] def describe_vpc(self, req=None, **kwargs): + """ DescribeVPC - 获取VPC信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - + - **Offset** (int) - + - **Tag** (str) - 业务组名称 + - **VPCIds** (list) - VPCId + + **Response** + + - **DataSet** (list) - 见 **VPCInfo** 模型定义 + + **Response Model** + + **VPCNetworkInfo** + + - **Network** (str) - vpc地址空间 + - **SubnetCount** (int) - 地址空间中子网数量 + + **VPCInfo** + + - **CreateTime** (int) - + - **IPv6Network** (str) - VPC关联的IPv6网段 + - **Name** (str) - + - **Network** (list) - + - **NetworkInfo** (list) - 见 **VPCNetworkInfo** 模型定义 + - **OperatorName** (str) - VPC关联的IPv6网段所属运营商 + - **SubnetCount** (int) - + - **Tag** (str) - + - **UpdateTime** (int) - + - **VPCId** (str) - VPCId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPCRequestSchema().dumps(d) + resp = self.invoke("DescribeVPC", d, **kwargs) + return apis.DescribeVPCResponseSchema().loads(resp)
+ +
[docs] def describe_vpc_intercom(self, req=None, **kwargs): + """ DescribeVPCIntercom - 获取VPC互通信息 + + **Request** + + - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VPCId** (str) - (Required) VPC短ID + - **DstProjectId** (str) - 目的项目ID,默认为全部项目 + - **DstRegion** (str) - 目的VPC所在地域,默认为全部地域 + + **Response** + + - **DataSet** (list) - 见 **VPCIntercomInfo** 模型定义 + + **Response Model** + + **VPCIntercomInfo** + + - **DstRegion** (str) - 所属地域 + - **Name** (str) - VPC名字 + - **Network** (list) - VPC的地址空间 + - **ProjectId** (str) - 项目Id + - **Tag** (str) - 业务组(未分组显示为 Default) + - **VPCId** (str) - VPCId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPCIntercomRequestSchema().dumps(d) + resp = self.invoke("DescribeVPCIntercom", d, **kwargs) + return apis.DescribeVPCIntercomResponseSchema().loads(resp)
+ +
[docs] def modify_route_rule(self, req=None, **kwargs): + """ ModifyRouteRule - 路由策略增、删、改 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteRule** (list) - (Required) 格式: RouteRuleId | 目的网段 | 下一跳类型 | 下一跳 |优先级| 备注 | 增、删、改标志 (下一跳类型为instance或者vip,下一跳为云主机id或者vip的id,优先级使用0,动作标志为add/delete/update) 。"添加"示例: test_id | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| add (添加的RouteRuleId填任意非空字符串) 。"删除"示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| delete (RouteRuleId来自DescribeRouteTable中) 。“修改”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-cjksa2 | 0 | Default Route Rule| update (RouteRuleId来自DescribeRouteTable中) + - **RouteTableId** (str) - (Required) 通过DescribeRouteTable拿到 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyRouteRuleRequestSchema().dumps(d) + resp = self.invoke("ModifyRouteRule", d, **kwargs) + return apis.ModifyRouteRuleResponseSchema().loads(resp)
+ +
[docs] def update_route_table_attribute(self, req=None, **kwargs): + """ UpdateRouteTableAttribute - 更新路由表基本信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 路由表ID + - **Name** (str) - 名称 + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组名称 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateRouteTableAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateRouteTableAttribute", d, **kwargs) + return apis.UpdateRouteTableAttributeResponseSchema().loads(resp)
+ +
[docs] def update_subnet_attribute(self, req=None, **kwargs): + """ UpdateSubnetAttribute - 更新子网信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SubnetId** (str) - (Required) 子网ID + - **Name** (str) - 子网名称(如果Name不填写,Tag必须填写) + - **Tag** (str) - 业务组名称(如果Tag不填写,Name必须填写) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateSubnetAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateSubnetAttribute", d, **kwargs) + return apis.UpdateSubnetAttributeResponseSchema().loads(resp)
+ +
[docs] def update_vpc_network(self, req=None, **kwargs): + """ UpdateVPCNetwork - 更新VPC网段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Network** (list) - (Required) 需要保留的VPC网段。当前仅支持删除VPC网段,添加网段请参考 `AddVPCNetwork <https://docs.ucloud.cn/api/vpc2.0-api/add_vpc_network>`_ + - **VPCId** (str) - (Required) VPC的ID + + **Response** + + - **Message** (str) - 错误信息 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateVPCNetworkRequestSchema().dumps(d) + resp = self.invoke("UpdateVPCNetwork", d, **kwargs) + return apis.UpdateVPCNetworkResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/contents.rst b/_sources/contents.rst.txt similarity index 100% rename from docs/contents.rst rename to _sources/contents.rst.txt diff --git a/docs/core.rst b/_sources/core.rst.txt similarity index 100% rename from docs/core.rst rename to _sources/core.rst.txt diff --git a/docs/helpers.rst b/_sources/helpers.rst.txt similarity index 100% rename from docs/helpers.rst rename to _sources/helpers.rst.txt diff --git a/docs/index.rst b/_sources/index.rst.txt similarity index 100% rename from docs/index.rst rename to _sources/index.rst.txt diff --git a/docs/quick_start.rst b/_sources/quick_start.rst.txt similarity index 100% rename from docs/quick_start.rst rename to _sources/quick_start.rst.txt diff --git a/docs/services.rst b/_sources/services.rst.txt similarity index 100% rename from docs/services.rst rename to _sources/services.rst.txt diff --git a/docs/usage.rst b/_sources/usage.rst.txt similarity index 100% rename from docs/usage.rst rename to _sources/usage.rst.txt diff --git a/_static/ajax-loader.gif b/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/_static/ajax-loader.gif differ diff --git a/_static/alabaster.css b/_static/alabaster.css new file mode 100644 index 0000000..0eddaeb --- /dev/null +++ b/_static/alabaster.css @@ -0,0 +1,701 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..0807176 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/comment-bright.png b/_static/comment-bright.png new file mode 100644 index 0000000..15e27ed Binary files /dev/null and b/_static/comment-bright.png differ diff --git a/_static/comment-close.png b/_static/comment-close.png new file mode 100644 index 0000000..4d91bcf Binary files /dev/null and b/_static/comment-close.png differ diff --git a/_static/comment.png b/_static/comment.png new file mode 100644 index 0000000..dfbc0cb Binary files /dev/null and b/_static/comment.png differ diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..344db17 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..d28647e --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/_static/down-pressed.png b/_static/down-pressed.png new file mode 100644 index 0000000..5756c8c Binary files /dev/null and b/_static/down-pressed.png differ diff --git a/_static/down.png b/_static/down.png new file mode 100644 index 0000000..1b3bdad Binary files /dev/null and b/_static/down.png differ diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/jquery-3.2.1.js b/_static/jquery-3.2.1.js new file mode 100644 index 0000000..d2d8ca4 --- /dev/null +++ b/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + +
+
+
+ + +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/core.html b/core.html new file mode 100644 index 0000000..bebc8e6 --- /dev/null +++ b/core.html @@ -0,0 +1,348 @@ + + + + + + + + Core — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Core

+
+

Config

+
+
+class ucloud.core.auth.Credential(public_key, private_key, **kwargs)[source]
+

credential is the object to store credential information

+

the keys can be found on APIKey documentation

+

it can calculate signature for OpenAPI:

+
>>> cred = Credential('my_public_key', 'my_private_key')
+>>> cred.verify_ac({"foo": "bar"})
+'d4411ab30953fb0bbcb1e7313081f05e4e91a394'
+
+
+ +++ + + + +
Parameters:
    +
  • public_key
  • +
  • private_key
  • +
+
+
+ +
+
+class ucloud.core.client.Config(region=None, project_id=None, base_url='https://api.ucloud.cn', user_agent=None, timeout=30, max_retries=3, log_level=20, ssl_verify=True, ssl_cacert=None, ssl_cert=None, ssl_key=None, **kwargs)[source]
+

Config is the config of ucloud sdk, use for setting up

+ +++ + + + +
Parameters:
    +
  • region (str) – Region is the region of backend service, +See also Region list Documentation
  • +
  • project_id (str) – ProjectId is the unique identify of project, used for organize resources, +Most of resources should belong to a project. Sub-Account must have an project id. +See also Project list Documentation
  • +
  • base_url (str) – BaseUrl is the url of backend api
  • +
  • user_agent – UserAgent is an attribute for sdk client, used for distinguish who is using sdk. +See also User Agent +It will be appended to the end of sdk user-agent. +eg. “MyAPP/0.10.1” -> “Python/3.7.0 Python-SDK/0.1.0 MyAPP/0.10.1”
  • +
  • timeout (int) – Timeout is timeout for every request.
  • +
  • max_retries (int) – MaxRetries is the number of max retry times. +Set MaxRetries more than 0 to enable auto-retry for network and service availability problem +if auto-retry is enabled, it will enable default retry policy using exponential backoff.
  • +
  • log_level (int) – LogLevel is equal to builtin logging level, +if logLevel not be set, use INFO level as default.
  • +
+
+
+ +
+
+

Client

+
+
+class ucloud.core.client.Client(config, transport=None, middleware=None, logger=None)[source]
+
+
+invoke(action, args=None, **options)[source]
+

invoke will invoke the action with arguments data and options

+ +++ + + + + + +
Parameters:
    +
  • action (str) – the api action, like CreateUHostInstance
  • +
  • args (dict) – arguments of api(action), see doc: UCloud API Documentation
  • +
+
Returns:

+
+
+ +
+ +
+
+

Transport

+
+
+class ucloud.core.transport.RequestsTransport(max_retries=3, backoff_factor=0.3, status_forcelist=(500, 502, 504))[source]
+

transport is the implementation of http client, use for send a request and return a http response

+ +++ + + + +
Parameters:
    +
  • max_retries (int) – max retries is the max number of transport request when occur http error
  • +
  • backoff_factor (float) – backoff factor will calculate the backoff delay during retrying, +the backoff delay = {backoff factor} * (2 ^ ({number of total retries} - 1))
  • +
  • status_forcelist (tuple) – the status code list that could be retried
  • +
+
+
+
+middleware
+

the middleware object, see :mod:

+ +++ + + + +
Returns:the transport middleware
+
+ +
+
+send(req, **options)[source]
+

send request and return the response

+ +++ + + + + + +
Parameters:req – the full http request descriptor
Returns:the response of http request
+
+ +
+ +
+
+

Middleware

+
+
+class ucloud.core.utils.middleware.Middleware[source]
+

middleware is the object to store request/response handlers

+
>>> middleware = Middleware()
+
+
+

Add a request handler to prepare the request

+
>>> @middleware.request
+... def prepare(req):
+...     req['Region'] = 'cn-bj2'
+...     return req
+
+
+

Add a response handler to log the response detail

+
>>> @middleware.response
+... def logged(resp):
+...     print(resp)
+...     return resp
+
+
+
>>> len(middleware.request_handlers), len(middleware.response_handlers)
+(1, 1)
+
+
+
+
+exception(handler, index=-1)[source]
+

exception is the exception handler register to add exception handler.

+ +++ + + + + + +
Parameters:
    +
  • handler – exception handler function, receive exception object +and raise a new exception or ignore it
  • +
  • index (int) – the position of handler in the handler list, +default is append it to end
  • +
+
Returns:

+
+
+ +
+
+request(handler, index=-1)[source]
+

request is the request handler register to add request handler.

+ +++ + + + + + +
Parameters:
    +
  • handler – request handler function, receive request object +and return a new request
  • +
  • index (int) – the position of request in the handler list, +default is append it to end
  • +
+
Returns:

+
+
+ +
+
+response(handler, index=-1)[source]
+

response is the response handler register to add response handler.

+ +++ + + + + + +
Parameters:
    +
  • handler – response handler function, receive response object +and return a new response
  • +
  • index (int) – the position of response in the handler list, +default is append it to end
  • +
+
Returns:

+
+
+ +
+ +
+
+

Testing

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 9267aeb..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SOURCEDIR = . -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/build/doctrees/contents.doctree b/docs/build/doctrees/contents.doctree new file mode 100644 index 0000000..dfe5f22 Binary files /dev/null and b/docs/build/doctrees/contents.doctree differ diff --git a/docs/build/doctrees/core.doctree b/docs/build/doctrees/core.doctree new file mode 100644 index 0000000..e679028 Binary files /dev/null and b/docs/build/doctrees/core.doctree differ diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle new file mode 100644 index 0000000..f5f7d6c Binary files /dev/null and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/helpers.doctree b/docs/build/doctrees/helpers.doctree new file mode 100644 index 0000000..209dec2 Binary files /dev/null and b/docs/build/doctrees/helpers.doctree differ diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree new file mode 100644 index 0000000..3f69d4f Binary files /dev/null and b/docs/build/doctrees/index.doctree differ diff --git a/docs/build/doctrees/quick_start.doctree b/docs/build/doctrees/quick_start.doctree new file mode 100644 index 0000000..dfd08b5 Binary files /dev/null and b/docs/build/doctrees/quick_start.doctree differ diff --git a/docs/build/doctrees/services.doctree b/docs/build/doctrees/services.doctree new file mode 100644 index 0000000..b80e1c5 Binary files /dev/null and b/docs/build/doctrees/services.doctree differ diff --git a/docs/build/doctrees/usage.doctree b/docs/build/doctrees/usage.doctree new file mode 100644 index 0000000..e1f22d5 Binary files /dev/null and b/docs/build/doctrees/usage.doctree differ diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo new file mode 100644 index 0000000..a6060e2 --- /dev/null +++ b/docs/build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 088d5922308d784b4ac9381416e9e8a8 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html new file mode 100644 index 0000000..8074c0a --- /dev/null +++ b/docs/build/html/_modules/index.html @@ -0,0 +1,119 @@ + + + + + + + + Overview: module code — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/core/auth/_cfg.html b/docs/build/html/_modules/ucloud/core/auth/_cfg.html new file mode 100644 index 0000000..ee76cce --- /dev/null +++ b/docs/build/html/_modules/ucloud/core/auth/_cfg.html @@ -0,0 +1,173 @@ + + + + + + + + ucloud.core.auth._cfg — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.auth._cfg

+# -*- coding: utf-8 -*-
+
+import hashlib
+from collections import OrderedDict
+from ucloud.core.typesystem import schema, fields, encoder
+
+
+class CredentialSchema(schema.Schema):
+    fields = {
+        "public_key": fields.Str(required=True),
+        "private_key": fields.Str(required=True),
+    }
+
+
+def verify_ac(private_key, params):
+    """ calculate signature by private_key/public_key
+
+    the keys can be found on `APIKey documentation <https://console.ucloud.cn/uapi/apikey>`__
+
+    >>> verify_ac("my_private_key", {"foo": "bar"})
+    '634edc1bb957c0d65e5ab5494cf3b7784fbc87af'
+
+    >>> verify_ac("my_private_key", {"foo": "bar"})
+    '634edc1bb957c0d65e5ab5494cf3b7784fbc87af'
+
+    :param private_key: private key
+    :param params:
+    :return:
+    """
+    params = OrderedDict(sorted(params.items(), key=lambda item: item[0]))
+    simplified = ""
+    for key, value in params.items():
+        simplified += str(key) + encoder.encode_value(value)
+    simplified += private_key
+    hash_new = hashlib.sha1()
+    hash_new.update(simplified.encode("utf-8"))
+    hash_value = hash_new.hexdigest()
+    return hash_value
+
+
+
[docs]class Credential(object): + """ credential is the object to store credential information + + the keys can be found on `APIKey documentation <https://console.ucloud.cn/uapi/apikey>`__ + + it can calculate signature for OpenAPI: + + >>> cred = Credential('my_public_key', 'my_private_key') + >>> cred.verify_ac({"foo": "bar"}) + 'd4411ab30953fb0bbcb1e7313081f05e4e91a394' + + :param public_key: + :param private_key: + """ + + PUBLIC_KEY_NAME = "PublicKey" + + def __init__(self, public_key, private_key, **kwargs): + self.public_key = public_key + self.private_key = private_key + + def verify_ac(self, args): + args[Credential.PUBLIC_KEY_NAME] = self.public_key + return verify_ac(self.private_key, args) + + @classmethod + def from_dict(cls, d): + parsed = CredentialSchema().dumps(d) + return cls(**parsed) + + def to_dict(self): + return {"public_key": self.public_key, "private_key": self.private_key}
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/core/client/_cfg.html b/docs/build/html/_modules/ucloud/core/client/_cfg.html new file mode 100644 index 0000000..6b377d8 --- /dev/null +++ b/docs/build/html/_modules/ucloud/core/client/_cfg.html @@ -0,0 +1,182 @@ + + + + + + + + ucloud.core.client._cfg — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.client._cfg

+# -*- coding: utf-8 -*-
+
+import logging
+from ucloud.core.typesystem import schema, fields
+
+
+class ConfigSchema(schema.Schema):
+    fields = {
+        "region": fields.Str(required=True),
+        "project_id": fields.Str(),
+        "base_url": fields.Str(default="https://api.ucloud.cn"),
+        "user_agent": fields.Str(),
+        "timeout": fields.Int(default=30),
+        "max_retries": fields.Int(default=3),
+        "log_level": fields.Int(default=logging.INFO),
+        "validate_request": fields.Bool(default=True),
+    }
+
+
+
[docs]class Config(object): + """ + Config is the config of ucloud sdk, use for setting up + + :type region: str + :param region: Region is the region of backend service, + See also `Region list Documentation <https://docs.ucloud.cn/api/summary/regionlist>`_ + :type project_id: str + :param project_id: ProjectId is the unique identify of project, used for organize resources, + Most of resources should belong to a project. Sub-Account must have an project id. + See also `Project list Documentation <https://docs.ucloud.cn/api/summary/get_project_list>`_ + :type base_url: str + :param base_url: BaseUrl is the url of backend api + :param user_agent: UserAgent is an attribute for sdk client, used for distinguish who is using sdk. + See also `User Agent <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent>`_ + It will be appended to the end of sdk user-agent. + eg. "MyAPP/0.10.1" -> "Python/3.7.0 Python-SDK/0.1.0 MyAPP/0.10.1" + :type timeout: int + :param timeout: Timeout is timeout for every request. + :type max_retries: int + :param max_retries: MaxRetries is the number of max retry times. + Set MaxRetries more than 0 to enable auto-retry for network and service availability problem + if auto-retry is enabled, it will enable default retry policy using exponential backoff. + :type log_level: int + :param log_level: LogLevel is equal to builtin logging level, + if logLevel not be set, use INFO level as default. + """ + + def __init__( + self, + region, + project_id=None, + base_url="https://api.ucloud.cn", + user_agent=None, + timeout=30, + max_retries=3, + log_level=logging.INFO, + **kwargs + ): + self.region = region + self.project_id = project_id + self.base_url = base_url + self.user_agent = user_agent + self.timeout = timeout + self.max_retries = max_retries + self.log_level = log_level + + @classmethod + def from_dict(cls, d): + parsed = ConfigSchema().dumps(d) + return cls(**parsed) + + def to_dict(self): + return { + "region": self.region, + "project_id": self.project_id, + "base_url": self.base_url, + "user_agent": self.user_agent, + "timeout": self.timeout, + "max_retries": self.max_retries, + "log_level": self.log_level, + }
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/core/client/_client.html b/docs/build/html/_modules/ucloud/core/client/_client.html new file mode 100644 index 0000000..2484956 --- /dev/null +++ b/docs/build/html/_modules/ucloud/core/client/_client.html @@ -0,0 +1,220 @@ + + + + + + + + ucloud.core.client._client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.client._client

+# -*- coding: utf-8 -*-
+
+import logging
+import sys
+from ucloud import version
+from ucloud.core.client._cfg import Config
+from ucloud.core.transport import Transport, RequestsTransport, Request
+from ucloud.core.typesystem import encoder
+from ucloud.core.utils import log
+from ucloud.core.utils.middleware import Middleware
+from ucloud.core import auth, exc
+
+default_transport = RequestsTransport()
+
+
+
[docs]class Client(object): + def __init__(self, config, transport=None, middleware=None, logger=None): + cfg, cred = self._parse_dict_config(config) + self.config = cfg + self.credential = cred + self.transport = transport or default_transport + self.logger = logger or log.default_logger + if middleware is None: + middleware = Middleware() + middleware.response(self.logged_response_handler) + middleware.request(self.logged_request_handler) + self._middleware = middleware + +
[docs] def invoke(self, action, args=None, **options): + """ invoke will invoke the action with arguments data and options + + :param str action: the api action, like `CreateUHostInstance` + :param dict args: arguments of api(action), see doc: `UCloud API Documentation <https://docs.ucloud.cn/api>`__ + :return: + """ + retries = 0 + max_retries = options.get("max_retries") or self.config.max_retries + while retries <= max_retries: + try: + return self._send(action, args or {}, **options) + except exc.UCloudException as e: + if e.retryable and retries != max_retries: + logging.info( + "Retrying {action}: {args}".format( + action=action, args=args + ) + ) + retries += 1 + continue + raise e + except Exception as e: + raise e
+ + @property + def middleware(self): + return self._middleware + + def logged_request_handler(self, req): + self.logger.info("[request] {} {}".format(req.get("Action", ""), req)) + return req + + def logged_response_handler(self, resp): + self.logger.info( + "[response] {} {}".format(resp.get("Action", ""), resp) + ) + return resp + + @staticmethod + def _parse_dict_config(config): + return Config.from_dict(config), auth.Credential.from_dict(config) + + def _send(self, action, args, **options): + args["Action"] = action + for handler in self.middleware.request_handlers: + args = handler(args) + req = self._build_http_request(args) + max_retries = options.get("max_retries") or self.config.max_retries + timeout = options.get("timeout") or self.config.timeout + resp = self.transport.send( + req, timeout=timeout, max_retries=max_retries + ).json() + for handler in self.middleware.response_handlers: + resp = handler(resp) + if int(resp.get("RetCode", -1)) != 0: + raise exc.RetCodeException( + action=req.data.get("Action"), + code=int(resp.get("RetCode")), + message=resp.get("Message"), + ) + return resp + + def _build_http_request(self, args): + config = { + "Region": self.config.region, + "ProjectId": self.config.project_id, + } + payload = {k: v for k, v in config.items() if v is not None} + payload.update({k: v for k, v in args.items() if v is not None}) + payload = encoder.encode(payload) + payload["Signature"] = self.credential.verify_ac(payload) + return Request( + url=self.config.base_url, + method="post", + data=payload, + headers={ + "User-Agent": self._build_user_agent(), + "Content-Type": "application/x-www-form-urlencoded", + }, + ) + + def _build_user_agent(self): + python_version = "{v[0]}.{v[1]}.{v[2]}".format(v=sys.version_info) + user_agent = "Python/{python_version} Python-SDK/{sdk_version}".format( + python_version=python_version, sdk_version=version.version + ) + (self.config.user_agent or "") + return user_agent + + def __repr__(self): + return '<{}("{}")>'.format(self.__class__.__name__, self.config.region)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/core/transport/_requests.html b/docs/build/html/_modules/ucloud/core/transport/_requests.html new file mode 100644 index 0000000..bae5334 --- /dev/null +++ b/docs/build/html/_modules/ucloud/core/transport/_requests.html @@ -0,0 +1,198 @@ + + + + + + + + ucloud.core.transport._requests — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.transport._requests

+# -*- coding: utf-8 -*-
+
+import requests
+from urllib3.util.retry import Retry
+from requests.adapters import HTTPAdapter
+from ucloud.core.transport import http
+from ucloud.core.transport.http import Request, Response
+from ucloud.core.utils.middleware import Middleware
+
+
+
[docs]class RequestsTransport(http.Transport): + """ transport is the implementation of http client, use for send a request and return a http response + + :type max_retries: int + :param max_retries: max retries is the max number of transport request when occur http error + :type backoff_factor: float + :param backoff_factor: backoff factor will calculate the backoff delay during retrying, + the backoff delay = {backoff factor} * (2 ^ ({number of total retries} - 1)) + :type status_forcelist: tuple + :param status_forcelist: the status code list that could be retried + """ + + def __init__( + self, + max_retries=3, + backoff_factor=0.3, + status_forcelist=(500, 502, 504), + ): + self.max_retries = max_retries + self.backoff_factor = backoff_factor + self.status_forcelist = status_forcelist + self._adapter = self._load_adapter(max_retries) + self._middleware = Middleware() + +
[docs] def send(self, req, **options): + """ send request and return the response + + :param req: the full http request descriptor + :return: the response of http request + """ + for handler in self.middleware.request_handlers: + req = handler(req) + resp = self._send(req, **options) + for handler in self.middleware.response_handlers: + resp = handler(resp) + return resp
+ + @property + def middleware(self): + """ the middleware object, see :mod: + + :return: the transport middleware + """ + return self._middleware + + def _send(self, req, **options): + with requests.Session() as session: + adapter = self._load_adapter(options.get("max_retries")) + session.mount("http://", adapter=adapter) + session.mount("https://", adapter=adapter) + session_resp = session.request( + method=req.method.upper(), + url=req.url, + json=req.json, + data=req.data, + params=req.params, + headers=req.headers, + ) + resp = self.convert_response(session_resp) + resp.request = req + return resp + + def _load_adapter(self, max_retries=None): + if max_retries is None and self._adapter is not None: + return self._adapter + max_retries = max_retries or 0 + adapter = HTTPAdapter() + adapter.max_retries = Retry( + total=max_retries, + read=max_retries, + connect=max_retries, + backoff_factor=self.backoff_factor, + status_forcelist=self.status_forcelist, + ) + return adapter + + @staticmethod + def convert_response(r): + return Response( + url=r.url, + method=r.request.method, + status_code=r.status_code, + reason=r.reason, + headers=r.headers, + content=r.content, + encoding=r.encoding or r.apparent_encoding, + )
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/core/utils/middleware.html b/docs/build/html/_modules/ucloud/core/utils/middleware.html new file mode 100644 index 0000000..1186329 --- /dev/null +++ b/docs/build/html/_modules/ucloud/core/utils/middleware.html @@ -0,0 +1,154 @@ + + + + + + + + ucloud.core.utils.middleware — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.core.utils.middleware

+# -*- coding: utf-8 -*-
+
+
+
[docs]class Middleware(object): + """ middleware is the object to store request/response handlers + + >>> middleware = Middleware() + + Add a request handler to prepare the request + + >>> @middleware.request + ... def prepare(req): + ... req['Region'] = 'cn-bj2' + ... return req + + Add a response handler to log the response detail + + >>> @middleware.response + ... def logged(resp): + ... print(resp) + ... return resp + + >>> len(middleware.request_handlers), len(middleware.response_handlers) + (1, 1) + """ + + def __init__(self): + self.request_handlers = [] + self.response_handlers = [] + +
[docs] def request(self, handler, index=-1): + """ request is the request handler register to add request handler. + + :param handler: request handler function, receive request object + and return a new request + :param int index: the position of request in the handler list, + default is append it to end + :return: + """ + self.request_handlers.insert(index, handler) + return handler
+ +
[docs] def response(self, handler, index=-1): + """ response is the response handler register to add response handler. + + :param handler: response handler function, receive response object + and return a new response + :param int index: the position of response in the handler list, + default is append it to end + :return: + """ + self.response_handlers.insert(index, handler) + return handler
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/helpers/utils.html b/docs/build/html/_modules/ucloud/helpers/utils.html new file mode 100644 index 0000000..98acb0f --- /dev/null +++ b/docs/build/html/_modules/ucloud/helpers/utils.html @@ -0,0 +1,187 @@ + + + + + + + + ucloud.helpers.utils — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.helpers.utils

+# -*- coding: utf-8 -*-
+
+import random
+import base64
+
+_lowercase = "abcdefghijklmnopqrstuvwxyz"
+_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+_numbers = "0123456789"
+_specials = "_"
+
+
+
[docs]def gen_password( + n, + lower_letters=_lowercase, + upper_letters=_uppercase, + number_letters=_numbers, + special_letters=_specials, + min_lower=1, + min_upper=1, + min_number=1, + min_specials=1, +): + """ generate password for any resource + + >>> len(gen_password(20)) + 20 + + :param int n: password total length + :param str lower_letters: all lowercase letters + :param str upper_letters: all uppercase letters + :param str number_letters: all number letters + :param str special_letters: all special letters + :param int min_lower: minimal number of lowercase letters + :param int min_upper: minimal number of uppercase letters + :param int min_number: minimal number of number letters + :param int min_specials: minimal number of special letters + :return: + """ + all_letters = "".join( + [lower_letters, upper_letters, number_letters, special_letters] + ) + minimal_total = min_lower + min_upper + min_number + min_specials + if n < minimal_total: + raise ValueError( + "the length of password must be larger than total minimal letters number" + ) + minimal_letters = "".join( + [ + gen_string(lower_letters, min_lower), + gen_string(upper_letters, min_upper), + gen_string(number_letters, min_number), + gen_string(special_letters, min_specials), + ] + ) + additional_letters = random.sample(all_letters, n - minimal_total) + results = list(minimal_letters) + additional_letters + random.shuffle(results) + return "".join(results)
+ + +def gen_string(letters, length): + return "".join([random.choice(letters) for i in range(length)]) + + +def first(l): + if len(l) == 0: + return None + return l[0] + + +
[docs]def b64encode(s): + """ base64 encode + + :param str s: input string + :return: base64 string + """ + return base64.b64encode(s.encode()).decode()
+ + +
[docs]def b64decode(s): + """ base64 decode + + :param str s: base64 string + :return: output string + """ + return base64.b64decode(s.encode()).decode()
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/helpers/wait.html b/docs/build/html/_modules/ucloud/helpers/wait.html new file mode 100644 index 0000000..6e80fdd --- /dev/null +++ b/docs/build/html/_modules/ucloud/helpers/wait.html @@ -0,0 +1,201 @@ + + + + + + + + ucloud.helpers.wait — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.helpers.wait

+# -*- coding: utf-8 -*-
+
+import time
+import logging
+from ucloud.core import exc
+
+MAX_BACKOFF_INTERVAL = 10
+logger = logging.getLogger(__name__)
+
+
+class WaitTimeoutException(exc.UCloudException):
+    pass
+
+
+class StateConf(object):
+    """ StateConf is the utilities class to wait the state return by refresh function achieve the specific state,
+    the generally usage is wait the cloud resource, such as uhost, udb ... is
+    ready after created.
+    """
+
+    def __init__(
+        self,
+        pending,
+        target,
+        refresh,
+        timeout,
+        startup_delay=0,
+        min_backoff_interval=0.1,
+        max_backoff_interval=MAX_BACKOFF_INTERVAL,
+    ):
+        self.pending = pending
+        self.target = target
+        self.refresh = refresh
+        self.timeout = timeout
+        self.startup_delay = startup_delay
+        self.min_backoff_interval = min_backoff_interval
+        self.max_backoff_interval = max_backoff_interval
+
+    def wait(self):
+        start_time = time.time()
+        interval = self.min_backoff_interval
+        time.sleep(self.startup_delay)
+        while time.time() - start_time < self.timeout:
+            state = self.refresh()
+            if state in self.pending:
+                time.sleep(interval)
+                interval *= 2
+                if interval > self.max_backoff_interval:
+                    interval = self.max_backoff_interval
+                logger.info(
+                    "waiting state for {self.refresh}, got state {state}".format(
+                        self=self, state=state
+                    )
+                )
+                continue
+            if state in self.target:
+                return
+        raise WaitTimeoutException(
+            "wait timeout {self.timeout}s for {self.refresh}".format(self=self)
+        )
+
+
+
[docs]def wait_for_state( + pending, + target, + refresh, + timeout, + startup_delay=0, + min_backoff_interval=0.1, + max_backoff_interval=MAX_BACKOFF_INTERVAL, +): + """ wait_for_state is a utilities function to wait the state return by refresh function achieve the specific state, + the generally usage is wait the cloud resource, such as uhost, udb ... is + ready after created. + + >>> wait_for_state( + ... pending=["pending"], + ... target=["running"], + ... refresh=lambda: "running", + ... timeout=0.5, + ... ) + + :param pending: pending is the list of pending state, the state is returned by refresh function + :param target: target is the list of target state, it is usually the terminate state, eg. running and fail + :param refresh: the customized refresh function, expect no arguments and return a state + :param timeout: timeout is the total time to wait state is achieved + :param startup_delay: the time to wait before first refresh function is called + :param min_backoff_interval: the backoff time for first refresh interval + :param max_backoff_interval: the max backoff time for refresh interval + """ + conf = StateConf( + pending=pending, + target=target, + refresh=refresh, + timeout=timeout, + startup_delay=startup_delay, + min_backoff_interval=min_backoff_interval, + max_backoff_interval=max_backoff_interval, + ) + return conf.wait()
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/ipsecvpn/client.html b/docs/build/html/_modules/ucloud/services/ipsecvpn/client.html new file mode 100644 index 0000000..43b53e7 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/ipsecvpn/client.html @@ -0,0 +1,215 @@ + + + + + + + + ucloud.services.ipsecvpn.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ipsecvpn.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ipsecvpn.schemas import apis
+
+
+
[docs]class IPSecVPNClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(IPSecVPNClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def describe_remote_vpn_gateway(self, req=None, **kwargs): + """ DescribeRemoteVPNGateway - 获取客户VPN网关信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 数据分页值, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **RemoteVPNGatewayIds** (list) - 客户VPN网关的资源ID,例如RemoteVPNGatewayIds.0代表希望获取客户VPN网关1的信息,RemoteVPNGatewayIds.1代表客户VPN网关2,如果为空,则返回当前Region中所有客户VPN网关实例的信息 + - **Tag** (str) - 业务组名称,若指定则返回业务组下所有客户VPN网关信息 + + **Response** + + - **DataSet** (list) - 见 **RemoteVPNGatewayDataSet** 模型定义 + - **TotalCount** (int) - 符合条件的客户VPN网关总数 + + **Response Model** + + **RemoteVPNGatewayDataSet** + + - **ActiveTunnels** (str) - 活跃的隧道id + - **CreateTime** (int) - 创建时间 + - **Remark** (str) - 备注 + - **RemoteVPNGatewayAddr** (str) - 客户网关IP地址 + - **RemoteVPNGatewayId** (str) - 客户网关ID + - **RemoteVPNGatewayName** (str) - 客户网关名称 + - **Tag** (str) - 用户组 + - **TunnelCount** (int) - 活跃的隧道数量 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeRemoteVPNGatewayRequestSchema().dumps(d) + resp = self.invoke("DescribeRemoteVPNGateway", d, **kwargs) + return apis.DescribeRemoteVPNGatewayResponseSchema().loads(resp)
+ +
[docs] def describe_vpn_tunnel(self, req=None, **kwargs): + """ DescribeVPNTunnel - 获取VPN隧道信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 数据分页值, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **Tag** (str) - 业务组名称,若指定则返回指定的业务组下的所有VPN网关的信息 + - **VPNTunnelIds** (list) - VPN隧道的资源ID,例如VPNTunnelIds.0代表希望获取信息的VPN隧道1,VPNTunneIds.1代表VPN隧道2,如果为空,则返回当前Region中所有的VPN隧道实例 + + **Response** + + - **DataSet** (list) - 见 **VPNTunnelDataSet** 模型定义 + - **TotalCount** (int) - VPN隧道总数 + + **Response Model** + + **IPSecData** + + - **IPSecAuthenticationAlgorithm** (str) - IPSec通道中使用的认证算法 + - **IPSecEncryptionAlgorithm** (str) - IPSec通道中使用的加密算法 + - **IPSecLocalSubnetIds** (list) - 指定VPN连接的本地子网,用逗号分隔 + - **IPSecPFSDhGroup** (str) - 是否开启PFS功能,Disable表示关闭,数字表示DH组 + - **IPSecProtocol** (str) - 使用的安全协议,ESP或AH + - **IPSecRemoteSubnets** (list) - 指定VPN连接的客户网段,用逗号分隔 + - **IPSecSALifetime** (str) - IPSec中SA的生存时间 + - **IPSecSALifetimeBytes** (str) - IPSec中SA的生存时间(以字节计) + + **IKEData** + + - **IKEAuthenticationAlgorithm** (str) - IKE认证算法 + - **IKEDhGroup** (str) - IKEDH组 + - **IKEEncryptionAlgorithm** (str) - IKE加密算法 + - **IKEExchangeMode** (str) - IKEv1协商模式 + - **IKELocalId** (str) - IKE本地ID标识 + - **IKEPreSharedKey** (str) - IKE预共享秘钥 + - **IKERemoteId** (str) - IKE对端ID标识 + - **IKESALifetime** (str) - IKE秘钥生存时间 + - **IKEVersion** (str) - IKE版本 + + **VPNTunnelDataSet** + + - **CreateTime** (int) - 创建时间 + - **IKEData** (dict) - 见 **IKEData** 模型定义 + - **IPSecData** (dict) - 见 **IPSecData** 模型定义 + - **Remark** (str) - 备注 + - **RemoteVPNGatewayId** (str) - 对端网关Id + - **RemoteVPNGatewayName** (str) - 对端网关名字 + - **Tag** (str) - 用户组 + - **VPCId** (str) - 所属VPCId + - **VPCName** (str) - 所属VOC名字 + - **VPNGatewayId** (str) - 所属VPN网关id + - **VPNGatewayName** (str) - VPN网关名字 + - **VPNTunnelId** (str) - 隧道id + - **VPNTunnelName** (str) - 隧道名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPNTunnelRequestSchema().dumps(d) + resp = self.invoke("DescribeVPNTunnel", d, **kwargs) + return apis.DescribeVPNTunnelResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/pathx/client.html b/docs/build/html/_modules/ucloud/services/pathx/client.html new file mode 100644 index 0000000..f000b82 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/pathx/client.html @@ -0,0 +1,260 @@ + + + + + + + + ucloud.services.pathx.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.pathx.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.pathx.schemas import apis
+
+
+
[docs]class PathXClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(PathXClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_global_ssh_instance(self, req=None, **kwargs): + """ CreateGlobalSSHInstance - 创建GlobalSSH实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Area** (str) - (Required) 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个 + - **AreaCode** (str) - (Required) AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个 + - **Port** (int) - (Required) SSH端口,1-65535且不能使用80,443端口 + - **TargetIP** (str) - (Required) 被SSH访问的IP + - **ChargeType** (str) - 支付方式,如按月、按年、按时 + - **CouponId** (str) - 使用代金券可冲抵部分费用 + - **Quantity** (int) - 购买数量 + - **Remark** (str) - 备注信息 + + **Response** + + - **AcceleratingDomain** (str) - 加速域名,访问该域名可就近接入 + - **InstanceId** (str) - 实例ID,资源唯一标识 + - **Message** (str) - 提示信息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.CreateGlobalSSHInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateGlobalSSHInstance", d, **kwargs) + return apis.CreateGlobalSSHInstanceResponseSchema().loads(resp)
+ +
[docs] def delete_global_ssh_instance(self, req=None, **kwargs): + """ DeleteGlobalSSHInstance - 删除GlobalSSH实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - (Required) 实例Id,资源的唯一标识 + + **Response** + + - **Message** (str) - 提示信息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteGlobalSSHInstanceRequestSchema().dumps(d) + resp = self.invoke("DeleteGlobalSSHInstance", d, **kwargs) + return apis.DeleteGlobalSSHInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_global_ssh_area(self, req=None, **kwargs): + """ DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 机房地域代号,如hk、 us-ca、 us-ws等。不填默认为空,返回所有支持地区。 + + **Response** + + - **AreaSet** (list) - 见 **GlobalSSHArea** 模型定义 + - **Message** (str) - 提示信息 + + **Response Model** + + **GlobalSSHArea** + + - **Area** (str) - GlobalSSH覆盖的地区,如香港、东京、洛杉矶等 + - **AreaCode** (str) - 地区代号,以地区AirPort Code + - **RegionSet** (list) - ucloud机房代号构成的数组,如["hk","us-ca"] + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeGlobalSSHAreaRequestSchema().dumps(d) + resp = self.invoke("DescribeGlobalSSHArea", d, **kwargs) + return apis.DescribeGlobalSSHAreaResponseSchema().loads(resp)
+ +
[docs] def describe_global_ssh_instance(self, req=None, **kwargs): + """ DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - 实例ID,资源唯一标识 + + **Response** + + - **InstanceSet** (list) - 见 **GlobalSSHInfo** 模型定义 + + **Response Model** + + **GlobalSSHInfo** + + - **AcceleratingDomain** (str) - 加速域名 + - **Area** (str) - 被SSH访问的IP所在地区 + - **ChargeType** (str) - 支付周期,如Month,Year等 + - **CreateTime** (int) - 资源创建时间戳 + - **ExpireTime** (int) - 资源过期时间戳 + - **InstanceId** (str) - 实例ID,资源唯一标识 + - **Port** (int) - SSH登陆端口 + - **Remark** (str) - 备注信息 + - **TargetIP** (str) - 被SSH访问的EIP + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DescribeGlobalSSHInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeGlobalSSHInstance", d, **kwargs) + return apis.DescribeGlobalSSHInstanceResponseSchema().loads(resp)
+ +
[docs] def modify_global_ssh_port(self, req=None, **kwargs): + """ ModifyGlobalSSHPort - 修改GlobalSSH端口 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - (Required) 实例ID,资源唯一标识 + - **Port** (int) - (Required) 调整后的SSH登陆端口 + + **Response** + + - **Message** (str) - 提示信息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.ModifyGlobalSSHPortRequestSchema().dumps(d) + resp = self.invoke("ModifyGlobalSSHPort", d, **kwargs) + return apis.ModifyGlobalSSHPortResponseSchema().loads(resp)
+ +
[docs] def modify_global_ssh_remark(self, req=None, **kwargs): + """ ModifyGlobalSSHRemark - 修改GlobalSSH备注 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **InstanceId** (str) - (Required) 实例ID,资源唯一标识 + - **Remark** (str) - 备注信息,不填默认为空字符串 + + **Response** + + - **Message** (str) - 接口返回消息 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.ModifyGlobalSSHRemarkRequestSchema().dumps(d) + resp = self.invoke("ModifyGlobalSSHRemark", d, **kwargs) + return apis.ModifyGlobalSSHRemarkResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/stepflow/client.html b/docs/build/html/_modules/ucloud/services/stepflow/client.html new file mode 100644 index 0000000..e9e691f --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/stepflow/client.html @@ -0,0 +1,185 @@ + + + + + + + + ucloud.services.stepflow.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.stepflow.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.stepflow.schemas import apis
+
+
+
[docs]class StepFlowClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(StepFlowClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def create_sf_workflow_from_template(self, req=None, **kwargs): + """ CreateSFWorkflowFromTemplate - 导入工作流定义 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Namespace** (str) - (Required) 需要创建的工作流namespace + - **Workflow** (str) - (Required) 描述工作流定义的base64字符串 + - **WorkflowName** (str) - (Required) 需要创建的工作流名称 + + **Response** + + - **Message** (str) - 返回消息 + - **Version** (int) - 创建的工作流版本号 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateSFWorkflowFromTemplateRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateSFWorkflowFromTemplate", d, **kwargs) + return apis.CreateSFWorkflowFromTemplateResponseSchema().loads(resp)
+ +
[docs] def get_sf_workflow_template(self, req=None, **kwargs): + """ GetSFWorkflowTemplate - 导出工作流定义 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **WorkflowId** (str) - (Required) 被导出工作流的Id + - **WorkflowVersion** (int) - 被导出工作流的版本号。取值范围:WorkflowVersion >= 1;默认会获取发布版本对应的workflow;超过最大版本会返回错误 + + **Response** + + - **Message** (str) - 返回消息 + - **Version** (int) - 导出工作流的版本号 + - **Workflow** (dict) - 见 **WorkflowTemplate** 模型定义 + - **WorkflowId** (str) - 导出工作流的Id + + **Response Model** + + **Param** + + - **Name** (str) - 参数名称 + - **Type** (str) - 参数类型 + - **Value** (str) - 参数值 + + **ActivityTemplate** + + - **Input** (dict) - Activity的输入 + - **Name** (str) - Activity的名字 + - **Next** (str) - 下一个Activity的名字 + - **Output** (list) - Activity的输出,详见Param + - **RetryTimes** (str) - Activity的重试次数 + - **Timeout** (str) - Activity的超时时间 + - **Type** (str) - Activity的类型 + + **WorkflowTemplate** + + - **Activites** (list) - 见 **ActivityTemplate** 模型定义 + - **Input** (list) - 见 **Param** 模型定义 + - **Output** (list) - 见 **Param** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetSFWorkflowTemplateRequestSchema().dumps(d) + resp = self.invoke("GetSFWorkflowTemplate", d, **kwargs) + return apis.GetSFWorkflowTemplateResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/uaccount/client.html b/docs/build/html/_modules/ucloud/services/uaccount/client.html new file mode 100644 index 0000000..d71a286 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/uaccount/client.html @@ -0,0 +1,265 @@ + + + + + + + + ucloud.services.uaccount.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uaccount.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uaccount.schemas import apis
+
+
+
[docs]class UAccountClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UAccountClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def create_project(self, req=None, **kwargs): + """ CreateProject - 创建项目 + + **Request** + + - **ProjectName** (str) - (Required) 项目名称 + + **Response** + + - **ProjectId** (str) - 所创建项目的Id + + """ + d = {} + req and d.update(req) + d = apis.CreateProjectRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateProject", d, **kwargs) + return apis.CreateProjectResponseSchema().loads(resp)
+ +
[docs] def get_project_list(self, req=None, **kwargs): + """ GetProjectList - 获取项目列表 + + **Request** + + - **IsFinance** (str) - 是否是财务账号 + + **Response** + + - **ProjectCount** (int) - 项目总数 + - **ProjectSet** (list) - 见 **ProjectListInfo** 模型定义 + + **Response Model** + + **ProjectListInfo** + + - **CreateTime** (int) - 创建时间(Unix时间戳) + - **IsDefault** (bool) - 是否为默认项目 + - **MemberCount** (int) - 项目下成员数量 + - **ParentId** (str) - 父项目ID + - **ParentName** (str) - 父项目名称 + - **ProjectId** (str) - 项目ID + - **ProjectName** (str) - 项目名称 + - **ResourceCount** (int) - 项目下资源数量 + + """ + d = {} + req and d.update(req) + d = apis.GetProjectListRequestSchema().dumps(d) + resp = self.invoke("GetProjectList", d, **kwargs) + return apis.GetProjectListResponseSchema().loads(resp)
+ +
[docs] def get_region(self, req=None, **kwargs): + """ GetRegion - 获取用户在各数据中心的权限等信息 + + **Request** + + + **Response** + + - **Regions** (list) - 见 **RegionInfo** 模型定义 + + **Response Model** + + **RegionInfo** + + - **BitMaps** (str) - 用户在此数据中心的权限位 + - **IsDefault** (bool) - 是否用户当前默认数据中心 + - **Region** (str) - 地域名字,如cn-bj + - **RegionId** (int) - 数据中心ID + - **RegionName** (str) - 数据中心名称 + - **Zone** (str) - 可用区名字,如cn-bj-01 + + """ + d = {} + req and d.update(req) + d = apis.GetRegionRequestSchema().dumps(d) + resp = self.invoke("GetRegion", d, **kwargs) + return apis.GetRegionResponseSchema().loads(resp)
+ +
[docs] def get_user_info(self, req=None, **kwargs): + """ GetUserInfo - 获取用户信息 + + **Request** + + + **Response** + + - **DataSet** (list) - 见 **UserInfo** 模型定义 + + **Response Model** + + **UserInfo** + + - **Admin** (int) - 是否超级管理员 0:否 1:是 + - **Administrator** (str) - 管理员 + - **AuthState** (str) - 实名认证状态 + - **City** (str) - 城市 + - **CompanyName** (str) - 公司名称 + - **Finance** (int) - 是否有财务权限 0:否 1:是 + - **IndustryType** (int) - 所属行业 + - **PhonePrefix** (str) - 国际号码前缀 + - **Province** (str) - 省份 + - **UserAddress** (str) - 公司地址 + - **UserEmail** (str) - 用户邮箱 + - **UserId** (int) - 用户Id + - **UserName** (str) - 称呼 + - **UserPhone** (str) - 用户手机 + - **UserType** (int) - 会员类型 + - **UserVersion** (int) - 是否子帐户(大于100为子帐户) + + """ + d = {} + req and d.update(req) + d = apis.GetUserInfoRequestSchema().dumps(d) + resp = self.invoke("GetUserInfo", d, **kwargs) + return apis.GetUserInfoResponseSchema().loads(resp)
+ +
[docs] def modify_project(self, req=None, **kwargs): + """ ModifyProject - 修改项目 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ProjectName** (str) - (Required) 新的项目名称 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.ModifyProjectRequestSchema().dumps(d) + resp = self.invoke("ModifyProject", d, **kwargs) + return apis.ModifyProjectResponseSchema().loads(resp)
+ +
[docs] def terminate_project(self, req=None, **kwargs): + """ TerminateProject - 删除项目 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.TerminateProjectRequestSchema().dumps(d) + resp = self.invoke("TerminateProject", d, **kwargs) + return apis.TerminateProjectResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/ucdn/client.html b/docs/build/html/_modules/ucloud/services/ucdn/client.html new file mode 100644 index 0000000..73b4142 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/ucdn/client.html @@ -0,0 +1,710 @@ + + + + + + + + ucloud.services.ucdn.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ucdn.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ucdn.schemas import apis
+
+
+
[docs]class UCDNClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UCDNClient, self).__init__(config, transport, middleware, logger) + +
[docs] def batch_describe_new_ucdn_domain(self, req=None, **kwargs): + """ BatchDescribeNewUcdnDomain - 批量获取加速域名配置 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ChannelType** (str) - 渠道ucdn、ufile、uvideo + - **DomainId** (list) - 域名id,创建域名时生成的资源id,默认获取账号下的所有域名信息,n为自然数 + - **Limit** (int) - 返回数据长度,如果制定了Offset,则默认20,否则默认全部,非负整数 + - **Offset** (int) - 数据偏移量,默认0,非负整数 + + **Response** + + - **Arrearage** (list) - 标识欠费的数组,数组含有下列元素值, 1=国内流量有欠费 2=国外流量有欠费 3=国内带宽有欠费 4=国外带宽有欠费 + - **ChargeType** (int) - 当前计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 + - **DomainList** (list) - 见 **DomainInfo** 模型定义 + - **LastChargeType** (int) - 表示最后一次切换的计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 40=未选择计费方式 + - **MaxDomainNum** (int) - 最大域名数量,默认20 + - **TotalCount** (int) - 满足条件的域名个数 + - **Vip** (str) - vip标示,yes-是 no-否 + + **Response Model** + + **AccessConf** + + - **IpBlacklist** (str) - 多个ip用逗号隔开 + + **CacheConf** + + - **CacheBehavior** (bool) - 是否缓存,true为缓存,false为不缓存。为false的情况下,CacheTTL和CacheUnit强制不生效 + - **CacheTTL** (int) - 缓存时间 + - **CacheUnit** (str) - 缓存时间的单位。sec(秒),min(分钟),hour(小时),day(天) + - **Description** (str) - 缓存规则描述 + - **FollowOriginRule** (bool) - 是否优先遵循源站头部缓存策略,false为不优先遵循源站,true为优先遵循源站缓存头部。默认为false + - **HttpCodePattern** (str) - 状态码默认情况只缓存200类状态码,支持正则 + - **IgnoreQueryString** (bool) - 是否忽略参数缓存(false为不忽略,true为忽略,默认为false) + - **PathPattern** (str) - 路径模式,支持正则 + + **DomainInfo** + + - **AccessConf** (dict) - 见 **AccessConf** 模型定义 + - **AreaCode** (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域 + - **CacheConf** (list) - 见 **CacheConf** 模型定义 + - **CacheHost** (str) - 缓存Host,不同的域名可以配置为同一个CacheHost来实现缓存共享,默认为加速域名 + - **CdnProtocol** (str) - 加速类型http,http|https + - **CdnType** (str) - 加速域名的业务类型,web代表网站,stream代表视频,download代表下载。 + - **CertName** (str) - 证书名称 + - **Cname** (str) - cdn域名。创建加速域名生成的cdn域名,用于设置CNAME记录 + - **CreateTime** (int) - 域名创建的时间。格式:时间戳 + - **Domain** (str) - 域名,用户创建加速的域名 + - **DomainId** (str) - 域名id,创建域名时生成的id + - **HttpsStatusAbroad** (str) - 国外https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用 + - **HttpsStatusCn** (str) - 国内https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用 + - **NullRefer** (bool) - ReferType为白名单时,NullRefer为false代表不允许NULL refer访问,为true代表允许Null refer访问 + - **OriginHost** (str) - 回源Http请求头部Host,默认是加速域名 + - **OriginIp** (list) - 源站ip即cdn服务器回源访问的ip地址。支持多个源站ip,多个源站ip,可表述为如:[1.1.1.1,2.2.2.2] + - **OriginPort** (int) - 回源端口 + - **OriginProtocol** (str) - 源站协议http,http|https 默认http + - **ReferList** (list) - Refer列表,支持正则表达式 + - **ReferStatus** (bool) - refer配置开关,true打开,false关闭 + - **ReferType** (int) - 0白名单,1黑名单 + - **Status** (str) - 创建的加速域名的当前的状态。check代表审核中,checkSuccess代表审核通过,checkFail代表审核失败,enable代表加速中,disable代表停止加速,delete代表删除加速 enableing代表正在开启加速,disableing代表正在停止加速中,deleteing代表删除中 + - **Tag** (str) - 业务组,默认为Default + - **TestUrl** (str) - 测试url,用于域名创建加速时的测试 + - **ValidTime** (int) - 开始分配Cname时间。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.BatchDescribeNewUcdnDomainRequestSchema().dumps(d) + resp = self.invoke("BatchDescribeNewUcdnDomain", d, **kwargs) + return apis.BatchDescribeNewUcdnDomainResponseSchema().loads(resp)
+ +
[docs] def describe_new_ucdn_prefetch_cache_task(self, req=None, **kwargs): + """ DescribeNewUcdnPrefetchCacheTask - 获取预取任务状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + - **Limit** (int) - 返回数据长度,默认全部,自然数 + - **Offset** (int) - 数据偏移量,默认为0,自然数 + - **Status** (str) - 需要获取的内容预热的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态 + - **TaskId** (list) - 提交任务时返回的任务ID + + **Response** + + - **TaskList** (list) - 见 **TaskInfo** 模型定义 + - **TotalCount** (int) - 预热任务的总数 + + **Response Model** + + **UrlProgressInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **FinishTime** (int) - 任务完成时间。格式为Unix Timestamp + - **Progress** (int) - 刷新进度,单位% + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **Url** (str) - 刷新的单条url + + **TaskInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **TaskId** (str) - 提交任务时返回的任务ID + - **Type** (str) - file/dir 刷新任务会返回Type,预取任务没有 + - **UrlLists** (list) - 见 **UrlProgressInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DescribeNewUcdnPrefetchCacheTaskRequestSchema().dumps(d) + resp = self.invoke("DescribeNewUcdnPrefetchCacheTask", d, **kwargs) + return apis.DescribeNewUcdnPrefetchCacheTaskResponseSchema().loads(resp)
+ +
[docs] def describe_new_ucdn_refresh_cache_task(self, req=None, **kwargs): + """ DescribeNewUcdnRefreshCacheTask - 获取域名刷新任务状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + - **Limit** (int) - 返回数据长度,默认全部,自然数 + - **Offset** (int) - 数据偏移量,默认为0,自然数 + - **Status** (str) - 需要获取的内容刷新的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态 + - **TaskId** (list) - 提交任务时返回的任务ID + + **Response** + + - **TaskList** (list) - 见 **TaskInfo** 模型定义 + - **TotalCount** (int) - 刷新任务的总数 + + **Response Model** + + **UrlProgressInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **FinishTime** (int) - 任务完成时间。格式为Unix Timestamp + - **Progress** (int) - 刷新进度,单位% + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **Url** (str) - 刷新的单条url + + **TaskInfo** + + - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp + - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 + - **TaskId** (str) - 提交任务时返回的任务ID + - **Type** (str) - file/dir 刷新任务会返回Type,预取任务没有 + - **UrlLists** (list) - 见 **UrlProgressInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DescribeNewUcdnRefreshCacheTaskRequestSchema().dumps(d) + resp = self.invoke("DescribeNewUcdnRefreshCacheTask", d, **kwargs) + return apis.DescribeNewUcdnRefreshCacheTaskResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_bandwidth(self, req=None, **kwargs): + """ GetNewUcdnDomainBandwidth - 获取域名带宽数据 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **BandwidthList** (list) - 见 **BandwidthInfo** 模型定义 + - **Traffic** (str) - 从起始时间到结束时间内的所使用的CDN总流量,单位GB + + **Response Model** + + **BandwidthInfo** + + - **CdnBandwidth** (str) - 返回值返回指定时间区间内CDN的带宽峰值,单位Mbps(如果请求参数Type为0,则Value是五分钟粒度的带宽值,如果Type为1,则Value是1小时的带宽峰值,如果Type为2,则Value是一天内的带宽峰值) + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainBandwidthRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainBandwidth", d, **kwargs) + return apis.GetNewUcdnDomainBandwidthResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_hit_rate(self, req=None, **kwargs): + """ GetNewUcdnDomainHitRate - 获取域名命中率 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **HitRateList** (list) - 见 **HitRateInfo** 模型定义 + + **Response Model** + + **HitRateInfo** + + - **FlowHitRate** (float) - 流量命中率,单位% + - **RequestHitRate** (float) - 请求数命中率,单位% + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainHitRateRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainHitRate", d, **kwargs) + return apis.GetNewUcdnDomainHitRateResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_http_code(self, req=None, **kwargs): + """ GetNewUcdnDomainHttpCode - 获取域名状态码监控 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **HttpCodeDetail** (list) - 见 **HttpCodeInfo** 模型定义 + + **Response Model** + + **HttpCodeInfo** + + - **HttpFiveXX** (int) - 5xx数量 + - **HttpFourXX** (int) - 4xx数量 + - **HttpOneXX** (int) - 1xx数量 + - **HttpThreeXX** (int) - 3xx数量 + - **HttpTwoXX** (int) - 2xx数量 + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainHttpCodeRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainHttpCode", d, **kwargs) + return apis.GetNewUcdnDomainHttpCodeResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_http_code_v2(self, req=None, **kwargs): + """ GetNewUcdnDomainHttpCodeV2 - 获取域名详细状态码监控 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - (Required) 查询的起始时间,格式为Unix Timestamp。 + - **EndTime** (int) - (Required) 查询的结束时间,格式为Unix Timestamp。 + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天粒度,3表示按照一分钟粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + + **Response** + + - **HttpCodeV2Detail** (list) - 见 **HttpCodeV2Detail** 模型定义 + + **Response Model** + + **HttpCodeV2Detail** + + - **Http100** (int) - http100数量 + - **Http101** (int) - http101数量 + - **Http102** (int) - http102数量 + - **Http200** (int) - http200数量 + - **Http201** (int) - http201数量 + - **Http202** (int) - http202数量 + - **Http203** (int) - http203数量 + - **Http204** (int) - http204数量 + - **Http205** (int) - http205数量 + - **Http206** (int) - http206数量 + - **Http207** (int) - http207数量 + - **Http300** (int) - http300数量 + - **Http301** (int) - http301数量 + - **Http302** (int) - http302数量 + - **Http303** (int) - http303数量 + - **Http304** (int) - http304数量 + - **Http305** (int) - http305数量 + - **Http306** (int) - http306数量 + - **Http307** (int) - http307数量 + - **Http400** (int) - http400数量 + - **Http401** (int) - http401数量 + - **Http402** (int) - http402数量 + - **Http403** (int) - http403数量 + - **Http404** (int) - http404数量 + - **Http405** (int) - http405数量 + - **Http406** (int) - http406数量 + - **Http407** (int) - http407数量 + - **Http408** (int) - http408数量 + - **Http409** (int) - http409数量 + - **Http410** (int) - http410数量 + - **Http411** (int) - http411数量 + - **Http412** (int) - http412数量 + - **Http413** (int) - http413数量 + - **Http414** (int) - http414数量 + - **Http415** (int) - http415数量 + - **Http416** (int) - http416数量 + - **Http417** (int) - http417数量 + - **Http418** (int) - http418数量 + - **Http421** (int) - http421数量 + - **Http422** (int) - http422数量 + - **Http423** (int) - http423数量 + - **Http424** (int) - http424数量 + - **Http425** (int) - http425数量 + - **Http426** (int) - http426数量 + - **Http449** (int) - http449数量 + - **Http451** (int) - http451数量 + - **Http500** (int) - http500数量 + - **Http501** (int) - http501数量 + - **Http502** (int) - http502数量 + - **Http503** (int) - http503数量 + - **Http504** (int) - http504数量 + - **Http505** (int) - http505数量 + - **Http506** (int) - http506数量 + - **Http507** (int) - http507数量 + - **Http509** (int) - http509数量 + - **Http510** (int) - http510数量 + - **Time** (int) - 时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainHttpCodeV2RequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainHttpCodeV2", d, **kwargs) + return apis.GetNewUcdnDomainHttpCodeV2ResponseSchema().loads(resp)
+ +
[docs] def get_new_ucdn_domain_request_num(self, req=None, **kwargs): + """ GetNewUcdnDomainRequestNum - 获取域名请求数 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **RequestList** (list) - 见 **RequestInfo** 模型定义 + + **Response Model** + + **RequestInfo** + + - **CdnRequest** (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和 + - **OriginRequest** (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和 + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetNewUcdnDomainRequestNumRequestSchema().dumps(d) + resp = self.invoke("GetNewUcdnDomainRequestNum", d, **kwargs) + return apis.GetNewUcdnDomainRequestNumResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_log(self, req=None, **kwargs): + """ GetUcdnDomainLog - 获取加速域名原始日志 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。 + - **DomainId** (list) - 域名ID,创建加速域名时生成。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + - **Type** (int) - 查询粒度 0=default(没有粒度) 1=按小时 2=按天 + + **Response** + + - **LogSet** (list) - 见 **LogSetList** 模型定义 + + **Response Model** + + **LogSetInfo** + + - **AbroadLog** (list) - 国外日志url列表 + - **CnLog** (list) - 国内日志url列表 + - **Time** (int) - 日志时间UnixTime + + **LogSetList** + + - **Domain** (str) - 域名 + - **Logs** (list) - 见 **LogSetInfo** 模型定义 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainLogRequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainLog", d, **kwargs) + return apis.GetUcdnDomainLogResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_prefetch_enable(self, req=None, **kwargs): + """ GetUcdnDomainPrefetchEnable - 获取域名预取开启状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **DomainId** (str) - (Required) 域名ID,创建加速域名时生成。 + + **Response** + + - **Enable** (int) - 0表示该域名未开启预取,1表示该域名已开启预取 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainPrefetchEnableRequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainPrefetchEnable", d, **kwargs) + return apis.GetUcdnDomainPrefetchEnableResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_request_num_v2(self, req=None, **kwargs): + """ GetUcdnDomainRequestNumV2 - 获取域名请求数 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **BeginTime** (int) - (Required) 查询的起始时间,格式为Unix Timestamp + - **EndTime** (int) - (Required) 查询的结束时间,格式为Unix Timestamp + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度, 3=按1分钟) + - **Areacode** (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + + **Response** + + - **RequestList** (list) - 见 **RequestInfo** 模型定义 + + **Response Model** + + **RequestInfo** + + - **CdnRequest** (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和 + - **OriginRequest** (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和 + - **Time** (int) - 带宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainRequestNumV2RequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainRequestNumV2", d, **kwargs) + return apis.GetUcdnDomainRequestNumV2ResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_domain_traffic(self, req=None, **kwargs): + """ GetUcdnDomainTraffic - 获取加速域名流量使用信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Areacode** (str) - 查询流量区域 cn代表国内 abroad代表海外,默认全部区域。 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。 + - **DomainId** (list) - 域名ID,创建加速域名时生成。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **TrafficSet** (list) - 见 **UcdnDomainTrafficSet** 模型定义 + + **Response Model** + + **UcdnDomainTrafficSet** + + - **Time** (int) - 流量获取的时间点,格式为Unix Timestamp + - **Value** (float) - 查询每日流量总值,单位:GB + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnDomainTrafficRequestSchema().dumps(d) + resp = self.invoke("GetUcdnDomainTraffic", d, **kwargs) + return apis.GetUcdnDomainTrafficResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_pass_bandwidth(self, req=None, **kwargs): + """ GetUcdnPassBandwidth - 获取回源带宽数据(cdn回客户源站部分) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) + - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 + - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 + - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 + - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 + + **Response** + + - **BandwidthDetail** (list) - 见 **BandwidthInfoDetail** 模型定义 + + **Response Model** + + **BandwidthInfoDetail** + + - **Bandwidth** (float) - 返回值带宽值数据。 + - **Time** (int) - 宽获取的时间点。格式:时间戳 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnPassBandwidthRequestSchema().dumps(d) + resp = self.invoke("GetUcdnPassBandwidth", d, **kwargs) + return apis.GetUcdnPassBandwidthResponseSchema().loads(resp)
+ +
[docs] def get_ucdn_traffic(self, req=None, **kwargs): + """ GetUcdnTraffic - 获取流量信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + + **Response** + + - **TrafficSet** (list) - 见 **TrafficSet** 模型定义 + + **Response Model** + + **TrafficSet** + + - **Areacode** (str) - 购买流量的区域, cn: 国内; abroad: 国外 + - **TrafficLeft** (str) - Areacode区域内总剩余流量, 单位GB + - **TrafficTotal** (str) - Areacode区域内总购买流量, 单位GB + - **TrafficUsed** (str) - Areacode区域内总使用流量, 单位GB + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetUcdnTrafficRequestSchema().dumps(d) + resp = self.invoke("GetUcdnTraffic", d, **kwargs) + return apis.GetUcdnTrafficResponseSchema().loads(resp)
+ +
[docs] def prefetch_new_ucdn_domain_cache(self, req=None, **kwargs): + """ PrefetchNewUcdnDomainCache - 提交预取任务 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **UrlList** (list) - (Required) 预热URL列表,n从自然数0开始。UrlList.n字段必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名 + + **Response** + + - **TaskId** (str) - 本次提交url对应的任务id + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.PrefetchNewUcdnDomainCacheRequestSchema().dumps(d) + resp = self.invoke("PrefetchNewUcdnDomainCache", d, **kwargs) + return apis.PrefetchNewUcdnDomainCacheResponseSchema().loads(resp)
+ +
[docs] def refresh_new_ucdn_domain_cache(self, req=None, **kwargs): + """ RefreshNewUcdnDomainCache - 刷新缓存 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Type** (str) - (Required) 刷新类型,file代表文件刷新,dir 代表路径刷新 + - **UrlList** (list) - (Required) 刷新多个URL列表时,一次最多提交30个。必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名 + + **Response** + + - **TaskId** (str) - 本次提交url对应的任务id + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.RefreshNewUcdnDomainCacheRequestSchema().dumps(d) + resp = self.invoke("RefreshNewUcdnDomainCache", d, **kwargs) + return apis.RefreshNewUcdnDomainCacheResponseSchema().loads(resp)
+ +
[docs] def switch_ucdn_charge_type(self, req=None, **kwargs): + """ SwitchUcdnChargeType - 切换账号计费方式 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ChargeType** (str) - (Required) 计费方式。traffic代表按流量包计费,bandwidth按带宽付费 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.SwitchUcdnChargeTypeRequestSchema().dumps(d) + resp = self.invoke("SwitchUcdnChargeType", d, **kwargs) + return apis.SwitchUcdnChargeTypeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/ucloudstack/client.html b/docs/build/html/_modules/ucloud/services/ucloudstack/client.html new file mode 100644 index 0000000..9b23ff9 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/ucloudstack/client.html @@ -0,0 +1,2716 @@ + + + + + + + + ucloud.services.ucloudstack.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ucloudstack.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ucloudstack.schemas import apis
+
+
+
[docs]class UCloudStackClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UCloudStackClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def allocate_eip(self, req=None, **kwargs): + """ AllocateEIP - 申请外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Bandwidth** (int) - (Required) 带宽,默认值1,默认范围1~100 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Name** (str) - (Required) 名称 + - **OperatorName** (str) - (Required) 线路。目前支持Bgp + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **EIPID** (str) - 申请的EIP的ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.AllocateEIPRequestSchema().dumps(d) + resp = self.invoke("AllocateEIP", d, **kwargs) + return apis.AllocateEIPResponseSchema().loads(resp)
+ +
[docs] def attach_disk(self, req=None, **kwargs): + """ AttachDisk - 绑定硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 硬盘ID + - **ResourceID** (str) - (Required) 绑定的资源ID + - **ResourceType** (str) - (Required) 绑定的资源类型,枚举值:VM,标识虚拟机 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.AttachDiskRequestSchema().dumps(d) + resp = self.invoke("AttachDisk", d, **kwargs) + return apis.AttachDiskResponseSchema().loads(resp)
+ +
[docs] def bind_alarm_template(self, req=None, **kwargs): + """ BindAlarmTemplate - 绑定告警模板 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **AlarmTemplateID** (str) - (Required) 告警模板ID + - **ResourceIDs** (list) - (Required) 【数组】告警模板ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性IP + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindAlarmTemplateRequestSchema().dumps(d) + resp = self.invoke("BindAlarmTemplate", d, **kwargs) + return apis.BindAlarmTemplateResponseSchema().loads(resp)
+ +
[docs] def bind_eip(self, req=None, **kwargs): + """ BindEIP - 绑定UCoudStack外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 + - **EIPID** (str) - (Required) 外网IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindEIPRequestSchema().dumps(d) + resp = self.invoke("BindEIP", d, **kwargs) + return apis.BindEIPResponseSchema().loads(resp)
+ +
[docs] def bind_physical_ip(self, req=None, **kwargs): + """ BindPhysicalIP - 绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **PhysicalIPID** (str) - (Required) 物理IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindPhysicalIPRequestSchema().dumps(d) + resp = self.invoke("BindPhysicalIP", d, **kwargs) + return apis.BindPhysicalIPResponseSchema().loads(resp)
+ +
[docs] def bind_security_group(self, req=None, **kwargs): + """ BindSecurityGroup - 绑定安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **ResourceID** (str) - (Required) 绑定的资源ID。调用方式举例:ResourceID=“one-id”。 + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **NICID** (str) - 网卡ID + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.BindSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("BindSecurityGroup", d, **kwargs) + return apis.BindSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def clone_disk(self, req=None, **kwargs): + """ CloneDisk - 克隆硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Name** (str) - (Required) 名称 + - **SrcID** (str) - (Required) 源硬盘ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **DiskID** (str) - 克隆出的硬盘ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CloneDiskRequestSchema().dumps(d) + resp = self.invoke("CloneDisk", d, **kwargs) + return apis.CloneDiskResponseSchema().loads(resp)
+ +
[docs] def create_certificate(self, req=None, **kwargs): + """ CreateCertificate - 创建证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Certificate** (str) - (Required) 证书内容 + - **CertificateType** (str) - (Required) 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。只有在双向认证的时候才需要CA证书 + - **Name** (str) - (Required) 证书名称 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PrivateKey** (str) - 私钥内容,服务器证书必传,CA证书不用传递 + - **Remark** (str) - 证书描述 + + **Response** + + - **CertificateID** (str) - 证书ID + - **Message** (str) - 错误描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateCertificateRequestSchema().dumps(d) + resp = self.invoke("CreateCertificate", d, **kwargs) + return apis.CreateCertificateResponseSchema().loads(resp)
+ +
[docs] def create_custom_image(self, req=None, **kwargs): + """ CreateCustomImage - 创建自制镜像 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ImageName** (str) - (Required) 镜像名称 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **ImageDescription** (str) - 镜像描述。 + + **Response** + + - **ImageID** (str) - 创建的自制镜像ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateCustomImageRequestSchema().dumps(d) + resp = self.invoke("CreateCustomImage", d, **kwargs) + return apis.CreateCustomImageResponseSchema().loads(resp)
+ +
[docs] def create_disk(self, req=None, **kwargs): + """ CreateDisk - 创建硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DiskSpace** (int) - (Required) 磁盘大小 + - **Name** (str) - (Required) 磁盘名称 + - **SetType** (str) - (Required) 磁盘类型。例如:Normal,SSD + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **DiskID** (str) - 创建的磁盘ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateDiskRequestSchema().dumps(d) + resp = self.invoke("CreateDisk", d, **kwargs) + return apis.CreateDiskResponseSchema().loads(resp)
+ +
[docs] def create_lb(self, req=None, **kwargs): + """ CreateLB - 创建负载均衡 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **LBType** (str) - (Required) 枚举值。LAN:内网,WAN:外网 + - **Name** (str) - (Required) 名称。 + - **SubnetID** (str) - (Required) LB 实例所在的子网 ID 。 + - **VMType** (str) - (Required) 运行负载均衡实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口) + - **VPCID** (str) - (Required) LB实例所在的 VPC ID 。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **EIPID** (str) - 外网IP的ID,创建外网LB时为必需 + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + - **Remark** (str) - 描述。 + - **SGID** (str) - 安全组ID,创建外网LB时为必需 + + **Response** + + - **LBID** (str) - 返回创建的负载均衡ID + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateLBRequestSchema().dumps(d) + resp = self.invoke("CreateLB", d, **kwargs) + return apis.CreateLBResponseSchema().loads(resp)
+ +
[docs] def create_natgw(self, req=None, **kwargs): + """ CreateNATGW - 创建NAT网关 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **EIPID** (str) - (Required) 外网IP的ID + - **Name** (str) - (Required) 名称。 + - **SGID** (str) - (Required) 安全组ID + - **SubnetID** (str) - (Required) NAT网关实例所在的子网 ID + - **VMType** (str) - (Required) 运行NAT网关实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口) + - **VPCID** (str) - (Required) NAT网关实例所在的 VPC ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + - **Remark** (str) - 描述 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **NATGWID** (str) - 返回创建的NAT网关ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateNATGWRequestSchema().dumps(d) + resp = self.invoke("CreateNATGW", d, **kwargs) + return apis.CreateNATGWResponseSchema().loads(resp)
+ +
[docs] def create_natgw_rule(self, req=None, **kwargs): + """ CreateNATGWRule - 添加NAT网关白名单 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BindResourceID** (str) - (Required) 绑定的虚拟机资源ID + - **NATGWID** (str) - (Required) NAT网关ID + - **NATGWType** (str) - (Required) NAT的类型。枚举值:SNAT,DNAT + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + - **RuleID** (str) - 白名单ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateNATGWRuleRequestSchema().dumps(d) + resp = self.invoke("CreateNATGWRule", d, **kwargs) + return apis.CreateNATGWRuleResponseSchema().loads(resp)
+ +
[docs] def create_physical_ip(self, req=None, **kwargs): + """ CreatePhysicalIP - 创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Name** (str) - (Required) 物理IP名称,限制字符长度30 + - **OperatorName** (str) - (Required) 物理IP线路 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述 + + **Response** + + - **Message** (str) - 返回信息描述 + - **PhysicalIPID** (str) - 返回创建的物理IP的ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreatePhysicalIPRequestSchema().dumps(d) + resp = self.invoke("CreatePhysicalIP", d, **kwargs) + return apis.CreatePhysicalIPResponseSchema().loads(resp)
+ +
[docs] def create_rs(self, req=None, **kwargs): + """ CreateRS - 为负载均衡的 VServer 添加后端服务节点。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BindResourceID** (str) - (Required) 服务节点的资源 ID ,仅支持添加与 LB 相同 VPC 的虚拟机资源 + - **LBID** (str) - (Required) 负载均衡ID + - **Port** (int) - (Required) 服务节点暴露的服务端口号 + - **VSID** (str) - (Required) VServer的ID + - **Weight** (int) - (Required) 服务节点的权重 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + - **RSID** (str) - 返回创建的RSID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateRSRequestSchema().dumps(d) + resp = self.invoke("CreateRS", d, **kwargs) + return apis.CreateRSResponseSchema().loads(resp)
+ +
[docs] def create_security_group(self, req=None, **kwargs): + """ CreateSecurityGroup - 创建安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **Rule** (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述; + - **SGID** (str) - 创建的安全组ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("CreateSecurityGroup", d, **kwargs) + return apis.CreateSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def create_security_group_rule(self, req=None, **kwargs): + """ CreateSecurityGroupRule - 创建安全组规则 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Rules** (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述; + - **SGRuleID** (str) - 创建的安全组规则ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSecurityGroupRuleRequestSchema().dumps(d) + resp = self.invoke("CreateSecurityGroupRule", d, **kwargs) + return apis.CreateSecurityGroupRuleResponseSchema().loads(resp)
+ +
[docs] def create_snapshot(self, req=None, **kwargs): + """ CreateSnapshot - 创建硬盘快照 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **DiskID** (str) - (Required) 硬盘ID,输入“有效”状态的ID + - **Name** (str) - (Required) 快照名称,限制字符长度30 + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + - **Remark** (str) - 描述,限制字符长度100 + + **Response** + + - **Message** (str) - 返回信息描述 + - **SnapshotID** (str) - 创建的快照ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSnapshotRequestSchema().dumps(d) + resp = self.invoke("CreateSnapshot", d, **kwargs) + return apis.CreateSnapshotResponseSchema().loads(resp)
+ +
[docs] def create_subnet(self, req=None, **kwargs): + """ CreateSubnet - 创建子网 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **Network** (str) - (Required) 网段。列如:10.0.0.0/16; + - **VPCID** (str) - (Required) 所属VPCID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述; + - **SubnetID** (str) - 创建Subnet的ID; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateSubnetRequestSchema().dumps(d) + resp = self.invoke("CreateSubnet", d, **kwargs) + return apis.CreateSubnetResponseSchema().loads(resp)
+ +
[docs] def create_user(self, req=None, **kwargs): + """ CreateUser - 管理员添加账号 + + **Request** + + - **PassWord** (str) - (Required) 账号密码。 + - **UserEmail** (str) - (Required) 账号邮箱。 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **UserID** (int) - 账户ID + + """ + d = {} + req and d.update(req) + d = apis.CreateUserRequestSchema().dumps(d) + resp = self.invoke("CreateUser", d, **kwargs) + return apis.CreateUserResponseSchema().loads(resp)
+ +
[docs] def create_vm_instance(self, req=None, **kwargs): + """ CreateVMInstance - 创建虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BootDiskSetType** (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **CPU** (int) - (Required) CPU个数,如1,2,4,8,16,32,64等。 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DataDiskSetType** (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **ImageID** (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。 + - **Memory** (int) - (Required) 内存容量,如1024,2048,4096,8192,16384,32768,65535等。 + - **Name** (str) - (Required) 虚拟机名称。可输入如:myVM。名称只能包含中英文、数字以及- _ .且1-30个字符。 + - **Password** (str) - (Required) 密码。可输入如:ucloud.cn。密码长度限6-30个字符;需要同时包含两项或以上(大写字母/小写字母/数字/特殊符号);windows不能包含用户名(administrator)中超过2个连续字符的部分。 + - **SubnetID** (str) - (Required) 子网 ID。 + - **VMType** (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD; + - **VPCID** (str) - (Required) VPC ID。 + - **WANSGID** (str) - (Required) 外网安全组 ID。输入“有效”状态的安全组的ID。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Bandwidth** (str) - 带宽 + - **DataDiskSpace** (int) - 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 + - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. + - **IPVersion** (str) - 外网IP版本,默认IPv4 + - **InternalIP** (str) - 指定内网IP。输入有效的指定内网 IP。默认为系统自动分配内网 IP。 + - **InternetIP** (str) - 指定外网IP + - **LANSGID** (str) - 内网安全组 ID。输入“有效”状态的安全组的ID。 + - **OperatorName** (str) - 线路 + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **DiskID** (str) - 返回创建数据盘的 ID + - **EIPID** (str) - 返回创建外网IP的 ID + - **Message** (str) - 返回信息描述。 + - **VMID** (str) - 返回创建虚拟机的 ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVMInstanceRequestSchema().dumps(d) + resp = self.invoke("CreateVMInstance", d, **kwargs) + return apis.CreateVMInstanceResponseSchema().loads(resp)
+ +
[docs] def create_vpc(self, req=None, **kwargs): + """ CreateVPC - 创建VPC + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **Network** (str) - (Required) 网段。例如:10.0.0.0/16; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述; + - **VPCID** (str) - 创建的VPCID; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVPCRequestSchema().dumps(d) + resp = self.invoke("CreateVPC", d, **kwargs) + return apis.CreateVPCResponseSchema().loads(resp)
+ +
[docs] def create_vs(self, req=None, **kwargs): + """ CreateVS - 创建负载均衡VServer + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **HealthcheckType** (str) - (Required) 健康检查类型,枚举值,Port:端口,Path:域名。TCP和UDP协议只支持Port类型。 + - **LBID** (str) - (Required) 负载均衡ID + - **Port** (int) - (Required) VServer 的监听端口。端口范围为 1~65535 ,其中 323、9102、9103、9104、9105、60909、60910 被系统占用。 + - **Protocol** (str) - (Required) VServer 的监听协议。枚举值:支持 TCP、UDP、HTTP、HTTPS 四种协议转发。 + - **Scheduler** (str) - (Required) 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 + - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 + - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。 + - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 + - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 + - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 + - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS时有效。 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **VSID** (str) - 返回创建的VSID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVSRequestSchema().dumps(d) + resp = self.invoke("CreateVS", d, **kwargs) + return apis.CreateVSResponseSchema().loads(resp)
+ +
[docs] def create_vs_policy(self, req=None, **kwargs): + """ CreateVSPolicy - 创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSIDs** (list) - (Required) 【数组】内容转发规则应用的服务节点的 ID,来源于 VServer 中添加的服务节点。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。 + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。 + + **Response** + + - **Message** (str) - 返回信息描述。 + - **PolicyID** (str) - 返回创建的内容转发规则ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.CreateVSPolicyRequestSchema().dumps(d) + resp = self.invoke("CreateVSPolicy", d, **kwargs) + return apis.CreateVSPolicyResponseSchema().loads(resp)
+ +
[docs] def delete_certificate(self, req=None, **kwargs): + """ DeleteCertificate - 删除证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CertificateID** (str) - (Required) 证书ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteCertificateRequestSchema().dumps(d) + resp = self.invoke("DeleteCertificate", d, **kwargs) + return apis.DeleteCertificateResponseSchema().loads(resp)
+ +
[docs] def delete_custom_image(self, req=None, **kwargs): + """ DeleteCustomImage - 删除自制镜像 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ImageID** (str) - (Required) 自制镜像ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteCustomImageRequestSchema().dumps(d) + resp = self.invoke("DeleteCustomImage", d, **kwargs) + return apis.DeleteCustomImageResponseSchema().loads(resp)
+ +
[docs] def delete_disk(self, req=None, **kwargs): + """ DeleteDisk - 删除硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 被删除的硬盘ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteDiskRequestSchema().dumps(d) + resp = self.invoke("DeleteDisk", d, **kwargs) + return apis.DeleteDiskResponseSchema().loads(resp)
+ +
[docs] def delete_lb(self, req=None, **kwargs): + """ DeleteLB - 删除负载均衡 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteLBRequestSchema().dumps(d) + resp = self.invoke("DeleteLB", d, **kwargs) + return apis.DeleteLBResponseSchema().loads(resp)
+ +
[docs] def delete_natgw(self, req=None, **kwargs): + """ DeleteNATGW - 删除NAT网关 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **NATGWID** (str) - (Required) NAT网关ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteNATGWRequestSchema().dumps(d) + resp = self.invoke("DeleteNATGW", d, **kwargs) + return apis.DeleteNATGWResponseSchema().loads(resp)
+ +
[docs] def delete_natgw_rule(self, req=None, **kwargs): + """ DeleteNATGWRule - 删除NAT网关白名单 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **NATGWID** (str) - (Required) nat网关ID + - **RuleID** (str) - (Required) 白名单ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteNATGWRuleRequestSchema().dumps(d) + resp = self.invoke("DeleteNATGWRule", d, **kwargs) + return apis.DeleteNATGWRuleResponseSchema().loads(resp)
+ +
[docs] def delete_physical_ip(self, req=None, **kwargs): + """ DeletePhysicalIP - 删除物理IP + + **Request** + + - **Region** (str) - (Config) 地域。 + - **PhysicalIPID** (str) - (Required) 物理IP的ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回状态描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeletePhysicalIPRequestSchema().dumps(d) + resp = self.invoke("DeletePhysicalIP", d, **kwargs) + return apis.DeletePhysicalIPResponseSchema().loads(resp)
+ +
[docs] def delete_rs(self, req=None, **kwargs): + """ DeleteRS - 移除负载均衡的单个服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteRSRequestSchema().dumps(d) + resp = self.invoke("DeleteRS", d, **kwargs) + return apis.DeleteRSResponseSchema().loads(resp)
+ +
[docs] def delete_security_group(self, req=None, **kwargs): + """ DeleteSecurityGroup - 删除安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteSecurityGroup", d, **kwargs) + return apis.DeleteSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def delete_security_group_rule(self, req=None, **kwargs): + """ DeleteSecurityGroupRule - 删除安全组规则 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **SGID** (str) - (Required) 安全组ID + - **SGRuleID** (str) - (Required) 安全组规则ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSecurityGroupRuleRequestSchema().dumps(d) + resp = self.invoke("DeleteSecurityGroupRule", d, **kwargs) + return apis.DeleteSecurityGroupRuleResponseSchema().loads(resp)
+ +
[docs] def delete_snapshot(self, req=None, **kwargs): + """ DeleteSnapshot - 删除快照,仅支持状态为正常的快照进行删除操作。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **SnapshotID** (str) - (Required) 快照ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSnapshotRequestSchema().dumps(d) + resp = self.invoke("DeleteSnapshot", d, **kwargs) + return apis.DeleteSnapshotResponseSchema().loads(resp)
+ +
[docs] def delete_subnet(self, req=None, **kwargs): + """ DeleteSubnet - 删除子网 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **SubnetID** (str) - (Required) SubnetID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteSubnetRequestSchema().dumps(d) + resp = self.invoke("DeleteSubnet", d, **kwargs) + return apis.DeleteSubnetResponseSchema().loads(resp)
+ +
[docs] def delete_vm_instance(self, req=None, **kwargs): + """ DeleteVMInstance - 删除虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。 枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机 ID。输入有效的虚拟机 ID。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVMInstanceRequestSchema().dumps(d) + resp = self.invoke("DeleteVMInstance", d, **kwargs) + return apis.DeleteVMInstanceResponseSchema().loads(resp)
+ +
[docs] def delete_vpc(self, req=None, **kwargs): + """ DeleteVPC - 删除VPC + + **Request** + + - **Region** (str) - (Config) 地域。 + - **VPCID** (str) - (Required) ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVPCRequestSchema().dumps(d) + resp = self.invoke("DeleteVPC", d, **kwargs) + return apis.DeleteVPCResponseSchema().loads(resp)
+ +
[docs] def delete_vs(self, req=None, **kwargs): + """ DeleteVS - 删除VServer + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID + - **VSID** (str) - (Required) 负载均衡VServer监听器ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVSRequestSchema().dumps(d) + resp = self.invoke("DeleteVS", d, **kwargs) + return apis.DeleteVSResponseSchema().loads(resp)
+ +
[docs] def delete_vs_policy(self, req=None, **kwargs): + """ DeleteVSPolicy - 删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **PolicyID** (str) - (Required) 内容转发规则ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DeleteVSPolicyRequestSchema().dumps(d) + resp = self.invoke("DeleteVSPolicy", d, **kwargs) + return apis.DeleteVSPolicyResponseSchema().loads(resp)
+ +
[docs] def describe_certificate(self, req=None, **kwargs): + """ DescribeCertificate - 查询证书 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CertificateIDs** (list) - 证书ID列表 + - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。 + - **Limit** (int) - 返回数据长度,默认为20,最大100 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + + **Response** + + - **Infos** (list) - 见 **CertificateInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 证书总个数 + + **Response Model** + + **BindVSInfo** + + - **LBID** (str) - LB ID + - **LBName** (str) - LB名称 + - **Port** (int) - VS的端口 + - **Protocol** (str) - VS的协议 + - **VSID** (str) - VS ID + + **CertificateInfo** + + - **CertificateContent** (str) - 证书内容 + - **CertificateID** (str) - 证书ID + - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"] + - **CommonName** (str) - 主域名 + - **CreateTime** (int) - 创建时间(平台创建时间) + - **ExpireTime** (int) - 证书内容的过期时间 + - **Fingerprint** (str) - 证书指纹 + - **Name** (str) - 证书名 + - **Privatekey** (str) - 私钥内容 + - **Region** (str) - 地域 + - **Remark** (str) - 证书描述 + - **SubjectAlternativeNames** (list) - 备域名 + - **VSInfos** (list) - 见 **BindVSInfo** 模型定义 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeCertificateRequestSchema().dumps(d) + resp = self.invoke("DescribeCertificate", d, **kwargs) + return apis.DescribeCertificateResponseSchema().loads(resp)
+ +
[docs] def describe_disk(self, req=None, **kwargs): + """ DescribeDisk - 获取硬盘信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **DiskIDs** (list) - 【数组】磁盘的 ID。输入有效的 ID。调用方式举例:DiskIDs.0=“one-id”、DiskIDs.1=“two-id”。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Infos** (list) - 见 **DiskInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回磁盘总个数。 + + **Response Model** + + **DiskInfo** + + - **AttachResourceID** (str) - 绑定资源ID + - **ChargeType** (str) - 硬盘计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间。时间戳 + - **DiskID** (str) - 硬盘ID + - **DiskStatus** (str) - 硬盘状态。Creating:创建中,BeingCloned:正在被克隆中,Unbound:已解绑,Unbounding:解绑中,Bounding:绑定中,Bound:已绑定,Upgrading:升级中,Deleting:删除中,Deleted:已删除,Releasing:销毁中,Released:已销毁 + - **ExpireTime** (int) - 过期时间。时间戳 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **SetType** (str) - 磁盘类型。例如:Normal,SSD + - **Size** (int) - 大小。单位GB + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeDiskRequestSchema().dumps(d) + resp = self.invoke("DescribeDisk", d, **kwargs) + return apis.DescribeDiskResponseSchema().loads(resp)
+ +
[docs] def describe_eip(self, req=None, **kwargs): + """ DescribeEIP - 获取外网IP的信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **EIPIDs** (list) - 【数组】外网的 ID。输入有效的 ID。调用方式举例:EIPIDs.0=“one-id”、EIPIDs.1=“two-id” + - **Limit** (str) - 返回数据长度,默认为20,最大100。 + - **Offset** (str) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Infos** (list) - 见 **EIPInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **Totalcount** (int) - 返回现有外网IP总数 + + **Response Model** + + **EIPInfo** + + - **Bandwidth** (int) - 带宽大小 + - **BindResourceID** (str) - 绑定资源ID + - **BindResourceType** (str) - 绑定资源类型 + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间。时间戳 + - **EIPID** (str) - ID + - **ExpireTime** (int) - 过期时间。时间戳 + - **IP** (str) - 外网IP + - **Name** (str) - 名称 + - **OperatorName** (str) - 线路 + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **Status** (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁,BandwidthChanging:带宽修改中 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeEIPRequestSchema().dumps(d) + resp = self.invoke("DescribeEIP", d, **kwargs) + return apis.DescribeEIPResponseSchema().loads(resp)
+ +
[docs] def describe_image(self, req=None, **kwargs): + """ DescribeImage - 获取镜像信息,包括默认镜像和自制镜像。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **ImageIDs** (list) - 【数组】镜像的 ID。输入有效的 ID。调用方式举例:ImageIDs.0=“one-id”、ImageIDs.1=“two-id”。 + - **ImageType** (str) - 镜像类型。枚举值:Base(基础镜像,平台默认提供的镜像),Custom(自制镜像,通过虚拟机导出的镜像) 。若该值为空,默认查询所有镜像。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Action** (str) - 操作名称 + - **Infos** (list) - 见 **ImageInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **RetCode** (int) - 返回码 + - **TotalCount** (int) - 返回镜像的总个数。 + + **Response Model** + + **ImageInfo** + + - **CreateTime** (int) - 创建时间。时间戳。 + - **ImageID** (str) - 镜像ID + - **ImageStatus** (str) - 镜像状态。枚举类型:Making(创建中),Available(可用),Unavailable(不可用),Terminating(销毁中),Used(被使用中),Deleting(删除中),Deleted(已删除), Uploading(导入中) + - **ImageType** (str) - 镜像类型。枚举类型:Base(基础镜像),Custom(自制镜像)。 + - **Name** (str) - 镜像名称 + - **OSDistribution** (str) - 镜像系统发行版本。例如:Centos, Ubuntu, Windows等 + - **OSName** (str) - 系统名称。例如:CentOS 7.4 x86_64 + - **OSType** (str) - 系统类型。例如:Linux, Windows,Kylin + - **Region** (str) - 地域 + - **SetArch** (str) - 架构名称。例如:x86_64 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeImageRequestSchema().dumps(d) + resp = self.invoke("DescribeImage", d, **kwargs) + return apis.DescribeImageResponseSchema().loads(resp)
+ +
[docs] def describe_lb(self, req=None, **kwargs): + """ DescribeLB - 获取负载均衡信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **LBIDs** (list) - 【数组】负载均衡的 ID。调用方式举例:LBIDs.0=“one-id”、LBIDs.1=“two-id”。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **SubnetID** (str) - 子网ID + - **VPCID** (str) - VPCID + + **Response** + + - **Infos** (list) - 见 **LBInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回负载均衡总个数。 + + **Response Model** + + **LBInfo** + + - **AlarmTemplateID** (str) - 告警模板ID + - **ChargeType** (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间,时间戳 + - **ExpireTime** (int) - 过期时间,时间戳 + - **LBID** (str) - 负载均衡ID + - **LBStatus** (str) - 状态。Creating:创建中,Running:运行中,Deleting:删除中,Deleted:已删除 + - **LBType** (str) - 负载均衡类型,枚举值,WAN:外网负载均衡,LAN:内网负载均衡。 + - **Name** (str) - 名称 + - **PrivateIP** (str) - 负载均衡的内网 IP 地址,当LB为外网类型时,该值为空。 + - **PublicIP** (str) - 负载均衡的外网 IP 地址,当LB为内网类型时,该值为空。 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **SGID** (str) - 安全组 ID ,当LB为内网类型时,该值为空。 + - **SubnetID** (str) - 子网ID + - **VPCID** (str) - VPCID + - **VSCount** (int) - VServer的数量 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeLBRequestSchema().dumps(d) + resp = self.invoke("DescribeLB", d, **kwargs) + return apis.DescribeLBResponseSchema().loads(resp)
+ +
[docs] def describe_metric(self, req=None, **kwargs): + """ DescribeMetric - 获取资源监控信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BeginTime** (str) - (Required) 开始时间。使用unix时间戳 + - **EndTime** (str) - (Required) 结束时间。使用Unix时间戳 + - **MetricName** (list) - (Required) 监控指标。1. 获取虚拟机监控信息调用举例,MetricName.0="CPUUtilization"、MetricName.0="MemUsage"。虚拟机监控指标枚举值:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数;2. EIP监控指标:NetPacketIn:入包量;NetPacketOut:出包量;NICIn:入带宽;NICOut:出带宽;NICOutUsage:出带宽使用率; + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机;EIP:弹性IP + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,中国; + + **Response** + + - **Infos** (list) - 见 **MetricInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回监控信息条数 + + **Response Model** + + **MetricSet** + + - **Timestamp** (int) - 监控时间 + - **Value** (float) - 监控值 + + **MetricInfo** + + - **Infos** (list) - 见 **MetricSet** 模型定义 + - **MetricName** (str) - 监控指标。虚拟机的监控指标枚举值为:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeMetricRequestSchema().dumps(d) + resp = self.invoke("DescribeMetric", d, **kwargs) + return apis.DescribeMetricResponseSchema().loads(resp)
+ +
[docs] def describe_natgw(self, req=None, **kwargs): + """ DescribeNATGW - 获取NAT网关信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **NATGWIDs** (list) - 【数组】NAT网关的 ID。调用方式举例:NATGWIDs.0=“one-id”、NATGWIDs.1=“two-id”。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + + **Response** + + - **Infos** (list) - 见 **NATGWInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回NAT网关总个数 + + **Response Model** + + **NATGWInfo** + + - **AlarmTemplateID** (str) - 告警模板ID + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 创建时间,时间戳 + - **EIP** (str) - 虚拟IP + - **ExpireTime** (int) - 过期时间,时间戳 + - **NATGWID** (str) - NAT网关ID + - **NATGWStatus** (str) - 状态。Creating:创建中, Running:运行中, Deleting:删除中, Deleted:已删除 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **SGID** (str) - NAT网关绑定的安全组ID + - **SubnetID** (str) - NAT网关实例所在的子网 ID + - **VPCID** (str) - NAT网关实例所在的 VPC ID + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeNATGWRequestSchema().dumps(d) + resp = self.invoke("DescribeNATGW", d, **kwargs) + return apis.DescribeNATGWResponseSchema().loads(resp)
+ +
[docs] def describe_natgw_rule(self, req=None, **kwargs): + """ DescribeNATGWRule - 获取NAT网关白名单信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **NATGWID** (str) - (Required) NAT网关ID + - **NATGWType** (str) - (Required) NAT类型。枚举值:SNAT,DNAT + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **BindResourceIDs** (list) - 【数组】NAT网关白名单资源ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **RuleIDs** (list) - 【数组】NAT网关白名单ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。 + + **Response** + + - **Infos** (list) - 见 **NATGWRuleInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回NAT网关白名单资源总个数。 + + **Response Model** + + **NATGWRuleInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **BindResourceType** (str) - 绑定资源的类型 + - **CreateTime** (int) - 创建时间,时间戳。 + - **IP** (str) - 白名单资源的内网IP地址 + - **NATGWID** (str) - NAT网关ID + - **NATGWType** (str) - nat网关类型 + - **Name** (str) - 添加的白名单资源名称 + - **RuleID** (str) - 白名单ID + - **RuleStatus** (str) - 状态。Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Unbound:已解绑 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeNATGWRuleRequestSchema().dumps(d) + resp = self.invoke("DescribeNATGWRule", d, **kwargs) + return apis.DescribeNATGWRuleResponseSchema().loads(resp)
+ +
[docs] def describe_op_logs(self, req=None, **kwargs): + """ DescribeOPLogs - 查询操作日志 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BeginTime** (int) - (Required) 开始时间 + - **EndTime** (int) - (Required) 结束时间 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **IsSuccess** (str) - 是否操作成功 + - **Limit** (int) - + - **Offset** (int) - + - **ResourceID** (str) - 资源ID + - **ResourceType** (str) - 资源类型 + + **Response** + + - **Infos** (list) - 见 **OPLogInfo** 模型定义 + - **Message** (str) - 错误信息 + - **TotalCount** (int) - 总数 + + **Response Model** + + **OPLogInfo** + + - **CreateTime** (int) - 创建时间 + - **IsSuccess** (str) - 是否操作成功, Yes, No + - **OPLogsID** (str) - 日志ID + - **OPName** (str) - API + - **OPTime** (int) - 操作时间 + - **OpMessage** (str) - 错误信息 + - **Region** (str) - + - **ResourceID** (str) - 资源ID + - **ResourceType** (int) - 资源类型 + - **RetCode** (int) - 状态码 + - **UserEmail** (str) - 账号邮箱 + - **Zone** (str) - + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeOPLogsRequestSchema().dumps(d) + resp = self.invoke("DescribeOPLogs", d, **kwargs) + return apis.DescribeOPLogsResponseSchema().loads(resp)
+ +
[docs] def describe_physical_ip(self, req=None, **kwargs): + """ DescribePhysicalIP - 获取物理IP信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (str) - 返回数据长度,默认为20,最大100。 + - **Offset** (str) - 列表起始位置偏移量,默认为0。 + - **PhysicalIPIDs** (list) - 【数组】物理IP的 ID。输入有效的 ID。调用方式举例:PhysicalIPIDs.0=“one-id”、PhysicalIPIDs.1=“two-id” + + **Response** + + - **Infos** (list) - 见 **PhysicalIPInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回现有物理IP总数 + + **Response Model** + + **PhysicalIPInfo** + + - **BindResourceID** (str) - 绑定资源ID + - **BindResourceType** (str) - 绑定资源类型 + - **CreateTime** (int) - 创建时间。时间戳 + - **IP** (str) - 物理IP + - **Name** (str) - 名称 + - **OperatorName** (str) - 线路 + - **PhysicalIPID** (str) - 物理IP的ID + - **Region** (str) - 地域 + - **Remark** (str) - 备注 + - **Status** (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁 + - **UpdateTime** (int) - 过期时间。时间戳 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribePhysicalIPRequestSchema().dumps(d) + resp = self.invoke("DescribePhysicalIP", d, **kwargs) + return apis.DescribePhysicalIPResponseSchema().loads(resp)
+ +
[docs] def describe_rs(self, req=None, **kwargs): + """ DescribeRS - 获取负载均衡服务的服务节点信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **RSIDs** (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 + - **VSID** (str) - VServer的ID + + **Response** + + - **Infos** (list) - 见 **RSInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回该负载均衡下VServer的总个数。 + + **Response Model** + + **RSInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **CreateTime** (int) - 创建时间,时间戳 + - **IP** (str) - 服务节点的内网 IP 地址 + - **LBID** (str) - 服务节点所属的负载均衡 ID + - **Name** (str) - 服务节点的资源名称 + - **Port** (int) - 服务节点暴露的服务端口号 + - **RSID** (str) - 服务节点的 ID + - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 + - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - 服务节点所属的 VServer ID + - **Weight** (int) - 服务节点的权重 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeRSRequestSchema().dumps(d) + resp = self.invoke("DescribeRS", d, **kwargs) + return apis.DescribeRSResponseSchema().loads(resp)
+ +
[docs] def describe_recycled_resource(self, req=None, **kwargs): + """ DescribeRecycledResource - 查询回收站资源 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **ResourceIDs** (list) - 【数组】资源ID,输入“有效”的ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 + + **Response** + + - **Infos** (list) - 见 **RecycledResourceInfo** 模型定义 + - **TotalCount** (int) - 返回回收站资源的总个数 + + **Response Model** + + **RecycledResourceInfo** + + - **CreateTime** (int) - 创建时间 + - **DeleteTime** (int) - 删除时间 + - **Description** (str) - 描述 + - **ExpireTime** (int) - 过期时间 + - **IsAutoTerminated** (bool) - 是否自动销户 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **ResourceID** (str) - 资源ID + - **ResourceType** (str) - 资源类型:VM:虚拟机,Disk:硬盘,EIP:外网IP,PIP:物理IP,MySQL:数据库,Redis:缓存 + - **Status** (str) - 资源状态 + - **WillTerminateTime** (int) - 销毁时间 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeRecycledResourceRequestSchema().dumps(d) + resp = self.invoke("DescribeRecycledResource", d, **kwargs) + return apis.DescribeRecycledResourceResponseSchema().loads(resp)
+ +
[docs] def describe_security_group(self, req=None, **kwargs): + """ DescribeSecurityGroup - 查询安全组信息 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **SGIDs** (list) - 【数组】安全组的 ID。输入有效的 ID。调用方式举例:SGIDs.0=“one-id”、SGIDs.1=“two-id” + + **Response** + + - **Infos** (list) - 见 **SGInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 安全组的总数 + + **Response Model** + + **SGRuleInfo** + + - **DstPort** (str) - 端口号 + - **IsIn** (str) - 方向。1:入,0:出 + - **Priority** (str) - 优先级。HIGH:高,MEDIUM:中,LOW:低 + - **ProtocolType** (str) - 协议 + - **RuleAction** (str) - 动作。ACCEPT:接受,DROP:拒绝 + - **RuleID** (str) - 规则ID + - **SrcIP** (str) - IP或者掩码/段形式。10.0.0.2,10.0.10.10/16 + + **SGInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **ResourceCount** (int) - 资源绑定数量 + - **Rule** (list) - 见 **SGRuleInfo** 模型定义 + - **RuleCount** (int) - 规则数量 + - **SGID** (str) - 安全组ID + - **Status** (str) - 状态。Creating:创建中,Updating:更新中,Available:有效,Deleted:已删除,Terminating:销毁中,Terminated:已销毁 + - **UpdateTime** (int) - 更新时间,时间戳 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeSecurityGroup", d, **kwargs) + return apis.DescribeSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def describe_storage_type(self, req=None, **kwargs): + """ DescribeStorageType - 查询存储类型 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Infos** (list) - 见 **StorageTypeInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 存储类型的总数 + + **Response Model** + + **StorageTypeInfo** + + - **Region** (str) - 地域 + - **SetArch** (str) - 架构 + - **StorageType** (str) - 存储类型 + - **StorageTypeAlias** (str) - 存储类型别名 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeStorageTypeRequestSchema().dumps(d) + resp = self.invoke("DescribeStorageType", d, **kwargs) + return apis.DescribeStorageTypeResponseSchema().loads(resp)
+ +
[docs] def describe_subnet(self, req=None, **kwargs): + """ DescribeSubnet - 查询子网信息 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **SubnetIDs** (list) - 【数组】子网 ID。调用方式举例:SubnetIDs.0=“one-id”、SubnetIDs.1=“two-id” + - **VPCID** (str) - VPCID + + **Response** + + - **Infos** (list) - 见 **SubnetInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 子网的总数 + + **Response Model** + + **SubnetInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Network** (str) - 网段 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **State** (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除 + - **SubnetID** (str) - ID + - **UpdateTime** (int) - 更新时间,时间戳 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeSubnetRequestSchema().dumps(d) + resp = self.invoke("DescribeSubnet", d, **kwargs) + return apis.DescribeSubnetResponseSchema().loads(resp)
+ +
[docs] def describe_user(self, req=None, **kwargs): + """ DescribeUser - 查询租户信息 + + **Request** + + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **UserIDs** (list) - 【数组】租户的 ID。输入有效的 ID。调用方式举例:UserIDs.0=123”、UserIDs.1=456 + + **Response** + + - **Infos** (list) - 见 **UserInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回现有租户总数 + + **Response Model** + + **UserInfo** + + - **Amount** (float) - 账户余额 + - **CreateTime** (int) - 账户创建时间。时间戳 + - **Email** (str) - 租户名称 + - **PrivateKey** (str) - 私钥 + - **PublicKey** (str) - 公钥 + - **Status** (str) - 用户状态。USER_STATUS_AVAILABLE:正常,USER_STATUS_FREEZE:冻结 + - **UpdateTime** (int) - 更新时间。时间戳 + - **UserID** (int) - 租户ID. + + """ + d = {} + req and d.update(req) + d = apis.DescribeUserRequestSchema().dumps(d) + resp = self.invoke("DescribeUser", d, **kwargs) + return apis.DescribeUserResponseSchema().loads(resp)
+ +
[docs] def describe_vm_instance(self, req=None, **kwargs): + """ DescribeVMInstance - 查询虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (str) - 列表起始位置偏移量,默认为0。 + - **SubnetID** (str) - 子网 ID。输入“有效”状态的子网 ID。 + - **VMIDs** (list) - 【数组】虚拟机的 ID。输入有效的 ID。调用方式举例:PrivateIp.0=“one-id”、PrivateIp.1=“two-id”。 + - **VPCID** (str) - VPC ID。输入“有效”状态的VPC ID。 + + **Response** + + - **Infos** (list) - 见 **VMInstanceInfo** 模型定义 + - **Message** (str) - 返回信息描述 + - **TotalCount** (int) - 返回虚拟机总个数 + + **Response Model** + + **VMIPInfo** + + - **IP** (str) - IP 值 + - **IPVersion** (str) - IP版本,支持值:IPv4\\IPv6 + - **InterfaceID** (str) - 网卡 ID + - **IsElastic** (str) - 是否是弹性网卡。枚举值:Y,表示是;N,表示否; + - **MAC** (str) - MAC 地址值 + - **SGID** (str) - 安全组 ID + - **SGName** (str) - 安全组名称 + - **SubnetID** (str) - 子网 ID + - **SubnetName** (str) - 子网名称 + - **Type** (str) - IP 类型。枚举值:Private,表示内网;Public,表示外网;Physical,表示物理网; + - **VPCID** (str) - VPC ID + - **VPCName** (str) - VPC 名称 + + **VMDiskInfo** + + - **DiskID** (str) - 磁盘 ID + - **Drive** (str) - 磁盘盘符 + - **IsElastic** (str) - 是否是弹性磁盘。枚举值为:Y,表示是;N,表示否; + - **Name** (str) - 磁盘名称 + - **Size** (int) - 磁盘大小,单位 GB + - **Type** (str) - 磁盘类型。枚举值:Boot,表示系统盘;Data,表示数据盘; + + **VMInstanceInfo** + + - **CPU** (int) - CPU 个数 + - **ChargeType** (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **CreateTime** (int) - 虚拟机创建时间 + - **DiskInfos** (list) - 见 **VMDiskInfo** 模型定义 + - **ExpireTime** (int) - 虚拟机过期时间 + - **IPInfos** (list) - 见 **VMIPInfo** 模型定义 + - **ImageID** (str) - 镜像 ID + - **Memory** (int) - 内存大小,单位 M + - **Name** (str) - 虚拟机名称 + - **OSName** (str) - 操作系统名称 + - **OSType** (str) - 操作系统类型 + - **Region** (str) - Region + - **RegionAlias** (str) - Region 别名 + - **Remark** (str) - 备注 + - **State** (str) - 虚拟机状态。枚举值:Initializing,表示初始化;Starting,表示启动中;Restarting,表示重启中;Running,表示运行;Stopping,表示关机中;Stopped,表示关机;Deleted,表示已删除;Resizing,表示修改配置中;Terminating,表示销毁中;Terminated,表示已销毁;Migrating,表示迁移中;WaitReinstall,表示等待重装系统;Reinstalling,表示重装中;Poweroffing,表示断电中;ChangeSGing,表示修改防火墙中; + - **SubnetID** (str) - 子网 ID + - **SubnetName** (str) - 子网 名称 + - **VMID** (str) - 虚拟机 ID + - **VMType** (str) - 虚拟机类型 + - **VMTypeAlias** (str) - 虚拟机类型别名 + - **VPCID** (str) - VPC ID + - **VPCName** (str) - VPC 名称 + - **Zone** (str) - Zone + - **ZoneAlias** (str) - Zone 别名 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVMInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeVMInstance", d, **kwargs) + return apis.DescribeVMInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_vm_type(self, req=None, **kwargs): + """ DescribeVMType - 查询主机机型 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Infos** (list) - 见 **VMTypeInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - 主机机型的总数 + + **Response Model** + + **VMTypeInfo** + + - **Region** (str) - 地域 + - **SetArch** (str) - 架构 + - **VMType** (str) - 机型 + - **VMTypeAlias** (str) - 机型别名 + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVMTypeRequestSchema().dumps(d) + resp = self.invoke("DescribeVMType", d, **kwargs) + return apis.DescribeVMTypeResponseSchema().loads(resp)
+ +
[docs] def describe_vpc(self, req=None, **kwargs): + """ DescribeVPC - 查询VPC信息 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Zone** (str) - (Required) 可用区。 + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **VPCIDs** (list) - 【数组】VPC的 ID。调用方式举例:VPCIDs.0=“one-id”、VPCIDs.1=“two-id” + + **Response** + + - **Infos** (list) - 见 **VPCInfo** 模型定义 + - **Message** (str) - 返回信息描述; + - **TotalCount** (int) - VPC的总数 + + **Response Model** + + **SubnetInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Network** (str) - 网段 + - **Region** (str) - 地域 + - **Remark** (str) - 描述 + - **State** (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除 + - **SubnetID** (str) - ID + - **UpdateTime** (int) - 更新时间,时间戳 + - **Zone** (str) - 可用区 + + **VPCInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Name** (str) - 名称 + - **Network** (str) - 网段,比如10.0.0.0/16 + - **Region** (str) - 地域。 + - **Remark** (str) - 描述 + - **State** (str) - 状态;Allocating:申请中,Available:有效,Terminating:销毁中,Terminated:已销毁 + - **SubnetCount** (int) - 该VPC下拥有的子网数目 + - **SubnetInfos** (list) - 见 **SubnetInfo** 模型定义 + - **UpdateTime** (int) - 修改时间,时间戳 + - **VPCID** (str) - VPC的ID + - **Zone** (str) - 可用区 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPCRequestSchema().dumps(d) + resp = self.invoke("DescribeVPC", d, **kwargs) + return apis.DescribeVPCResponseSchema().loads(resp)
+ +
[docs] def describe_vs(self, req=None, **kwargs): + """ DescribeVS - 获取负载均衡 VServer 信息 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **VSIDs** (list) - 【数组】VServer的 ID。调用方式举例:VSIDs.0=“one-id”、VSIDs.1=“two-id”。 + + **Response** + + - **Infos** (list) - 见 **VSInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回当前负载均衡 VServer 总个数。 + + **Response Model** + + **VSPolicyInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **LBID** (str) - 负载均衡ID + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **PolicyID** (str) - 内容转发规则ID + - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServerID + + **RSInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **CreateTime** (int) - 创建时间,时间戳 + - **IP** (str) - 服务节点的内网 IP 地址 + - **LBID** (str) - 服务节点所属的负载均衡 ID + - **Name** (str) - 服务节点的资源名称 + - **Port** (int) - 服务节点暴露的服务端口号 + - **RSID** (str) - 服务节点的 ID + - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 + - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - 服务节点所属的 VServer ID + - **Weight** (int) - 服务节点的权重 + + **VSInfo** + + - **AlarmTemplateID** (str) - 告警模板ID + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 + - **HealthcheckType** (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。 + - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。 + - **LBID** (str) - VServer 所属的负载均衡 ID + - **Path** (str) - HTTP 健康检查的路径。当健康检查类型为端口检查时,该值为空。 + - **PersistenceKey** (str) - 会话保持KEY,仅当 VServer 协议为 HTTP 且会话保持为手动时有效。 + - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值为空;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **Port** (int) - 端口 + - **Protocol** (str) - 协议 + - **RSHealthStatus** (str) - 健康检查状态,枚举值,Empty:全部异常,Parts:部分异常,All:正常 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServer的ID + - **VSPolicyInfos** (list) - 见 **VSPolicyInfo** 模型定义 + - **VSStatus** (str) - VServer 的资源状态。枚举值,Available:可用,Updating:更新中,Deleted:已删除 。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVSRequestSchema().dumps(d) + resp = self.invoke("DescribeVS", d, **kwargs) + return apis.DescribeVSResponseSchema().loads(resp)
+ +
[docs] def describe_vs_policy(self, req=None, **kwargs): + """ DescribeVSPolicy - 获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Limit** (int) - 返回数据长度,默认为20,最大100。 + - **Offset** (int) - 列表起始位置偏移量,默认为0。 + - **PolicyIDs** (list) - 【数组】七层负载均衡内容转发规则的 ID。调用方式举例:PolicyIDs.0=“one-id”、PolicyIDs.1=“two-id” + - **VSID** (str) - VServerID + + **Response** + + - **Infos** (list) - 见 **VSPolicyInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + - **TotalCount** (int) - 返回内容转发规则的总个数。 + + **Response Model** + + **RSInfo** + + - **BindResourceID** (str) - 绑定的资源ID + - **CreateTime** (int) - 创建时间,时间戳 + - **IP** (str) - 服务节点的内网 IP 地址 + - **LBID** (str) - 服务节点所属的负载均衡 ID + - **Name** (str) - 服务节点的资源名称 + - **Port** (int) - 服务节点暴露的服务端口号 + - **RSID** (str) - 服务节点的 ID + - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 + - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - 服务节点所属的 VServer ID + - **Weight** (int) - 服务节点的权重 + + **VSPolicyInfo** + + - **CreateTime** (int) - 创建时间,时间戳 + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **LBID** (str) - 负载均衡ID + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **PolicyID** (str) - 内容转发规则ID + - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 + - **RSInfos** (list) - 见 **RSInfo** 模型定义 + - **UpdateTime** (int) - 更新时间,时间戳 + - **VSID** (str) - VServerID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeVSPolicyRequestSchema().dumps(d) + resp = self.invoke("DescribeVSPolicy", d, **kwargs) + return apis.DescribeVSPolicyResponseSchema().loads(resp)
+ +
[docs] def detach_disk(self, req=None, **kwargs): + """ DetachDisk - 解绑UClouStack硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 硬盘ID + - **ResourceID** (str) - (Required) 绑定的资源ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DetachDiskRequestSchema().dumps(d) + resp = self.invoke("DetachDisk", d, **kwargs) + return apis.DetachDiskResponseSchema().loads(resp)
+ +
[docs] def disable_rs(self, req=None, **kwargs): + """ DisableRS - 禁用负载均衡的单个服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DisableRSRequestSchema().dumps(d) + resp = self.invoke("DisableRS", d, **kwargs) + return apis.DisableRSResponseSchema().loads(resp)
+ +
[docs] def enable_rs(self, req=None, **kwargs): + """ EnableRS - 启用负载均衡的单个服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.EnableRSRequestSchema().dumps(d) + resp = self.invoke("EnableRS", d, **kwargs) + return apis.EnableRSResponseSchema().loads(resp)
+ +
[docs] def get_disk_price(self, req=None, **kwargs): + """ GetDiskPrice - 获取硬盘价格 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DiskSpace** (int) - (Required) 磁盘大小 + - **SetType** (str) - (Required) 磁盘类型 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **Infos** (list) - 见 **PriceInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + + **Response Model** + + **PriceInfo** + + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Price** (float) - 价格 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetDiskPriceRequestSchema().dumps(d) + resp = self.invoke("GetDiskPrice", d, **kwargs) + return apis.GetDiskPriceResponseSchema().loads(resp)
+ +
[docs] def get_eip_price(self, req=None, **kwargs): + """ GetEIPPrice - 获取外网IP价格 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **Bandwidth** (int) - (Required) 带宽,默认值1,默认范围1~100 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **OpertatorName** (str) - (Required) 线路。目前支持Bgp + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **Infos** (list) - 见 **PriceInfo** 模型定义 + - **Message** (str) - 返回信息描述 + + **Response Model** + + **PriceInfo** + + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Price** (float) - 价格 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetEIPPriceRequestSchema().dumps(d) + resp = self.invoke("GetEIPPrice", d, **kwargs) + return apis.GetEIPPriceResponseSchema().loads(resp)
+ +
[docs] def get_vm_instance_price(self, req=None, **kwargs): + """ GetVMInstancePrice - 获取虚拟机价格 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **BootDiskSetType** (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **CPU** (int) - (Required) CPU 个数,目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。 + - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **DataDiskSetType** (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD; + - **DataDiskSpace** (int) - (Required) 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 + - **ImageID** (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。 + - **Memory** (int) - (Required) 内存大小,单位 M。目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。 + - **OSType** (str) - (Required) 系统类型。 + - **VMType** (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. + - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 + + **Response** + + - **Infos** (list) - 见 **PriceInfo** 模型定义 + - **Message** (str) - 返回信息描述。 + + **Response Model** + + **PriceInfo** + + - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; + - **Price** (float) - 价格 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetVMInstancePriceRequestSchema().dumps(d) + resp = self.invoke("GetVMInstancePrice", d, **kwargs) + return apis.GetVMInstancePriceResponseSchema().loads(resp)
+ +
[docs] def modify_eip_bandwidth(self, req=None, **kwargs): + """ ModifyEIPBandwidth - 调整外网IP带宽 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **Bandwidth** (int) - (Required) 调整后的带宽 + - **EIPID** (str) - (Required) 外网IP的ID + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ModifyEIPBandwidthRequestSchema().dumps(d) + resp = self.invoke("ModifyEIPBandwidth", d, **kwargs) + return apis.ModifyEIPBandwidthResponseSchema().loads(resp)
+ +
[docs] def modify_name_and_remark(self, req=None, **kwargs): + """ ModifyNameAndRemark - 修改资源名称和备注 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Name** (str) - (Required) 名称; + - **ResourceID** (str) - (Required) 资源ID; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Remark** (str) - 描述; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ModifyNameAndRemarkRequestSchema().dumps(d) + resp = self.invoke("ModifyNameAndRemark", d, **kwargs) + return apis.ModifyNameAndRemarkResponseSchema().loads(resp)
+ +
[docs] def poweroff_vm_instance(self, req=None, **kwargs): + """ PoweroffVMInstance - 断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.PoweroffVMInstanceRequestSchema().dumps(d) + resp = self.invoke("PoweroffVMInstance", d, **kwargs) + return apis.PoweroffVMInstanceResponseSchema().loads(resp)
+ +
[docs] def recharge(self, req=None, **kwargs): + """ Recharge - 管理员给租户充值 + + **Request** + + - **Amount** (int) - (Required) 充值金额。最少100,最大500000 + - **FromType** (str) - (Required) 充值来源。INPOUR_FROM_ALIPAY:支付宝,INPOUR_FROM_OFFLINE:银行转账,INPOUR_FROM_SINPAY:新浪支付,INPOUR_FROM_WECHAT_PAY:微信转账。 + - **SerialNo** (str) - (Required) 充值单号。充值方式为“账户余额”时为必要参数。 + - **UserID** (int) - (Required) 租户的账户ID。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {} + req and d.update(req) + d = apis.RechargeRequestSchema().dumps(d) + resp = self.invoke("Recharge", d, **kwargs) + return apis.RechargeResponseSchema().loads(resp)
+ +
[docs] def reinstall_vm_instance(self, req=None, **kwargs): + """ ReinstallVMInstance - 重装系统,关机的虚拟机才可以重装系统 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **ImageID** (str) - (Required) 镜像ID + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ReinstallVMInstanceRequestSchema().dumps(d) + resp = self.invoke("ReinstallVMInstance", d, **kwargs) + return apis.ReinstallVMInstanceResponseSchema().loads(resp)
+ +
[docs] def release_eip(self, req=None, **kwargs): + """ ReleaseEIP - 删除外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 + - **EIPID** (str) - (Required) 外网IP的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国 + + **Response** + + - **Message** (str) - 返回状态描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ReleaseEIPRequestSchema().dumps(d) + resp = self.invoke("ReleaseEIP", d, **kwargs) + return apis.ReleaseEIPResponseSchema().loads(resp)
+ +
[docs] def renew_resource(self, req=None, **kwargs): + """ RenewResource - 续费回收站资源 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **ResourceID** (str) - (Required) 待续续的资源ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + - **Quantity** (int) - 购买时长,默认为 1。按小时(Dynamic)付费的资源无需此参数,按月付费的资源传 0 时,代表购买至月末。 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RenewResourceRequestSchema().dumps(d) + resp = self.invoke("RenewResource", d, **kwargs) + return apis.RenewResourceResponseSchema().loads(resp)
+ +
[docs] def reset_vm_instance_password(self, req=None, **kwargs): + """ ResetVMInstancePassword - 重置虚拟机密码,主机必须开机才可以重置密码 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Password** (str) - (Required) 密码 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ResetVMInstancePasswordRequestSchema().dumps(d) + resp = self.invoke("ResetVMInstancePassword", d, **kwargs) + return apis.ResetVMInstancePasswordResponseSchema().loads(resp)
+ +
[docs] def resize_vm_config(self, req=None, **kwargs): + """ ResizeVMConfig - 修改虚拟机配置 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **CPU** (int) - (Required) CPU 个数,如 1、2、4、8、16、32、64。 + - **Memory** (int) - (Required) 内存容量,如 2048、4096、8192、16384、32768、65536、131072。 + - **VMID** (str) - (Required) 虚拟机ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.ResizeVMConfigRequestSchema().dumps(d) + resp = self.invoke("ResizeVMConfig", d, **kwargs) + return apis.ResizeVMConfigResponseSchema().loads(resp)
+ +
[docs] def restart_vm_instance(self, req=None, **kwargs): + """ RestartVMInstance - 重启虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机ID; + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RestartVMInstanceRequestSchema().dumps(d) + resp = self.invoke("RestartVMInstance", d, **kwargs) + return apis.RestartVMInstanceResponseSchema().loads(resp)
+ +
[docs] def rollback_resource(self, req=None, **kwargs): + """ RollbackResource - 恢复回收站资源 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **ResourceID** (str) - (Required) 待恢复的资源ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RollbackResourceRequestSchema().dumps(d) + resp = self.invoke("RollbackResource", d, **kwargs) + return apis.RollbackResourceResponseSchema().loads(resp)
+ +
[docs] def rollback_snapshot(self, req=None, **kwargs): + """ RollbackSnapshot - 将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 + - **DiskID** (str) - (Required) 对应的云硬盘 ID; + - **SnapshotID** (str) - (Required) 快照ID + - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.RollbackSnapshotRequestSchema().dumps(d) + resp = self.invoke("RollbackSnapshot", d, **kwargs) + return apis.RollbackSnapshotResponseSchema().loads(resp)
+ +
[docs] def start_vm_instance(self, req=None, **kwargs): + """ StartVMInstance - 开启虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机 ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.StartVMInstanceRequestSchema().dumps(d) + resp = self.invoke("StartVMInstance", d, **kwargs) + return apis.StartVMInstanceResponseSchema().loads(resp)
+ +
[docs] def stop_vm_instance(self, req=None, **kwargs): + """ StopVMInstance - 关闭虚拟机 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **VMID** (str) - (Required) 虚拟机 ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + - **VMID** (str) - 虚拟机 ID + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.StopVMInstanceRequestSchema().dumps(d) + resp = self.invoke("StopVMInstance", d, **kwargs) + return apis.StopVMInstanceResponseSchema().loads(resp)
+ +
[docs] def terminate_resource(self, req=None, **kwargs): + """ TerminateResource - 销毁资源 + + **Request** + + - **Region** (str) - (Config) 地域。 + - **ResourceID** (str) - (Required) 资源id + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.TerminateResourceRequestSchema().dumps(d) + resp = self.invoke("TerminateResource", d, **kwargs) + return apis.TerminateResourceResponseSchema().loads(resp)
+ +
[docs] def un_bind_eip(self, req=None, **kwargs): + """ UnBindEIP - 解绑外网IP + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 + - **EIPID** (str) - (Required) 外网IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnBindEIPRequestSchema().dumps(d) + resp = self.invoke("UnBindEIP", d, **kwargs) + return apis.UnBindEIPResponseSchema().loads(resp)
+ +
[docs] def un_bind_security_group(self, req=None, **kwargs): + """ UnBindSecurityGroup - 解绑安全组 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **ResourceID** (str) - (Required) 解绑的资源ID。调用方式举例:ResourceID=“one-id”。 + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnBindSecurityGroupRequestSchema().dumps(d) + resp = self.invoke("UnBindSecurityGroup", d, **kwargs) + return apis.UnBindSecurityGroupResponseSchema().loads(resp)
+ +
[docs] def unbind_alarm_template(self, req=None, **kwargs): + """ UnbindAlarmTemplate - 解绑告警模板 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **AlarmTemplateID** (str) - (Required) 告警模板ID + - **ResourceIDs** (list) - (Required) 【数组】资源的 ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性网卡 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnbindAlarmTemplateRequestSchema().dumps(d) + resp = self.invoke("UnbindAlarmTemplate", d, **kwargs) + return apis.UnbindAlarmTemplateResponseSchema().loads(resp)
+ +
[docs] def unbind_physical_ip(self, req=None, **kwargs): + """ UnbindPhysicalIP - 解绑物理IP + + **Request** + + - **Region** (str) - (Config) 地域。 + - **PhysicalIPID** (str) - (Required) 物理IP的ID + - **ResourceID** (str) - (Required) 资源ID + - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机 + - **Zone** (str) - (Required) 可用区。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UnbindPhysicalIPRequestSchema().dumps(d) + resp = self.invoke("UnbindPhysicalIP", d, **kwargs) + return apis.UnbindPhysicalIPResponseSchema().loads(resp)
+ +
[docs] def update_alarm_template_rule(self, req=None, **kwargs): + """ UpdateAlarmTemplateRule - 更新告警模板规则 + + **Request** + + - **Region** (str) - (Config) 地域 + - **AlarmStrategy** (str) - (Required) 瘦脸策略 + - **AlarmTemplateID** (str) - (Required) 告警模板ID + - **AlarmTemplateRuleID** (str) - (Required) 告警规则ID + - **Compare** (str) - (Required) 对比方式 + - **ContactGroupID** (str) - (Required) 通知组ID + - **MetricName** (str) - (Required) 监控指标名称 + - **ResourceType** (str) - (Required) 资源类型 + - **Threshold** (str) - (Required) 告警阈值 + - **TriggerCount** (str) - (Required) 连续触发次数 + - **Zone** (str) - (Required) 可用区 + + **Response** + + - **Message** (str) - 返回描述信息 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateAlarmTemplateRuleRequestSchema().dumps(d) + resp = self.invoke("UpdateAlarmTemplateRule", d, **kwargs) + return apis.UpdateAlarmTemplateRuleResponseSchema().loads(resp)
+ +
[docs] def update_rs(self, req=None, **kwargs): + """ UpdateRS - 修改负载均衡的服务节点 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID + - **RSID** (str) - (Required) RServer的ID + - **VSID** (str) - (Required) RServer所属的VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Port** (int) - 端口号 + - **Weight** (int) - 权重 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateRSRequestSchema().dumps(d) + resp = self.invoke("UpdateRS", d, **kwargs) + return apis.UpdateRSResponseSchema().loads(resp)
+ +
[docs] def update_security_group_rule(self, req=None, **kwargs): + """ UpdateSecurityGroupRule - 修改安全组规则 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; + - **Rules** (list) - (Required) 【数组】规则。输入有效的 规则。调用方式举例:Rules.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rules.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” + - **SGID** (str) - (Required) 安全组ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述; + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateSecurityGroupRuleRequestSchema().dumps(d) + resp = self.invoke("UpdateSecurityGroupRule", d, **kwargs) + return apis.UpdateSecurityGroupRuleResponseSchema().loads(resp)
+ +
[docs] def update_vs(self, req=None, **kwargs): + """ UpdateVS - 修改负载均衡VServer + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID + - **VSID** (str) - (Required) 需要更新的VSID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 + - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 + - **HealthcheckType** (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。仅当 VServer 协议类型为 HTTP 时,才可进行 HTTP 检查。 + - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。 + - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 + - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 + - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 + - **Port** (int) - VServer 监听端口 + - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 + - **Scheduler** (str) - 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 + - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS 时有效。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateVSRequestSchema().dumps(d) + resp = self.invoke("UpdateVS", d, **kwargs) + return apis.UpdateVSResponseSchema().loads(resp)
+ +
[docs] def update_vs_policy(self, req=None, **kwargs): + """ UpdateVSPolicy - 更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **LBID** (str) - (Required) 负载均衡ID + - **PolicyID** (str) - (Required) 内容转发规则ID + - **VSID** (str) - (Required) VServer的ID + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 + - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 + - **RSIDs** (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpdateVSPolicyRequestSchema().dumps(d) + resp = self.invoke("UpdateVSPolicy", d, **kwargs) + return apis.UpdateVSPolicyResponseSchema().loads(resp)
+ +
[docs] def upgrade_disk(self, req=None, **kwargs): + """ UpgradeDisk - 升级硬盘 + + **Request** + + - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; + - **DiskID** (str) - (Required) 硬盘ID + - **DiskSpace** (int) - (Required) 硬盘升级后的容量, 不能小于原硬盘容量,单位为 GB 。 + - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; + + **Response** + + - **Message** (str) - 返回信息描述。 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpgradeDiskRequestSchema().dumps(d) + resp = self.invoke("UpgradeDisk", d, **kwargs) + return apis.UpgradeDiskResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/udb/client.html b/docs/build/html/_modules/ucloud/services/udb/client.html new file mode 100644 index 0000000..152ce87 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/udb/client.html @@ -0,0 +1,1416 @@ + + + + + + + + ucloud.services.udb.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.udb.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.udb.schemas import apis
+
+
+
[docs]class UDBClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UDBClient, self).__init__(config, transport, middleware, logger) + +
[docs] def backup_udb_instance(self, req=None, **kwargs): + """ BackupUDBInstance - 备份UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupName** (str) - (Required) 备份名称 + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **BackupMethod** (str) - 使用的备份方式。(快照备份即物理备份。注意只有SSD版本的mysql实例支持设置为snapshot) + - **Blacklist** (str) - 备份黑名单列表,以 ; 分隔。注意:只有逻辑备份下备份黑名单才生效,快照备份备份黑名单下无效 + - **ForceBackup** (bool) - true表示逻辑备份时是使用 --force 参数,false表示不使用 --force 参数。物理备份此参数无效。 + - **UseBlacklist** (bool) - 是否使用黑名单备份,默认false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("BackupUDBInstance", d, **kwargs) + return apis.BackupUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def backup_udb_instance_binlog(self, req=None, **kwargs): + """ BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupFile** (str) - (Required) 需要备份文件,可通过DescribeUDBInstanceBinlog获得 如果要传入多个文件名,以空格键分割,用单引号包含. + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **BackupName** (str) - DB备份文件名称 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceBinlogRequestSchema().dumps(d) + resp = self.invoke("BackupUDBInstanceBinlog", d, **kwargs) + return apis.BackupUDBInstanceBinlogResponseSchema().loads(resp)
+ +
[docs] def backup_udb_instance_error_log(self, req=None, **kwargs): + """ BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupName** (str) - (Required) 备份名称 + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceErrorLogRequestSchema().dumps(d) + resp = self.invoke("BackupUDBInstanceErrorLog", d, **kwargs) + return apis.BackupUDBInstanceErrorLogResponseSchema().loads(resp)
+ +
[docs] def backup_udb_instance_slow_log(self, req=None, **kwargs): + """ BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupName** (str) - (Required) 备份文件名称 + - **BeginTime** (int) - (Required) 过滤条件:起始时间(时间戳) + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **EndTime** (int) - (Required) 过滤条件:结束时间(时间戳) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BackupUDBInstanceSlowLogRequestSchema().dumps(d) + resp = self.invoke("BackupUDBInstanceSlowLog", d, **kwargs) + return apis.BackupUDBInstanceSlowLogResponseSchema().loads(resp)
+ +
[docs] def check_recover_udb_instance(self, req=None, **kwargs): + """ CheckRecoverUDBInstance - 核查db是否可以使用回档功能 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SrcDBId** (str) - (Required) 源实例的Id(只支持普通版DB不支持高可用) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **LastestTime** (int) - 核查成功返回值为可以回档到的最近时刻,核查失败不返回 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CheckRecoverUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("CheckRecoverUDBInstance", d, **kwargs) + return apis.CheckRecoverUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def check_udb_instance_to_ha_allowance(self, req=None, **kwargs): + """ CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + + **Response** + + - **Allowance** (str) - Yes ,No ,Yes即可以升级,No为不可以升级 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CheckUDBInstanceToHAAllowanceRequestSchema().dumps(d) + resp = self.invoke("CheckUDBInstanceToHAAllowance", d, **kwargs) + return apis.CheckUDBInstanceToHAAllowanceResponseSchema().loads(resp)
+ +
[docs] def clear_udb_log(self, req=None, **kwargs): + """ ClearUDBLog - 清除UDB实例的log + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取 + - **LogType** (int) - (Required) 日志类型,10-error(暂不支持)、20-slow(暂不支持 )、30-binlog + - **BeforeTime** (int) - 删除时间点(至少前一天)之前log,采用时间戳(秒),默认当 前时间点前一天 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ClearUDBLogRequestSchema().dumps(d) + resp = self.invoke("ClearUDBLog", d, **kwargs) + return apis.ClearUDBLogResponseSchema().loads(resp)
+ +
[docs] def create_udb_instance(self, req=None, **kwargs): + """ CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AdminPassword** (str) - (Required) 管理员密码 + - **DBTypeId** (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6,14:postgresql-10.4 + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 3000G + - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M + - **Name** (str) - (Required) 实例名称,至少6位 + - **ParamGroupId** (int) - (Required) DB实例使用的配置参数组id + - **Port** (int) - (Required) 端口号,mysql默认3306,mongodb默认27017,postgresql默认5432 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AdminUser** (str) - 管理员帐户名,默认root + - **BackupCount** (int) - 备份策略,每周备份数量,默认7次 + - **BackupDuration** (int) - 备份策略,备份时间间隔,单位小时计,默认24小时 + - **BackupId** (int) - 备份id,如果指定,则表明从备份恢复实例 + - **BackupTime** (int) - 备份策略,备份开始时间,单位小时计,默认1点 + - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CPU** (int) - cpu核数 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Month + - **ClusterRole** (str) - 当DB类型(DBTypeId)为mongodb时,需要指定mongo的角色,可选值为configsrv (配置节点),shardsrv (数据节点) + - **CouponId** (str) - 使用的代金券id + - **DisableSemisync** (bool) - 是否开启异步高可用,默认不填,可置为true + - **HAArch** (str) - 高可用架构:1) haproxy(默认): 当前仅支持mysql。2) sentinel: 基于vip和哨兵节点的架构,当前支持mysql和pg。 + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例 "HA": 高可用版UDB实例 默认是"Normal" + - **InstanceType** (str) - UDB数据库机型 + - **Quantity** (int) - 购买时长,默认值1 + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **SubnetId** (str) - 子网ID + - **Tag** (str) - 实例所在的业务组名称 + - **UDBCId** (str) - 专区ID信息(如果这个参数存在这说明是在专区中创建DB) + - **UseSSD** (bool) - 是否使用SSD,默认为false。目前主要可用区、海外机房、新机房只提供SSD资源,非SSD资源不再提供。 + - **VPCId** (str) - VPC的ID + + **Response** + + - **DBId** (str) - BD实例id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBInstance", d, **kwargs) + return apis.CreateUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def create_udb_instance_by_recovery(self, req=None, **kwargs): + """ CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称,至少6位 + - **RecoveryTime** (int) - (Required) 恢复到某个时间点的时间戳(UTC时间格式,默认单位秒) + - **SrcDBId** (str) - (Required) 源实例的Id + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长,默认值1 + - **SubnetId** (str) - 子网ID + - **UDBCId** (str) - 专区的Id + - **UseSSD** (bool) - 指定是否是否使用SSD,默认使用主库的配置 + - **VPCId** (str) - VPC的ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - db实例id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBInstanceByRecoveryRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBInstanceByRecovery", d, **kwargs) + return apis.CreateUDBInstanceByRecoveryResponseSchema().loads(resp)
+ +
[docs] def create_udb_param_group(self, req=None, **kwargs): + """ CreateUDBParamGroup - 从已有配置文件创建新配置文件 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBTypeId** (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6 + - **Description** (str) - (Required) 参数组描述 + - **GroupName** (str) - (Required) 新配置参数组名称 + - **SrcGroupId** (int) - (Required) 源参数组id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RegionFlag** (bool) - 是否是地域级别的配置文件,默认是false + + **Response** + + - **GroupId** (int) - 新配置参数组id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBParamGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBParamGroup", d, **kwargs) + return apis.CreateUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def create_udb_replication_instance(self, req=None, **kwargs): + """ CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称,至少6位 + - **SrcId** (str) - (Required) primary节点的DBId,该值可以通过DescribeUDBInstance获取 + - **CouponId** (str) - 使用的代金券id + - **IsArbiter** (bool) - 是否是仲裁节点,默认false,仲裁节点按最小机型创建 + - **Port** (int) - 端口号,默认27017,取值范围3306至65535。 + - **UseSSD** (bool) - 是否使用SSD,默认不使用 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - 创建从节点的DBId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBReplicationInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBReplicationInstance", d, **kwargs) + return apis.CreateUDBReplicationInstanceResponseSchema().loads(resp)
+ +
[docs] def create_udb_route_instance(self, req=None, **kwargs): + """ CreateUDBRouteInstance - 创建mongos实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ConfigsvrId** (list) - (Required) 配置服务器的dbid,允许一个或者三个。 + - **DBTypeId** (str) - (Required) DB类型id,mongodb按版本细分有1:mongodb-2.4,2:mongodb-2.6,3:mongodb-3.0,4:mongodb-3.2 + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G + - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 600M/1500M/3000M /6000M/15000M/30000M + - **Name** (str) - (Required) 实例名称,至少6位 + - **ParamGroupId** (int) - (Required) DB实例使用的配置参数组id + - **Port** (int) - (Required) 端口号,mongodb默认27017 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Month + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长,默认值1 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - db实例id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBRouteInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBRouteInstance", d, **kwargs) + return apis.CreateUDBRouteInstanceResponseSchema().loads(resp)
+ +
[docs] def create_udb_slave(self, req=None, **kwargs): + """ CreateUDBSlave - 创建UDB实例的slave + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称,至少6位 + - **SrcId** (str) - (Required) master实例的DBId,该值可以通过DescribeUDBInstance获取 + - **CouponId** (str) - 使用的代金券id + - **DiskSpace** (int) - 磁盘空间(GB), 暂时支持20G - 3000G(API支持,前端暂时只开放内存定制) + - **InstanceMode** (str) - UDB实例部署模式,可选值如下:Normal: 普通单点实例HA: 高可用部署实例 + - **InstanceType** (str) - UDB实例类型:Normal和SATA_SSD + - **IsLock** (bool) - 是否锁主库,默认为true + - **MemoryLimit** (int) - 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M + - **Port** (int) - 端口号,mysql默认3306 + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DBId** (str) - 创建slave的DBId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDBSlaveRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDBSlave", d, **kwargs) + return apis.CreateUDBSlaveResponseSchema().loads(resp)
+ +
[docs] def delete_udb_backup(self, req=None, **kwargs): + """ DeleteUDBBackup - 删除UDB实例备份 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 备份id,可通过DescribeUDBBackup获得 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见[可用区列表] + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBBackupRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBBackup", d, **kwargs) + return apis.DeleteUDBBackupResponseSchema().loads(resp)
+ +
[docs] def delete_udb_instance(self, req=None, **kwargs): + """ DeleteUDBInstance - 删除UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取 + - **UDBCId** (str) - 专区ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBInstance", d, **kwargs) + return apis.DeleteUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def delete_udb_log_package(self, req=None, **kwargs): + """ DeleteUDBLogPackage - 删除UDB日志包 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 日志包id,可通过DescribeUDBLogPackage获得 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBLogPackageRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBLogPackage", d, **kwargs) + return apis.DeleteUDBLogPackageResponseSchema().loads(resp)
+ +
[docs] def delete_udb_param_group(self, req=None, **kwargs): + """ DeleteUDBParamGroup - 删除配置参数组 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (int) - (Required) 参数组id,可通过DescribeUDBParamGroup获取 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RegionFlag** (bool) - 是否属于地域级别 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDBParamGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteUDBParamGroup", d, **kwargs) + return apis.DeleteUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def describe_udb_backup(self, req=None, **kwargs): + """ DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 + - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 + - **BackupId** (int) - 如果填了BackupId, 那么只拉取这个备份的记录 + - **BackupType** (int) - 备份类型,取值为0或1,0表示自动,1表示手动 + - **BeginTime** (int) - 过滤条件:起始时间(Unix时间戳) + - **ClassType** (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver) + - **DBId** (str) - DB实例Id,如果指定,则只获取该db的备份信息 该值可以通过DescribeUDBInstance获取 + - **EndTime** (int) - 过滤条件:结束时间(Unix时间戳) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBBackupSet** 模型定义 + - **TotalCount** (int) - 满足条件备份总数,如果指定dbid,则是该db备份总数 + + **Response Model** + + **UDBBackupSet** + + - **BackupEndTime** (int) - 备份完成时间(Unix时间戳) + - **BackupId** (int) - 备份id + - **BackupName** (str) - 备份名称 + - **BackupSize** (int) - 备份文件大小(字节) + - **BackupTime** (int) - 备份时间(Unix时间戳) + - **BackupType** (int) - 备份类型,取值为0或1,0表示自动,1表示手动 + - **BackupZone** (str) - 跨机房高可用备库所在可用区 + - **DBId** (str) - dbid + - **DBName** (str) - 对应的db名称 + - **ErrorInfo** (str) - 备份错误信息 + - **State** (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期 + - **Zone** (str) - 备份所在可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBBackupRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBBackup", d, **kwargs) + return apis.DescribeUDBBackupResponseSchema().loads(resp)
+ +
[docs] def describe_udb_backup_blacklist(self, req=None, **kwargs): + """ DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Blacklist** (str) - DB的黑名单列表, db.%为指定库 dbname.tablename为指定表 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBBackupBlacklistRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBBackupBlacklist", d, **kwargs) + return apis.DescribeUDBBackupBlacklistResponseSchema().loads(resp)
+ +
[docs] def describe_udb_binlog_backup_url(self, req=None, **kwargs): + """ DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) DB实例binlog备份ID,可以从DescribeUDBLogPackage结果当中获得 + - **DBId** (str) - (Required) DB实例Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - DB实例备份文件的公网地址 + - **InnerBackupPath** (str) - DB实例备份文件的内网地址 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBBinlogBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBBinlogBackupURL", d, **kwargs) + return apis.DescribeUDBBinlogBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance(self, req=None, **kwargs): + """ DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ClassType** (str) - DB种类,如果是列表操作,则需要指定,不区分大小写,其取值如下:mysql: SQL;mongo: NOSQL;postgresql: postgresql + - **DBId** (str) - DB实例id,如果指定则获取单个db实例的描述,否则为列表操作。 指定DBId时无需填写ClassType、Offset、Limit + - **IncludeSlaves** (bool) - 当只获取这个特定DBId的信息时,如果有该选项,那么把这个DBId实例的所有从库信息一起拉取并返回 + - **IsInUDBC** (bool) - 是否查看专区里面DB + - **Limit** (int) - 分页显示数量,列表操作时必填 + - **Offset** (int) - 分页显示起始偏移位置,列表操作时必填 + - **UDBCId** (str) - IsInUDBC为True,UDBCId为空,说明查看整个可用区的专区的db,如果UDBId不为空则只查看此专区下面的db + - **Zone** (str) - 可用区,不填时默认全部可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBInstanceSet** 模型定义 + - **TotalCount** (int) - 用户db组的数量,对于 mysql: 主从结对数量,没有slave,则只有master mongodb: 副本集数量 + + **Response Model** + + **UDBSlaveInstanceSet** + + - **AdminUser** (str) - 管理员帐户名,默认root + - **BackupBeginTime** (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点 + - **BackupBlacklist** (str) - 备份策略,备份黑名单,mongodb则不适用 + - **BackupCount** (int) - 备份策略,不可修改,备份文件保留的数量,默认7次 + - **BackupDate** (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能 + - **BackupDuration** (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **ClusterRole** (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式 + - **CreateTime** (int) - DB实例创建时间,采用UTC计时时间戳 + - **DBId** (str) - DB实例id + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 + - **DataFileSize** (float) - DB实例数据文件大小,单位GB + - **DiskSpace** (int) - 磁盘空间(GB), 默认根据配置机型 + - **DiskUsedSize** (float) - DB实例磁盘已使用空间,单位GB + - **ExpiredTime** (int) - DB实例过期时间,采用UTC计时时间戳 + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例;"HA": 高可用版UDB实例 + - **InstanceType** (str) - UDB数据库机型 + - **InstanceTypeId** (int) - UDB数据库机型ID + - **LogFileSize** (float) - DB实例日志文件大小,单位GB + - **MemoryLimit** (int) - 内存限制(MB),默认根据配置机型 + - **ModifyTime** (int) - DB实例修改时间,采用UTC计时时间戳 + - **Name** (str) - 实例名称,至少6位 + - **ParamGroupId** (int) - DB实例使用的配置参数组id + - **Port** (int) - 端口号,mysql默认3306,mongodb默认27017 + - **Role** (str) - DB实例角色,mysql区分master/slave,mongodb多种角色 + - **SSDType** (str) - SSD类型,SATA/PCI-E + - **SrcDBId** (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id + - **State** (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败 + - **SubnetId** (str) - 子网ID + - **SystemFileSize** (float) - DB实例系统文件大小,单位GB + - **Tag** (str) - 获取资源其他信息 + - **UseSSD** (bool) - 是否使用SSD + - **VPCId** (str) - VPC的ID + - **VirtualIP** (str) - DB实例虚ip + - **VirtualIPMac** (str) - DB实例虚ip的mac地址 + - **Zone** (str) - 可用区 + + **UDBInstanceSet** + + - **AdminUser** (str) - 管理员帐户名,默认root + - **BackupBeginTime** (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点 + - **BackupBlacklist** (str) - 备份策略,备份黑名单,mongodb则不适用 + - **BackupCount** (int) - 备份策略,不可修改,备份文件保留的数量,默认7次 + - **BackupDate** (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能 + - **BackupDuration** (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时 + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **CluserRole** (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式 + - **CreateTime** (int) - DB实例创建时间,采用UTC计时时间戳 + - **DBId** (str) - DB实例id + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 + - **DataFileSize** (float) - DB实例数据文件大小,单位GB + - **DataSet** (list) - 见 **UDBSlaveInstanceSet** 模型定义 + - **DiskSpace** (int) - 磁盘空间(GB), 默认根据配置机型 + - **DiskUsedSize** (float) - DB实例磁盘已使用空间,单位GB + - **ExpiredTime** (int) - DB实例过期时间,采用UTC计时时间戳 + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 + - **InstanceType** (str) - UDB数据库机型 + - **InstanceTypeId** (int) - UDB数据库机型ID + - **LogFileSize** (float) - DB实例日志文件大小,单位GB + - **MemoryLimit** (int) - 内存限制(MB),默认根据配置机型 + - **ModifyTime** (int) - DB实例修改时间,采用UTC计时时间戳 + - **Name** (str) - 实例名称,至少6位 + - **ParamGroupId** (int) - DB实例使用的配置参数组id + - **Port** (int) - 端口号,mysql默认3306,mongodb默认27017 + - **Role** (str) - DB实例角色,mysql区分master/slave,mongodb多种角色 + - **SSDType** (str) - SSD类型,SATA/PCI-E + - **SrcDBId** (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id + - **State** (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败 + - **SubnetId** (str) - 子网ID + - **SystemFileSize** (float) - DB实例系统文件大小,单位GB + - **Tag** (str) - 获取资源其他信息 + - **UseSSD** (bool) - 是否使用SSD + - **VPCId** (str) - VPC的ID + - **VirtualIP** (str) - DB实例虚ip + - **VirtualIPMac** (str) - DB实例虚ip的mac地址 + - **Zone** (str) - DB实例所在可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstance", d, **kwargs) + return apis.DescribeUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_backup_state(self, req=None, **kwargs): + """ DescribeUDBInstanceBackupState - 获取UDB实例备份状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 备份记录ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见[可用区列表] + + **Response** + + - **BackupEndTime** (int) - + - **BackupSize** (int) - + - **State** (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBackupStateRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBackupState", d, **kwargs) + return apis.DescribeUDBInstanceBackupStateResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_backup_url(self, req=None, **kwargs): + """ DescribeUDBInstanceBackupURL - 获取UDB备份下载地址 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) DB实例备份ID,该值可以通过DescribeUDBBackup获取 + - **DBId** (str) - (Required) DB实例Id,该值可通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - DB实例备份文件公网的地址 + - **InnerBackupPath** (str) - DB实例备份文件内网的地址 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBackupURL", d, **kwargs) + return apis.DescribeUDBInstanceBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_binlog(self, req=None, **kwargs): + """ DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BeginTime** (int) - (Required) 过滤条件:起始时间(时间戳) + - **DBId** (str) - (Required) DB实例Id + - **EndTime** (int) - (Required) 过滤条件:结束时间(时间戳) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBInstanceBinlogSet** 模型定义 + + **Response Model** + + **UDBInstanceBinlogSet** + + - **BeginTime** (int) - Binlog文件生成时间(时间戳) + - **EndTime** (int) - Binlog文件结束时间(时间戳) + - **Name** (str) - Binlog文件名 + - **Size** (int) - Binlog文件大小 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBinlogRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBinlog", d, **kwargs) + return apis.DescribeUDBInstanceBinlogResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_binlog_backup_state(self, req=None, **kwargs): + """ DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) 备份记录ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + + **Response** + + - **BackupSize** (int) - 备份文件大小(字节) + - **State** (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceBinlogBackupStateRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceBinlogBackupState", d, **kwargs) + return apis.DescribeUDBInstanceBinlogBackupStateResponseSchema().loads( + resp + )
+ +
[docs] def describe_udb_instance_price(self, req=None, **kwargs): + """ DescribeUDBInstancePrice - 获取UDB实例价格信息 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBTypeId** (str) - (Required) UDB实例的DB版本字符串 + - **DiskSpace** (int) - (Required) 磁盘空间(GB),暂时支持20(GB) - 3000(GB), 输入不带单位 + - **MemoryLimit** (int) - (Required) 内存限制(MB),单位为MB.目前支持:1000-96000 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year,按年付费; Month,按月付费 Dynamic,按需付费(需开启权限) Trial,试用(需开启权限)默认为月付 + - **Count** (int) - 购买DB实例数量,最大数量为10台, 默认为1台 + - **InstanceMode** (str) - 实例的部署类型。可选值为:Normal: 普通单点实例,Slave: 从库实例,HA: 高可用部署实例,默认是Normal + - **Quantity** (int) - DB购买多少个"计费时间单位",默认值为1。比如:买2个月,Quantity就是2。如果计费单位是“按月”,并且Quantity为0,表示“购买到月底” + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必填 + - **UseSSD** (str) - 是否使用SSD,只能填true或false,默认为false + + **Response** + + - **DataSet** (list) - 见 **UDBInstancePriceSet** 模型定义 + + **Response Model** + + **UDBInstancePriceSet** + + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **Price** (int) - 价格,单位为分 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstancePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstancePrice", d, **kwargs) + return apis.DescribeUDBInstancePriceResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_state(self, req=None, **kwargs): + """ DescribeUDBInstanceState - 获取UDB实例状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **State** (str) - DB状态标记 Init:初始化中;Fail:安装失败; Starting:启动中; Running : 运行 ;Shutdown:关闭中; Shutoff :已关闭; Delete:已删除; Upgrading:升级中; Promoting: 提升为独库进行中; Recovering: 恢复中; Recover fail:恢复失败。 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceStateRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceState", d, **kwargs) + return apis.DescribeUDBInstanceStateResponseSchema().loads(resp)
+ +
[docs] def describe_udb_instance_upgrade_price(self, req=None, **kwargs): + """ DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G + - **MemoryLimit** (int) - (Required) 内存限制(MB) + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Price** (int) - 价格,单位为分 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBInstanceUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBInstanceUpgradePrice", d, **kwargs) + return apis.DescribeUDBInstanceUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def describe_udb_log_backup_url(self, req=None, **kwargs): + """ DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (int) - (Required) DB实例备份ID + - **DBId** (str) - (Required) DB实例Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - 备份外网URL + - **UsernetPath** (str) - 备份用户网URL + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBLogBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBLogBackupURL", d, **kwargs) + return apis.DescribeUDBLogBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_udb_log_package(self, req=None, **kwargs): + """ DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 + - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 + - **BeginTime** (int) - 过滤条件:起始时间(时间戳) + - **DBId** (str) - DB实例Id,如果指定,则只获取该db的备份信息 + - **EndTime** (int) - 过滤条件:结束时间(时间戳) + - **Type** (int) - 需要列出的备份文件类型,每种文件的值如下 2 : BINLOG\\_BACKUP 3 : SLOW\\_QUERY\\_BACKUP 4 : ERRORLOG\\_BACKUP + - **Types** (list) - Types作为Type的补充,支持多值传入,可以获取多个类型的日志记录,如:Types.0=2&Types.1=3 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **LogPackageDataSet** 模型定义 + - **TotalCount** (int) - 备份总数,如果指定dbid,则是该db备份总数 + + **Response Model** + + **LogPackageDataSet** + + - **BackupId** (int) - 备份id + - **BackupName** (str) - 备份名称 + - **BackupSize** (int) - 备份文件大小 + - **BackupTime** (int) - 备份时间 + - **BackupType** (int) - 备份类型,包括2-binlog备份,3-slowlog备份 + - **BackupZone** (str) - 跨可用区高可用备库所在可用区 + - **DBId** (str) - dbid + - **DBName** (str) - 对应的db名称 + - **State** (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期 + - **Zone** (str) - 所在可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBLogPackageRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBLogPackage", d, **kwargs) + return apis.DescribeUDBLogPackageResponseSchema().loads(resp)
+ +
[docs] def describe_udb_param_group(self, req=None, **kwargs): + """ DescribeUDBParamGroup - 获取参数组详细参数信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 + - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 + - **ClassType** (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver) + - **GroupId** (int) - 参数组id,如果指定则获取描述,否则是列表操作,需要 指定Offset/Limit + - **IsInUDBC** (bool) - 是否选取专区中配置 + - **RegionFlag** (bool) - 当请求没有填写Zone时,如果指定为true,表示只拉取跨可用区的相关配置文件,否则,拉取所有机房的配置文件(包括每个单可用区和跨可用区) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDBParamGroupSet** 模型定义 + - **TotalCount** (int) - 参数组总数,列表操作时才会有该参数 + + **Response Model** + + **UDBParamMemberSet** + + - **AllowedVal** (str) - 允许的值(根据参数类型,用分隔符表示) + - **ApplyType** (int) - 参数值应用类型,取值范围为{0,10,20},各值代表 意义为0-unknown、10-static、20-dynamic + - **FormatType** (int) - 允许值的格式类型,取值范围为{0,10,20},意义分 别为PVFT_UNKOWN=0,PVFT_RANGE=10, PVFT_ENUM=20 + - **Key** (str) - 参数名称 + - **Modifiable** (bool) - 是否可更改,默认为false + - **Value** (str) - 参数值 + - **ValueType** (int) - 参数值应用类型,取值范围为{0,10,20,30},各值 代表意义为 0-unknown、10-int、20-string、 30-bool + + **UDBParamGroupSet** + + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6 7:percona-5.6 + - **Description** (str) - 参数组描述 + - **GroupId** (int) - 参数组id + - **GroupName** (str) - 参数组名称 + - **Modifiable** (bool) - 参数组是否可修改 + - **ParamMember** (list) - 见 **UDBParamMemberSet** 模型定义 + - **RegionFlag** (bool) - + - **Zone** (str) - + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBParamGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBParamGroup", d, **kwargs) + return apis.DescribeUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def describe_udb_type(self, req=None, **kwargs): + """ DescribeUDBType - 获取UDB支持的类型信息 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupZone** (str) - 跨可用区高可用DB的备库所在区域,仅当该可用区支持跨可用区高可用时填入。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBClusterType** (str) - DB实例类型,如mysql,sqlserver,mongo,postgresql + - **DiskType** (str) - 返回支持某种磁盘类型的DB类型。如果没传,则表示任何磁盘类型均可。 + - **InstanceMode** (str) - 返回支持某种实例类型的DB类型。如果没传,则表示任何实例类型均可。normal:单点,ha:高可用,sharded_cluster:分片集群 + + **Response** + + - **Action** (str) - 操作名称 + - **DataSet** (list) - 见 **UDBTypeSet** 模型定义 + - **RetCode** (int) - 返回码 + + **Response Model** + + **UDBTypeSet** + + - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id, 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDBTypeRequestSchema().dumps(d) + resp = self.invoke("DescribeUDBType", d, **kwargs) + return apis.DescribeUDBTypeResponseSchema().loads(resp)
+ +
[docs] def edit_udb_backup_blacklist(self, req=None, **kwargs): + """ EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Blacklist** (str) - (Required) 黑名单,规范示例,指定库mysql.%;test.%; 指定表city.address; + - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.EditUDBBackupBlacklistRequestSchema().dumps(d) + resp = self.invoke("EditUDBBackupBlacklist", d, **kwargs) + return apis.EditUDBBackupBlacklistResponseSchema().loads(resp)
+ +
[docs] def fetch_udb_instance_earliest_recover_time(self, req=None, **kwargs): + """ FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) DB实例Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **EarliestTime** (int) - 获取最早可回档时间点 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.FetchUDBInstanceEarliestRecoverTimeRequestSchema().dumps(d) + resp = self.invoke("FetchUDBInstanceEarliestRecoverTime", d, **kwargs) + return apis.FetchUDBInstanceEarliestRecoverTimeResponseSchema().loads( + resp + )
+ +
[docs] def modify_udb_instance_name(self, req=None, **kwargs): + """ ModifyUDBInstanceName - 重命名UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Name** (str) - (Required) 实例的新名字, 长度要求为6~63位 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUDBInstanceNameRequestSchema().dumps(d) + resp = self.invoke("ModifyUDBInstanceName", d, **kwargs) + return apis.ModifyUDBInstanceNameResponseSchema().loads(resp)
+ +
[docs] def modify_udb_instance_password(self, req=None, **kwargs): + """ ModifyUDBInstancePassword - 修改DB实例的管理员密码 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的ID,该值可以通过DescribeUDBInstance获取 + - **Password** (str) - (Required) 实例的新密码 + - **AccountName** (str) - sqlserver帐号,仅在sqlserver的情况下填该参数 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUDBInstancePasswordRequestSchema().dumps(d) + resp = self.invoke("ModifyUDBInstancePassword", d, **kwargs) + return apis.ModifyUDBInstancePasswordResponseSchema().loads(resp)
+ +
[docs] def promote_udb_instance_to_ha(self, req=None, **kwargs): + """ PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PromoteUDBInstanceToHARequestSchema().dumps(d) + resp = self.invoke("PromoteUDBInstanceToHA", d, **kwargs) + return apis.PromoteUDBInstanceToHAResponseSchema().loads(resp)
+ +
[docs] def promote_udb_slave(self, req=None, **kwargs): + """ PromoteUDBSlave - 从库提升为独立库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **IsForce** (bool) - 是否强制(如果从库落后可能会禁止提升),默认false 如果落后情况下,强制提升丢失数据 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PromoteUDBSlaveRequestSchema().dumps(d) + resp = self.invoke("PromoteUDBSlave", d, **kwargs) + return apis.PromoteUDBSlaveResponseSchema().loads(resp)
+ +
[docs] def resize_udb_instance(self, req=None, **kwargs): + """ ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id + - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G-3000G + - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/ 12000M/16000M/ 24000M/32000M/ 48000M/64000M/96000M。 + - **CouponId** (str) - 使用的代金券id + - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例 "HA": 高可用版UDB实例 默认是"Normal" + - **InstanceType** (str) - UDB数据库机型: "Normal": "标准机型" , "SATA_SSD": "SSD机型" , "PCIE_SSD": "SSD高性能机型" , "Normal_Volume": "标准大容量机型", "SATA_SSD_Volume": "SSD大容量机型" , "PCIE_SSD_Volume": "SSD高性能大容量机型" + - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 + - **StartAfterUpgrade** (bool) - DB关闭状态下升降级,升降级后是否启动DB,默认为false + - **UDBCId** (str) - 专区的ID,如果有值表示专区中的DB配置升降级 + - **UseSSD** (bool) - 是否使用SSD,默认为false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("ResizeUDBInstance", d, **kwargs) + return apis.ResizeUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def restart_udb_instance(self, req=None, **kwargs): + """ RestartUDBInstance - 重启UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RestartUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("RestartUDBInstance", d, **kwargs) + return apis.RestartUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def start_udb_instance(self, req=None, **kwargs): + """ StartUDBInstance - 启动UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StartUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("StartUDBInstance", d, **kwargs) + return apis.StartUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def stop_udb_instance(self, req=None, **kwargs): + """ StopUDBInstance - 关闭UDB实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **ForceToKill** (bool) - 是否使用强制手段关闭DB,默认是false + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StopUDBInstanceRequestSchema().dumps(d) + resp = self.invoke("StopUDBInstance", d, **kwargs) + return apis.StopUDBInstanceResponseSchema().loads(resp)
+ +
[docs] def switch_udb_instance_to_ha(self, req=None, **kwargs): + """ SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 + - **ChargeType** (str) - Year, Month, Dynamic,Trial,不填则按现在单点计费执行 + - **Quantity** (str) - 购买时长,需要和 ChargeType 搭配使用,否则使用单点计费策略的值 + - **Tag** (str) - 业务组 + + **Response** + + - **DBId** (str) - 切换后高可用db实例的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SwitchUDBInstanceToHARequestSchema().dumps(d) + resp = self.invoke("SwitchUDBInstanceToHA", d, **kwargs) + return apis.SwitchUDBInstanceToHAResponseSchema().loads(resp)
+ +
[docs] def update_udb_instance_backup_strategy(self, req=None, **kwargs): + """ UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DBId** (str) - (Required) 主节点的Id + - **BackupDate** (str) - 备份时期标记位。共7位,每一位为一周中一天的备份情况,0表示关闭当天备份,1表示打开当天备份。最右边的一位为星期天的备份开关,其余从右到左依次为星期一到星期六的备份配置开关,每周必须至少设置两天备份。例如:1100000表示打开星期六和星期五的备份功能 + - **BackupMethod** (str) - 选择默认的备份方式,可选 snapshot 表示使用快照/物理备份,填 logic 表示使用逻辑备份。需要同时设置BackupDate字段。(注意现在只有SSD 版本的 MySQL实例支持物理备份) + - **BackupTime** (int) - 备份的整点时间,范围[0,23] + - **ForceDump** (bool) - 当导出某些数据遇到问题后,是否强制导出其他剩余数据默认是false需要同时设置BackupDate字段 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUDBInstanceBackupStrategyRequestSchema().dumps(d) + resp = self.invoke("UpdateUDBInstanceBackupStrategy", d, **kwargs) + return apis.UpdateUDBInstanceBackupStrategyResponseSchema().loads(resp)
+ +
[docs] def update_udb_instance_slave_backup_switch(self, req=None, **kwargs): + """ UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupSwitch** (int) - (Required) 从库的备份开关,范围[0,1],0表示从库备份功能关闭,1 表示从库备份开关打开。 + - **MasterDBId** (str) - (Required) 主库的Id + - **SlaveDBId** (str) - 从库的Id,如果从库备份开关设定为打开,则必须赋值。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUDBInstanceSlaveBackupSwitchRequestSchema().dumps(d) + resp = self.invoke("UpdateUDBInstanceSlaveBackupSwitch", d, **kwargs) + return apis.UpdateUDBInstanceSlaveBackupSwitchResponseSchema().loads( + resp + )
+ +
[docs] def update_udb_param_group(self, req=None, **kwargs): + """ UpdateUDBParamGroup - 更新UDB配置参数项 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (int) - (Required) 配置参数组id,使用DescribeUDBParamGroup获得 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Description** (str) - 配置文件的描述,不传时认为不修改 + - **Key** (str) - 参数名称(与Value配合使用) + - **Name** (str) - 配置文件的名字,不传时认为不修改名字,传了则不能为空 + - **RegionFlag** (bool) - 该配置文件是否是地域级别配置文件,默认是false + - **Value** (str) - 参数值(与Key配合使用) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUDBParamGroupRequestSchema().dumps(d) + resp = self.invoke("UpdateUDBParamGroup", d, **kwargs) + return apis.UpdateUDBParamGroupResponseSchema().loads(resp)
+ +
[docs] def upload_udb_param_group(self, req=None, **kwargs): + """ UploadUDBParamGroup - 导入UDB配置 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Content** (str) - (Required) 配置内容,导入的配置内容采用base64编码 + - **DBTypeId** (str) - (Required) DB类型id,DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6 + - **Description** (str) - (Required) 参数组描述 + - **GroupName** (str) - (Required) 配置参数组名称 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ParamGroupTypeId** (int) - 配置文件子类型 0-未知, 1-Shardsvr-MMAPv1, 2-Shardsvr-WiredTiger, 3-Configsvr-MMAPv1, 4-Configsvr-WiredTiger, 5-Mongos + - **RegionFlag** (bool) - 该配置文件是否是地域级别配置文件,默认是false + + **Response** + + - **GroupId** (int) - 配置参数组id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UploadUDBParamGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("UploadUDBParamGroup", d, **kwargs) + return apis.UploadUDBParamGroupResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/udisk/client.html b/docs/build/html/_modules/ucloud/services/udisk/client.html new file mode 100644 index 0000000..c7f9bb5 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/udisk/client.html @@ -0,0 +1,566 @@ + + + + + + + + ucloud.services.udisk.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.udisk.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.udisk.schemas import apis
+
+
+
[docs]class UDiskClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UDiskClient, self).__init__(config, transport, middleware, logger) + +
[docs] def attach_udisk(self, req=None, **kwargs): + """ AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 需要挂载的UDisk实例ID. + - **UHostId** (str) - (Required) UHost实例ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **MultiAttach** (str) - 是否允许多点挂载(Yes: 允许多点挂载, No: 不允许多点挂载, 不填默认Yes ) + + **Response** + + - **UDiskId** (str) - 挂载的UDisk实例ID + - **UHostId** (str) - 挂载的UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AttachUDiskRequestSchema().dumps(d) + resp = self.invoke("AttachUDisk", d, **kwargs) + return apis.AttachUDiskResponseSchema().loads(resp)
+ +
[docs] def clone_udisk(self, req=None, **kwargs): + """ CloneUDisk - 从UDisk创建UDisk克隆 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称 + - **SourceId** (str) - (Required) 克隆父Disk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic,Postpay 默认: Dynamic + - **Comment** (str) - Disk注释 + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长 默认: 1 + - **UDataArkMode** (str) - 方舟是否开启,"Yes":开启,"No":关闭;默认为"No" + + **Response** + + - **UDiskId** (list) - 创建UDisk Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CloneUDiskRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CloneUDisk", d, **kwargs) + return apis.CloneUDiskResponseSchema().loads(resp)
+ +
[docs] def clone_udisk_snapshot(self, req=None, **kwargs): + """ CloneUDiskSnapshot - 从快照创建UDisk克隆 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称 + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。 + - **SourceId** (str) - (Required) 克隆父Snapshot的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic,Postpay 默认: Dynamic + - **Comment** (str) - Disk注释 + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长 默认: 1 + - **UDataArkMode** (str) - 是否开启数据方舟 默认:No + + **Response** + + - **UDiskId** (list) - 创建UDisk Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CloneUDiskSnapshotRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CloneUDiskSnapshot", d, **kwargs) + return apis.CloneUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def create_udisk(self, req=None, **kwargs): + """ CreateUDisk - 创建UDisk磁盘 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 实例名称 + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,普通盘: 范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限;SSD盘: 范围[1~4000]。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic, Postpay, Trial 默认: Dynamic + - **CmkId** (str) - 加密需要的cmk id,UKmsMode为Yes时,必填 + - **CouponId** (str) - 使用的代金券id + - **DiskType** (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk) + - **Quantity** (int) - 购买时长 默认: 1 + - **Tag** (str) - 业务组 默认:Default + - **UDataArkMode** (str) - 是否开启数据方舟 + - **UKmsMode** (str) - 是否加密。Yes:加密,No:不加密,默认值(No) + + **Response** + + - **UDiskId** (list) - UDisk实例Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDiskRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDisk", d, **kwargs) + return apis.CreateUDiskResponseSchema().loads(resp)
+ +
[docs] def create_udisk_snapshot(self, req=None, **kwargs): + """ CreateUDiskSnapshot - 创建snapshot快照 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 快照名称 + - **UDiskId** (str) - (Required) 快照的UDisk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year , Month, Dynamic 默认: Dynamic + - **Comment** (str) - 快照描述 + - **Quantity** (int) - 购买时长 默认: 1 + + **Response** + + - **SnapshotId** (list) - 快照Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUDiskSnapshotRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUDiskSnapshot", d, **kwargs) + return apis.CreateUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def delete_udisk(self, req=None, **kwargs): + """ DeleteUDisk - 删除UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 要删除的UDisk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDiskRequestSchema().dumps(d) + resp = self.invoke("DeleteUDisk", d, **kwargs) + return apis.DeleteUDiskResponseSchema().loads(resp)
+ +
[docs] def delete_udisk_snapshot(self, req=None, **kwargs): + """ DeleteUDiskSnapshot - 删除Snapshot + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SnapshotId** (str) - 快照Id(填写后不能填写UDisk Id) + - **UDiskId** (str) - UDisk Id,删除该盘所创建出来的所有快照(填写后不能填写SnapshotId) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUDiskSnapshotRequestSchema().dumps(d) + resp = self.invoke("DeleteUDiskSnapshot", d, **kwargs) + return apis.DeleteUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def describe_udisk(self, req=None, **kwargs): + """ DescribeUDisk - 获取UDisk实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DiskType** (str) - ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:"CLOUD_NORMAL",IsBoot:"False"; 普通系统盘:DiskType:"CLOUD_NORMAL",IsBoot:"True";SSD数据盘:DiskType:"CLOUD_SSD",IsBoot:"False";SSD系统盘:DiskType:"CLOUD_SSD",IsBoot:"True";RSSD数据盘:DiskType:"CLOUD_RSSD",IsBoot:"False";为空拉取所有。ProtocolVersion字段为0或没有该字段时,可设为以下几个值:普通数据盘:DataDisk;普通系统盘;SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk;为空拉取所有。 + - **IsBoot** (str) - ProtocolVersion字段为1且DiskType不为空时,必须设置,设置规则请参照DiskType;ProtocolVersion字段为1且DiskType为空时,该字段无效。ProtocolVersion字段为0或没有该字段时,该字段无效。 + - **Limit** (int) - 返回数据长度, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **ProtocolVersion** (int) - 请求协议版本,建议升级为1,为1时DiskType与UHost磁盘类型定义一致;默认为0 + - **UDiskId** (str) - UDisk Id(留空返回全部) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDiskDataSet** 模型定义 + - **TotalCount** (int) - 根据过滤条件得到的总数 + + **Response Model** + + **UDiskDataSet** + + - **ArkSwitchEnable** (int) - 是否支持开启方舟,1支持 ,0不支持 + - **ChargeType** (str) - Year,Month,Dynamic,Trial,Postpay + - **CloneEnable** (int) - 是否支持克隆,1支持 ,0不支持 + - **CmkId** (str) - 该盘的cmk id + - **CmkIdAlias** (str) - cmk id 别名 + - **CmkIdStatus** (str) - 该盘cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘) + - **CreateTime** (int) - 创建时间 + - **DataKey** (str) - 该盘的密文密钥 + - **DeviceName** (str) - 挂载的设备名称 + - **DiskType** (str) - 请求中的ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:"CLOUD_NORMAL",IsBoot:"False"; 普通系统盘:DiskType:"CLOUD_NORMAL",IsBoot:"True";SSD数据盘:DiskType:"CLOUD_SSD",IsBoot:"False";SSD系统盘:DiskType:"CLOUD_SSD",IsBoot:"True";RSSD数据盘:DiskType:"CLOUD_RSSD",IsBoot:"False"。请求中的ProtocolVersion字段为0或没有该字段时,云硬盘类型参照如下:普通数据盘:DataDisk;普通系统盘:SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk。 + - **ExpiredTime** (int) - 过期时间 + - **IsBoot** (str) - 是否是系统盘,是:"True", 否:"False" + - **IsExpire** (str) - 资源是否过期,过期:"Yes", 未过期:"No" + - **Name** (str) - 实例名称 + - **Size** (int) - 容量单位GB + - **SnapEnable** (int) - 是否支持快照,1支持 ,0不支持 + - **SnapshotCount** (int) - 该盘快照个数 + - **SnapshotLimit** (int) - 该盘快照上限 + - **Status** (str) - 状态:Available(可用),Attaching(挂载中), InUse(已挂载), Detaching(卸载中), Initializating(分配中), Failed(创建失败),Cloning(克隆中),Restoring(恢复中),RestoreFailed(恢复失败), + - **Tag** (str) - 业务组名称 + - **UDataArkMode** (str) - 是否开启数据方舟,开启:"Yes", 不支持:"No" + - **UDiskId** (str) - UDisk实例Id + - **UHostIP** (str) - 挂载的UHost的IP + - **UHostId** (str) - 挂载的UHost的Id + - **UHostName** (str) - 挂载的UHost的Name + - **UKmsMode** (str) - 是否是加密盘,是:"Yes", 否:"No" + - **Version** (str) - 是否支持数据方舟,支持:"2.0", 不支持:"1.0" + - **Zone** (str) - 可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskRequestSchema().dumps(d) + resp = self.invoke("DescribeUDisk", d, **kwargs) + return apis.DescribeUDiskResponseSchema().loads(resp)
+ +
[docs] def describe_udisk_price(self, req=None, **kwargs): + """ DescribeUDiskPrice - 获取UDisk实例价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~1000] + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic + - **DiskType** (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),SystemDisk(普通系统盘),SSDSystemDisk(SSD系统盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk) + - **Quantity** (int) - 购买UDisk的时长,默认值为1 + - **UDataArkMode** (str) - 是否打开数据方舟, 打开"Yes",关闭"No", 默认关闭 + + **Response** + + - **DataSet** (list) - 见 **UDiskPriceDataSet** 模型定义 + + **Response Model** + + **UDiskPriceDataSet** + + - **ChargeName** (str) - "UDataArk","UDisk" + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **OriginalPrice** (int) - 用户折后价 + - **Price** (int) - 价格 (单位: 分) + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskPriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDiskPrice", d, **kwargs) + return apis.DescribeUDiskPriceResponseSchema().loads(resp)
+ +
[docs] def describe_udisk_snapshot(self, req=None, **kwargs): + """ DescribeUDiskSnapshot - 获取UDisk快照 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **SnapshotId** (str) - 快照id,SnapshotId , UDiskId 同时传SnapshotId优先 + - **UDiskId** (str) - UDiskId,返回该盘所做快照.(必须同时传Zone) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDiskSnapshotSet** 模型定义 + - **TotalCount** (int) - 根据过滤条件得到的总数 + + **Response Model** + + **UDiskSnapshotSet** + + - **CmkId** (str) - 该快照的cmk id + - **CmkIdAlias** (str) - cmk id 别名 + - **CmkIdStatus** (str) - 该快照cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘) + - **Comment** (str) - 快照描述 + - **CreateTime** (int) - 创建时间 + - **DataKey** (str) - 该快照的密文密钥 + - **DiskType** (int) - 磁盘类型,0:数据盘,1:系统盘 + - **ExpiredTime** (int) - 过期时间 + - **IsUDiskAvailable** (bool) - 对应磁盘是否处于可用状态 + - **Name** (str) - 快照名称 + - **Size** (int) - 容量单位GB + - **SnapshotId** (str) - 快照Id + - **Status** (str) - 快照状态,Normal:正常,Failed:失败,Creating:制作中 + - **UDiskId** (str) - 快照的源UDisk的Id + - **UDiskName** (str) - 快照的源UDisk的Name + - **UHostId** (str) - 对应磁盘制作快照时所挂载的主机 + - **UKmsMode** (str) - 是否是加密盘快照,是:"Yes", 否:"No" + - **Version** (str) - 快照版本 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskSnapshotRequestSchema().dumps(d) + resp = self.invoke("DescribeUDiskSnapshot", d, **kwargs) + return apis.DescribeUDiskSnapshotResponseSchema().loads(resp)
+ +
[docs] def describe_udisk_upgrade_price(self, req=None, **kwargs): + """ DescribeUDiskUpgradePrice - 获取UDisk升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。 + - **SourceId** (str) - (Required) 升级目标UDisk ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DiskType** (str) - 磁盘类型,SSDDataDisk:ssd数据盘,DataDisk:普通数据盘,SystemDisk:普通系统盘,SSDSystemDisk:ssd系统盘。默认为DataDisk + - **UDataArkMode** (str) - 是否打开数据方舟, 打开"Yes",关闭"No", 默认关闭 + + **Response** + + - **OriginalPrice** (int) - 用户折后价 + - **Price** (int) - 价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDiskUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUDiskUpgradePrice", d, **kwargs) + return apis.DescribeUDiskUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def detach_udisk(self, req=None, **kwargs): + """ DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 需要卸载的UDisk实例ID + - **UHostId** (str) - (Required) UHost实例ID + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UDiskId** (str) - 卸载的UDisk实例ID + - **UHostId** (str) - 卸载的UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DetachUDiskRequestSchema().dumps(d) + resp = self.invoke("DetachUDisk", d, **kwargs) + return apis.DetachUDiskResponseSchema().loads(resp)
+ +
[docs] def rename_udisk(self, req=None, **kwargs): + """ RenameUDisk - 重命名UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 重命名的UDisk的Id + - **UDiskName** (str) - (Required) 重命名UDisk的name + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RenameUDiskRequestSchema().dumps(d) + resp = self.invoke("RenameUDisk", d, **kwargs) + return apis.RenameUDiskResponseSchema().loads(resp)
+ +
[docs] def resize_udisk(self, req=None, **kwargs): + """ ResizeUDisk - 调整UDisk容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 调整后大小, 单位:GB, 范围[1~2000],权限位控制可达8000,若需要请申请开通相关权限。 + - **UDiskId** (str) - (Required) UDisk Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CouponId** (str) - 使用的代金券id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUDiskRequestSchema().dumps(d) + resp = self.invoke("ResizeUDisk", d, **kwargs) + return apis.ResizeUDiskResponseSchema().loads(resp)
+ +
[docs] def restore_udisk(self, req=None, **kwargs): + """ RestoreUDisk - 从备份恢复数据至UDisk + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDiskId** (str) - (Required) 需要恢复的盘id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SnapshotId** (str) - 从指定的快照恢复 + - **SnapshotTime** (int) - 指定从方舟恢复的备份时间点 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RestoreUDiskRequestSchema().dumps(d) + resp = self.invoke("RestoreUDisk", d, **kwargs) + return apis.RestoreUDiskResponseSchema().loads(resp)
+ +
[docs] def set_udisk__udataark_mode(self, req=None, **kwargs): + """ SetUDiskUDataArkMode - 设置UDisk数据方舟的状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDataArkMode** (str) - (Required) 是否开启数据方舟,开启:"Yes", 不支持:"No" + - **UDiskId** (str) - (Required) 需要设置数据方舟的UDisk的Id + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SetUDiskUDataArkModeRequestSchema().dumps(d) + resp = self.invoke("SetUDiskUDataArkMode", d, **kwargs) + return apis.SetUDiskUDataArkModeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/udpn/client.html b/docs/build/html/_modules/ucloud/services/udpn/client.html new file mode 100644 index 0000000..da357bd --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/udpn/client.html @@ -0,0 +1,285 @@ + + + + + + + + ucloud.services.udpn.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.udpn.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.udpn.schemas import apis
+
+
+
[docs]class UDPNClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UDPNClient, self).__init__(config, transport, middleware, logger) + +
[docs] def allocate_udpn(self, req=None, **kwargs): + """ AllocateUDPN - 分配一条 UDPN 专线 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 带宽 + - **Peer1** (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **Peer2** (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **ChargeType** (str) - 计费类型,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费 + - **CouponId** (str) - 代金劵 + - **Quantity** (int) - 计费时长,默认 1 + + **Response** + + - **UDPNId** (str) - 资源名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateUDPNRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateUDPN", d, **kwargs) + return apis.AllocateUDPNResponseSchema().loads(resp)
+ +
[docs] def describe_udpn(self, req=None, **kwargs): + """ DescribeUDPN - 描述 UDPN + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度,默认为 20 + - **Offset** (int) - 列表起始位置偏移量,默认为 0 + - **UDPNId** (str) - 申请到的 UDPN 资源 ID。若为空,则查询该用户在机房所有的专线信息。非默认项目资源,需填写ProjectId + + **Response** + + - **DataSet** (list) - 见 **UDPNData** 模型定义 + - **TotalCount** (int) - 查询到的总数量 + + **Response Model** + + **UDPNData** + + - **Bandwidth** (int) - 带宽 + - **ChargeType** (str) - 计费类型 + - **CreateTime** (int) - unix 时间戳 创建时间 + - **ExpireTime** (int) - unix 时间戳 到期时间 + - **Peer1** (str) - 可用区域 1 + - **Peer2** (str) - 可用区域 2 + - **UDPNId** (str) - UDPN 资源短 ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUDPNRequestSchema().dumps(d) + resp = self.invoke("DescribeUDPN", d, **kwargs) + return apis.DescribeUDPNResponseSchema().loads(resp)
+ +
[docs] def get_udpn_line_list(self, req=None, **kwargs): + """ GetUDPNLineList - 获取当前支持的专线线路列表 + + **Request** + + - **ProjectId** (str) - (Config) + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UDPNLineSet** 模型定义 + - **TotalCount** (int) - DataSet中的元素个数 + + **Response Model** + + **UDPNLineSet** + + - **BandwidthUpperLimit** (int) - 线路带宽上限,单位 M + - **LocalRegion** (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky + - **RemoteRegion** (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUDPNLineListRequestSchema().dumps(d) + resp = self.invoke("GetUDPNLineList", d, **kwargs) + return apis.GetUDPNLineListResponseSchema().loads(resp)
+ +
[docs] def get_udpn_price(self, req=None, **kwargs): + """ GetUDPNPrice - 获取 UDPN 价格 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 带宽信息 + - **Peer1** (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **Peer2** (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky + - **ChargeType** (str) - 计费类型 + - **Quantity** (int) - 购买时长 + + **Response** + + - **Price** (float) - 专线价格 + - **PurchaseValue** (int) - 资源有效期 unix 时间戳 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.GetUDPNPriceRequestSchema().dumps(d) + resp = self.invoke("GetUDPNPrice", d, **kwargs) + return apis.GetUDPNPriceResponseSchema().loads(resp)
+ +
[docs] def get_udpn_upgrade_price(self, req=None, **kwargs): + """ GetUDPNUpgradePrice - 获取专线升级价格 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 带宽 + - **UDPNId** (str) - (Required) 专线带宽资源 Id + + **Response** + + - **Price** (float) - 升级后的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUDPNUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("GetUDPNUpgradePrice", d, **kwargs) + return apis.GetUDPNUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def modify_udpn_bandwidth(self, req=None, **kwargs): + """ ModifyUDPNBandwidth - 修改带宽值 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 调整后专线带宽, 单位为Mbps,取值范围为大于等于2且小于等于1000([2-1000])的整数 + - **UDPNId** (str) - (Required) UDPN Id + - **CouponId** (str) - 代金劵 ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUDPNBandwidthRequestSchema().dumps(d) + resp = self.invoke("ModifyUDPNBandwidth", d, **kwargs) + return apis.ModifyUDPNBandwidthResponseSchema().loads(resp)
+ +
[docs] def release_udpn(self, req=None, **kwargs): + """ ReleaseUDPN - 释放 UDPN + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UDPNId** (str) - (Required) UDPN 资源 Id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseUDPNRequestSchema().dumps(d) + resp = self.invoke("ReleaseUDPN", d, **kwargs) + return apis.ReleaseUDPNResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/ufs/client.html b/docs/build/html/_modules/ucloud/services/ufs/client.html new file mode 100644 index 0000000..16bd475 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/ufs/client.html @@ -0,0 +1,222 @@ + + + + + + + + ucloud.services.ufs.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ufs.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ufs.schemas import apis
+
+
+
[docs]class UFSClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UFSClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_ufs_volume(self, req=None, **kwargs): + """ CreateUFSVolume - 创建文件系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ProtocolType** (str) - (Required) 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议 + - **Size** (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB + - **StorageType** (str) - (Required) 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型 + - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限) 默认为Dynamic + - **CouponId** (str) - 使用的代金券id + - **Quantity** (int) - 购买时长 默认: 1 + - **Remark** (str) - 备注 + - **Tag** (str) - 文件系统所属业务组 + - **VolumeName** (str) - 文件系统名称 + + **Response** + + - **VolumeId** (str) - 文件系统ID + - **VolumeName** (str) - 文件系统名称 + - **VolumeStatus** (str) - 文件系统挂载点状态 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUFSVolumeRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUFSVolume", d, **kwargs) + return apis.CreateUFSVolumeResponseSchema().loads(resp)
+ +
[docs] def describe_ufs_volume_2(self, req=None, **kwargs): + """ DescribeUFSVolume2 - 获取文件系统列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 文件列表长度 + - **Offset** (int) - 文件列表起始 + - **VolumeId** (str) - 文件系统ID + + **Response** + + - **DataSet** (list) - 见 **UFSVolumeInfo2** 模型定义 + - **TotalCount** (int) - 文件系统总数 + + **Response Model** + + **UFSVolumeInfo2** + + - **CreateTime** (int) - 文件系统创建时间(unix时间戳) + - **ExpiredTime** (int) - 文件系统过期时间(unix时间戳) + - **IsExpired** (str) - 是否过期 + - **MaxMountPointNum** (int) - 文件系统允许创建的最大挂载点数目 + - **ProtocolType** (str) - 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议 + - **Remark** (str) - 文件系统备注信息 + - **Size** (int) - 文件系统大小,单位GB + - **StorageType** (str) - 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型 + - **Tag** (str) - 文件系统所属业务组 + - **TotalMountPointNum** (int) - 当前文件系统已创建的挂载点数目 + - **UsedSize** (int) - 文件系统当前使用容量,单位GB + - **VolumeId** (str) - 文件系统ID + - **VolumeName** (str) - 文件系统名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUFSVolume2RequestSchema().dumps(d) + resp = self.invoke("DescribeUFSVolume2", d, **kwargs) + return apis.DescribeUFSVolume2ResponseSchema().loads(resp)
+ +
[docs] def extend_ufs_volume(self, req=None, **kwargs): + """ ExtendUFSVolume - 文件系统扩容 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB + - **VolumeId** (str) - (Required) 文件系统ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ExtendUFSVolumeRequestSchema().dumps(d) + resp = self.invoke("ExtendUFSVolume", d, **kwargs) + return apis.ExtendUFSVolumeResponseSchema().loads(resp)
+ +
[docs] def remove_ufs_volume(self, req=None, **kwargs): + """ RemoveUFSVolume - 删除UFS文件系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VolumeId** (str) - (Required) 文件系统ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RemoveUFSVolumeRequestSchema().dumps(d) + resp = self.invoke("RemoveUFSVolume", d, **kwargs) + return apis.RemoveUFSVolumeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/uhost/client.html b/docs/build/html/_modules/ucloud/services/uhost/client.html new file mode 100644 index 0000000..a0d953e --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/uhost/client.html @@ -0,0 +1,866 @@ + + + + + + + + ucloud.services.uhost.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uhost.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uhost.schemas import apis
+
+
+
[docs]class UHostClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UHostClient, self).__init__(config, transport, middleware, logger) + +
[docs] def copy_custom_image(self, req=None, **kwargs): + """ CopyCustomImage - 复制自制镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SourceImageId** (str) - (Required) 源镜像Id, 参见 DescribeImage + - **TargetProjectId** (str) - (Required) 目标项目Id, 参见 GetProjectList + - **TargetImageDescription** (str) - 目标镜像描述 + - **TargetImageName** (str) - 目标镜像名称 + - **TargetRegion** (str) - 目标地域,不跨地域不用填 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TargetImageId** (str) - 目标镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CopyCustomImageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CopyCustomImage", d, **kwargs) + return apis.CopyCustomImageResponseSchema().loads(resp)
+ +
[docs] def create_custom_image(self, req=None, **kwargs): + """ CreateCustomImage - 从指定UHost实例,生成自定义镜像。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageName** (str) - (Required) 镜像名称 + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **ImageDescription** (str) - 镜像描述 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **ImageId** (str) - 镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateCustomImageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateCustomImage", d, **kwargs) + return apis.CreateCustomImageResponseSchema().loads(resp)
+ +
[docs] def create_uhost_instance(self, req=None, **kwargs): + """ CreateUHostInstance - 创建UHost实例。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - (Required) 镜像ID。 请通过 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ 获取 + - **LoginMode** (str) - (Required) 主机登陆模式。密码(默认选项): Password。 + - **Password** (str) - (Required) UHost密码。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AlarmTemplateId** (int) - 告警模板id,如果传了告警模板id,且告警模板id正确,则绑定告警模板。绑定告警模板失败只会在后台有日志,不会影响创建主机流程,也不会在前端报错。 + - **BootDiskSpace** (int) - 【待废弃,不建议调用】系统盘大小。 单位:GB, 范围[20,100], 步长:10 + - **CPU** (int) - 虚拟CPU核数。可选参数:1-64(具体机型与CPU的对应关系参照控制台)。默认值: 4。 + - **ChargeType** (str) - 计费模式。枚举值为: \\ > Year,按年付费; \\ > Month,按月付费;\\ > Dynamic,按小时付费 \\ 默认为月付 + - **CouponId** (str) - 主机代金券ID。请通过DescribeCoupon接口查询,或登录用户中心查看 + - **DiskPassword** (str) - 【待废弃,不建议调用】加密盘的密码。若输入此字段,自动选择加密盘。加密盘需要权限位。 + - **DiskSpace** (int) - 【待废弃,不建议调用】数据盘大小。 单位:GB, 范围[0,8000], 步长:10, 默认值:20,云盘支持0-8000;本地普通盘支持0-2000;本地SSD盘(包括所有GPU机型)支持100-1000 + - **Disks** (list) - 见 **CreateUHostInstanceParamDisks** 模型定义 + - **GPU** (int) - GPU卡核心数。仅GPU机型支持此字段(可选范围与UHostType相关) + - **GpuType** (str) - GPU类型,枚举值["K80", "P40", "V100"] + - **HostType** (str) - 【已废弃】宿主机类型,N2,N1 + - **HotplugFeature** (bool) - 是否开启热升级特性。True为开启,False为未开启,默认False。 + - **InstallAgent** (str) - 【暂不支持】是否安装UGA。'yes': 安装;其他或者不填:不安装。 + - **IsolationGroup** (str) - 硬件隔离组id。可通过DescribeIsolationGroup获取。 + - **KeyPair** (str) - 【暂不支持】Keypair公钥,LoginMode为KeyPair时此项必须 + - **MachineType** (str) - 云主机机型(V2.0),枚举值["N", "C", "G", "O"]。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **MaxCount** (int) - 【批量创建主机时必填】最大创建主机数量,取值范围是[1,100]; + - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值:8192 + - **MinimalCpuPlatform** (str) - 最低cpu平台,枚举值["Intel/Auto", "Intel/IvyBridge", "Intel/Haswell", "Intel/Broadwell", "Intel/Skylake", "Intel/Cascadelake"。 + - **Name** (str) - UHost实例名称。默认:UHost。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定实例名称。 + - **NetCapability** (str) - 网络增强。枚举值:Normal(默认),不开启; Super,开启网络增强1.0; Ultra,开启网络增强2.0(仅支持部分可用区,请参考控制台) + - **NetworkId** (str) - 【已废弃】网络ID(VPC2.0情况下无需填写)。VPC1.0情况下,若不填写,代表优先选择基础网络; 若填写,代表选择子网。参见DescribeSubnet。 + - **NetworkInterface** (list) - 见 **CreateUHostInstanceParamNetworkInterface** 模型定义 + - **PrivateIp** (list) - 【数组】创建云主机时指定内网IP。若不传值,则随机分配当前子网下的IP。调用方式举例:PrivateIp.0=x.x.x.x。当前只支持一个内网IP。 + - **PrivateMac** (str) - 【批量创建该参数无效】【内部字段】创建云主机时指定Mac。调用方式举例:PrivateMac="xx:xx:xx:xx:xx:xx"。 + - **Quantity** (int) - 购买时长。默认:值 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表购买至月末。 + - **ResourceType** (int) - 【内部参数】资源类型 + - **SecurityGroupId** (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 `DescribeSecurityGroup <https://docs.ucloud.cn/api/unet-api/describe_security_group.html>`_ 。 + - **SetId** (int) - + - **StorageType** (str) - 【待废弃,不建议调用】磁盘类型,同时设定系统盘和数据盘的磁盘类型。枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘;默认为LocalDisk。仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。 + - **SubnetId** (str) - 子网 ID。默认为当前地域的默认子网。 + - **Tag** (str) - 业务组。默认:Default(Default即为未分组)。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定业务组。 + - **TimemachineFeature** (str) - 【待废弃,不建议调用】是否开启方舟特性。Yes为开启方舟,No为关闭方舟。目前仅选择普通本地盘+普通本地盘 或 SSD云盘+普通云盘的组合支持开启方舟。 + - **UHostType** (str) - 【建议后续不再使用】云主机机型V1.0。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **UserDataScript** (str) - 【暂不支持】cloudinit方式下,用户初始化脚本 + - **VPCId** (str) - VPC ID。默认为当前地域的默认VPC。 + + **Response** + + - **IPs** (list) - 【批量创建不会返回】IP信息 + - **UHostIds** (list) - UHost实例Id集合 + + **Request Model** + + **CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH** + + - **Area** (str) - 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个 + - **AreaCode** (str) - GlobalSSH的。AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个 + - **Port** (int) - SSH端口,1-65535且不能使用80,443端口 + + **CreateUHostInstanceParamNetworkInterfaceEIP** + + - **Bandwidth** (int) - 【如果绑定EIP这个参数必填】弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-300],带宽计费[1-800] + - **CouponId** (str) - 当前EIP代金券id。请通过DescribeCoupon接口查询,或登录用户中心查看 + - **GlobalSSH** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH** 模型定义 + - **OperatorName** (str) - 【如果绑定EIP这个参数必填】弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International + - **PayMode** (str) - 弹性IP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; "ShareBandwidth",共享带宽模式. "Free":免费带宽模式.默认为 "Bandwidth". + - **ShareBandwidthId** (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效 + + **CreateUHostInstanceParamDisks** + + - **BackupType** (str) - 磁盘备份方案。枚举值:\\ > NONE,无备份 \\ > DATAARK,数据方舟 \\ 当前磁盘支持的备份模式参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ + - **CouponId** (str) - 云盘代金券id。不适用于系统盘/本地盘。请通过DescribeCoupon接口查询,或登录用户中心查看 + - **Encrypted** (bool) - 【功能仅部分可用区开放,详询技术支持】磁盘是否加密。加密:true, 不加密: false加密必须传入对应的的KmsKeyId + - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 + - **KmsKeyId** (str) - 【功能仅部分可用区开放,详询技术支持】kms key id。选择加密盘时必填。 + - **Size** (int) - 磁盘大小,单位GB。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **Type** (str) - 磁盘类型。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + + **CreateUHostInstanceParamNetworkInterface** + + - **EIP** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceEIP** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUHostInstanceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUHostInstance", d, **kwargs) + return apis.CreateUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_image(self, req=None, **kwargs): + """ DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - 镜像Id + - **ImageType** (str) - 镜像类型。标准镜像:Base,镜像市场:Business, 自定义镜像:Custom,默认返回所有类型 + - **Limit** (int) - 返回数据长度,默认为20 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **OsType** (str) - 操作系统类型:Linux, Windows 默认返回所有类型 + - **PriceSet** (int) - 是否返回价格:1返回,0不返回;默认不返回 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **ImageSet** (list) - 见 **UHostImageSet** 模型定义 + - **TotalCount** (int) - 满足条件的镜像总数 + + **Response Model** + + **UHostImageSet** + + - **CreateTime** (int) - 创建时间,格式为Unix时间戳 + - **Features** (list) - 特殊状态标识, 目前包含NetEnhnced(网络增强1.0), NetEnhanced_Ultra](网络增强2.0) + - **FuncType** (str) - 行业镜像类型(仅行业镜像将返回这个值) + - **ImageDescription** (str) - 镜像描述 + - **ImageId** (str) - 镜像ID + - **ImageName** (str) - 镜像名称 + - **ImageSize** (int) - 镜像大小 + - **ImageType** (str) - 镜像类型 标准镜像:Base, 行业镜像:Business,自定义镜像:Custom + - **IntegratedSoftware** (str) - 集成软件名称(仅行业镜像将返回这个值) + - **Links** (str) - 介绍链接(仅行业镜像将返回这个值) + - **MinimalCPU** (str) - 默认值为空'''。当CentOS 7.3/7.4/7.5等镜像会标记为“Broadwell” + - **OsName** (str) - 操作系统名称 + - **OsType** (str) - 操作系统类型:Liunx,Windows + - **State** (str) - 镜像状态, 可用:Available,制作中:Making, 不可用:Unavailable + - **Vendor** (str) - 供应商(仅行业镜像将返回这个值) + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ | + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeImageRequestSchema().dumps(d) + resp = self.invoke("DescribeImage", d, **kwargs) + return apis.DescribeImageResponseSchema().loads(resp)
+ +
[docs] def describe_uhost_instance(self, req=None, **kwargs): + """ DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **IsolationGroup** (str) - 硬件隔离组id。通过硬件隔离组筛选主机。 + - **LifeCycle** (int) - 1:普通云主机;2:抢占型云主机;如不传此参数,默认全部获取 + - **Limit** (int) - 返回数据长度,默认为20,最大100 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **SubnetId** (str) - 子网id。通过子网筛选主机。北京一地域无效。 + - **Tag** (str) - 要查询的业务组名称 + - **UHostIds** (list) - 【数组】UHost主机的资源ID,例如UHostIds.0代表希望获取信息 的主机1,UHostIds.1代表主机2。 如果不传入,则返回当前Region 所有符合条件的UHost实例。 + - **VPCId** (str) - vpc id。通过VPC筛选主机。北京一地域无效。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TotalCount** (int) - UHostInstance总数 + - **UHostSet** (list) - 见 **UHostInstanceSet** 模型定义 + + **Response Model** + + **UHostDiskSet** + + - **BackupType** (str) - 备份方案。若开通了数据方舟,则为DataArk + - **DiskId** (str) - 磁盘ID + - **DiskType** (str) - 磁盘类型。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **Drive** (str) - 磁盘盘符 + - **Encrypted** (bool) - true: 加密盘 false:非加密盘 + - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 + - **Name** (str) - UDisk名字(仅当磁盘是UDisk时返回) + - **Size** (int) - 磁盘大小,单位: GB + - **Type** (str) - 【建议不再使用】磁盘类型。系统盘: Boot,数据盘: Data,网络盘:Udisk + + **UHostIPSet** + + - **Bandwidth** (int) - IP对应的带宽, 单位: Mb (内网IP不显示带宽信息) + - **Default** (str) - 是否默认的弹性网卡的信息。true: 是默认弹性网卡;其他值:不是。 + - **IP** (str) - IP地址 + - **IPId** (str) - IP资源ID (内网IP无对应的资源ID) + - **SubnetId** (str) - IP地址对应的子网 ID(北京一当前字段为空) + - **Type** (str) - 国际: Internation,BGP: Bgp,内网: Private + - **VPCId** (str) - IP地址对应的VPC ID(北京一当前字段为空) + + **UHostInstanceSet** + + - **AutoRenew** (str) - 是否自动续费,自动续费:“Yes”,不自动续费:“No” + - **BasicImageId** (str) - 基础镜像ID(指当前自定义镜像的来源镜像) + - **BasicImageName** (str) - 基础镜像名称(指当前自定义镜像的来源镜像) + - **BootDiskState** (str) - 系统盘状态 Normal表示初始化完成;Initializing表示在初始化。仍在初始化的系统盘无法制作镜像。 + - **CPU** (int) - 虚拟CPU核数,单位: 个 + - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); + - **CreateTime** (int) - 创建时间,格式为Unix时间戳 + - **DiskSet** (list) - 见 **UHostDiskSet** 模型定义 + - **ExpireTime** (int) - 到期时间,格式为Unix时间戳 + - **GPU** (int) - GPU个数 + - **HostType** (str) - 【建议不再使用】主机系列:N2,表示系列2;N1,表示系列1 + - **HotplugFeature** (bool) - true: 开启热升级; false,未开启热升级 + - **IPSet** (list) - 见 **UHostIPSet** 模型定义 + - **ImageId** (str) - 【建议不再使用】主机的系统盘ID。 + - **IsolationGroup** (str) - 隔离组id,不在隔离组则返回"" + - **LifeCycle** (str) - 主机的生命周期类型。目前仅支持Normal:普通; + - **MachineType** (str) - 云主机机型(新)。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type#主机概念20版本>`_ 。 + - **Memory** (int) - 内存大小,单位: MB + - **Name** (str) - UHost实例名称 + - **NetCapability** (str) - 网络增强。Normal: 无;Super: 网络增强1.0; Ultra: 网络增强2.0 + - **NetworkState** (str) - 【建议不再使用】网络状态。 连接:Connected, 断开:NotConnected + - **OsName** (str) - 创建主机的最初来源镜像的操作系统名称(若直接通过基础镜像创建,此处返回和BasicImageName一致) + - **OsType** (str) - 操作系统类别。返回"Linux"或者"Windows" + - **Remark** (str) - 备注 + - **State** (str) - 实例状态,枚举值:\\ >初始化: Initializing; \\ >启动中: Starting; \\> 运行中: Running; \\> 关机中: Stopping; \\ >关机: Stopped \\ >安装失败: Install Fail; \\ >重启中: Rebooting + - **StorageType** (str) - 【建议不再使用】主机磁盘类型。 枚举值为:\\ > LocalDisk,本地磁盘; \\ > UDisk 云盘。\\只要有一块磁盘为本地盘,即返回LocalDisk。 + - **SubnetType** (str) - 【建议不再使用】仅北京A的云主机会返回此字段。基础网络模式:Default;子网模式:Private + - **Tag** (str) - 业务组名称 + - **TimemachineFeature** (str) - 【建议不再使用】数据方舟模式。枚举值:\\ > Yes: 开启方舟; \\ > no,未开启方舟 + - **TotalDiskSpace** (int) - 总的数据盘存储空间。 + - **UHostId** (str) - UHost实例ID + - **UHostType** (str) - 【建议不再使用】云主机机型(旧)。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("DescribeUHostInstance", d, **kwargs) + return apis.DescribeUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def describe_uhost_tags(self, req=None, **kwargs): + """ DescribeUHostTags - 获取指定数据中心的业务组列表。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TagSet** (list) - 见 **UHostTagSet** 模型定义 + - **TotalCount** (int) - 已有主机的业务组总个数 + + **Response Model** + + **UHostTagSet** + + - **Tag** (str) - 业务组名称 + - **TotalCount** (int) - 该业务组中包含的主机个数 + - **Zone** (str) - 可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUHostTagsRequestSchema().dumps(d) + resp = self.invoke("DescribeUHostTags", d, **kwargs) + return apis.DescribeUHostTagsResponseSchema().loads(resp)
+ +
[docs] def get_uhost_instance_price(self, req=None, **kwargs): + """ GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CPU** (int) - (Required) CPU核数。可选参数:1-64。可选范围参照控制台。默认值: 4 + - **Count** (int) - (Required) 购买台数,范围[1,5] + - **ImageId** (str) - (Required) 镜像Id,可通过 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ 获取镜像ID + - **Memory** (int) - (Required) 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参照好控制台)。默认值:8192 + - **ChargeType** (str) - 计费模式。枚举值为: \\ > Year,按年付费; \\ > Month,按月付费;\\ > Dynamic,按小时付费 \\ 默认为月付。 + - **DiskSpace** (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10,默认值: 0 + - **Disks** (list) - 见 **GetUHostInstancePriceParamDisks** 模型定义 + - **GPU** (int) - GPU卡核心数。仅GPU机型支持此字段。 + - **GpuType** (str) - GPU类型,枚举值["K80", "P40", "V100"] + - **LifeCycle** (int) - 【未支持】1:普通云主机;2:抢占性云主机;默认普通 + - **MachineType** (str) - 云主机机型(V2版本概念)。枚举值["N", "C", "G", "O"]。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **NetCapability** (str) - 网络增强。枚举值:Normal,不开启; Super,开启网络增强1.0。 默认值为Normal。 + - **Quantity** (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末。 + - **StorageType** (str) - 【待废弃】磁盘类型,同时设定系统盘和数据盘, 枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘; 默认为LocalDisk 仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。 + - **TimemachineFeature** (str) - 【待废弃】方舟机型。No,Yes。默认是No。 + - **UHostType** (str) - 【待废弃】云主机机型(V1版本概念)。参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PriceSet** (list) - 见 **UHostPriceSet** 模型定义 + + **Request Model** + + **GetUHostInstancePriceParamDisks** + + - **BackupType** (str) - 磁盘备份方案。枚举值:\\ > NONE,无备份 \\ > DATAARK,数据方舟 \\ 当前磁盘支持的备份模式参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ + - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 + - **Size** (int) - 磁盘大小,单位GB。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **Type** (str) - 磁盘类型。请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + + **Response Model** + + **UHostPriceSet** + + - **ChargeType** (str) - 计费类型。Year,Month,Dynamic + - **Price** (float) - 价格,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUHostInstancePriceRequestSchema().dumps(d) + resp = self.invoke("GetUHostInstancePrice", d, **kwargs) + return apis.GetUHostInstancePriceResponseSchema().loads(resp)
+ +
[docs] def get_uhost_instance_vnc_info(self, req=None, **kwargs): + """ GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + - **VncIP** (str) - Vnc登录IP + - **VncPassword** (str) - Vnc 登录密码 + - **VncPort** (int) - Vnc登录端口 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUHostInstanceVncInfoRequestSchema().dumps(d) + resp = self.invoke("GetUHostInstanceVncInfo", d, **kwargs) + return apis.GetUHostInstanceVncInfoResponseSchema().loads(resp)
+ +
[docs] def get_uhost_upgrade_price(self, req=None, **kwargs): + """ GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID。 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ 。 + - **BootDiskSpace** (int) - 【待废弃】系统大小,单位: GB,范围[20,100],步长: 10。 + - **CPU** (int) - 虚拟CPU核数。可选参数:1-64(可选范围参考控制台)。默认值为当前实例的CPU核数。 + - **DiskSpace** (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10, 默认值是该主机当前数据盘大小。 + - **HostType** (str) - 【待废弃】主机系列,目前支持N1,N2 + - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值为当前实例的内存大小。 + - **NetCapValue** (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变) + - **TimemachineFeature** (str) - 方舟机型。No,Yes。默认是No。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Price** (float) - 规格调整差价。精确到小数点后2位。 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUHostUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("GetUHostUpgradePrice", d, **kwargs) + return apis.GetUHostUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def import_custom_image(self, req=None, **kwargs): + """ ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Auth** (bool) - (Required) 是否授权。必须填true + - **Format** (str) - (Required) 镜像格式,可选RAW、VHD、VMDK、qcow2 + - **ImageName** (str) - (Required) 镜像名称 + - **OsName** (str) - (Required) 操作系统详细版本,请参考控制台的镜像版本;OsType为Other时,输入参数为Other + - **OsType** (str) - (Required) 操作系统平台,比如CentOS、Ubuntu、Windows、RedHat等,请参考控制台的镜像版本;若导入控制台上没有的操作系统,参数为Other + - **UFileUrl** (str) - (Required) UFile私有空间地址 + - **ImageDescription** (str) - 镜像描述 + + **Response** + + - **ImageId** (str) - 镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ImportCustomImageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("ImportCustomImage", d, **kwargs) + return apis.ImportCustomImageResponseSchema().loads(resp)
+ +
[docs] def modify_uhost_instance_name(self, req=None, **kwargs): + """ ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Name** (str) - UHost实例名称 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUHostInstanceNameRequestSchema().dumps(d) + resp = self.invoke("ModifyUHostInstanceName", d, **kwargs) + return apis.ModifyUHostInstanceNameResponseSchema().loads(resp)
+ +
[docs] def modify_uhost_instance_remark(self, req=None, **kwargs): + """ ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Remark** (str) - 备注 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUHostInstanceRemarkRequestSchema().dumps(d) + resp = self.invoke("ModifyUHostInstanceRemark", d, **kwargs) + return apis.ModifyUHostInstanceRemarkResponseSchema().loads(resp)
+ +
[docs] def modify_uhost_instance_tag(self, req=None, **kwargs): + """ ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Tag** (str) - 业务组名称 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUHostInstanceTagRequestSchema().dumps(d) + resp = self.invoke("ModifyUHostInstanceTag", d, **kwargs) + return apis.ModifyUHostInstanceTagResponseSchema().loads(resp)
+ +
[docs] def poweroff_uhost_instance(self, req=None, **kwargs): + """ PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PoweroffUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("PoweroffUHostInstance", d, **kwargs) + return apis.PoweroffUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def reboot_uhost_instance(self, req=None, **kwargs): + """ RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **DiskPassword** (str) - 加密盘密码 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RebootUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("RebootUHostInstance", d, **kwargs) + return apis.RebootUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def reinstall_uhost_instance(self, req=None, **kwargs): + """ ReinstallUHostInstance - 重新安装指定UHost实例的操作系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例资源ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **BootDiskSpace** (int) - 系统盘大小。 单位:GB, 范围[20,100], 步长:10 + - **DNSServers** (list) - 针对非私有子网主机,可自定义DNS。n可为0-2 + - **ImageId** (str) - 镜像Id,默认使用原镜像 参见 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ + - **Password** (str) - 如果创建UHost实例时LoginMode为Password,则必须填写,如果LoginMode为KeyPair,不需要填写 (密码格式使用BASE64编码;LoginMode不可变更) + - **ReserveDisk** (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes;如果是从Windows重装为Linux或反之,则无法保留数据盘 + - **ResourceType** (int) - 云灾备指明191 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReinstallUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("ReinstallUHostInstance", d, **kwargs) + return apis.ReinstallUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def reset_uhost_instance_password(self, req=None, **kwargs): + """ ResetUHostInstancePassword - 重置UHost实例的管理员密码。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Password** (str) - (Required) UHost新密码(密码格式使用BASE64编码) + - **UHostId** (str) - (Required) UHost实例ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResetUHostInstancePasswordRequestSchema().dumps(d) + resp = self.invoke("ResetUHostInstancePassword", d, **kwargs) + return apis.ResetUHostInstancePasswordResponseSchema().loads(resp)
+ +
[docs] def resize_attached_disk(self, req=None, **kwargs): + """ ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DiskId** (str) - (Required) 磁盘ID。参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ 返回值中的DiskSet。 + - **DiskSpace** (int) - (Required) 磁盘大小,单位GB,步长为10。取值范围需大于当前磁盘大小,最大值请参考 `磁盘类型 <https://docs.ucloud.cn/api/uhost-api/disk_type>`_ 。 + - **UHostId** (str) - (Required) UHost实例ID。 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ 。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DiskId** (str) - 改配成功的磁盘id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeAttachedDiskRequestSchema().dumps(d) + resp = self.invoke("ResizeAttachedDisk", d, **kwargs) + return apis.ResizeAttachedDiskResponseSchema().loads(resp)
+ +
[docs] def resize_uhost_instance(self, req=None, **kwargs): + """ ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,网络增强等。可选配置范围请参考 `云主机机型说明 <https://docs.ucloud.cn/api/uhost-api/uhost_type>`_ 。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **BootDiskSpace** (int) - 【待废弃】系统盘大小,单位:GB,范围[20,100],步长:10,系统盘不支持缩容,因此不允许输入比当前实例系统盘小的值 + - **CPU** (int) - 虚拟CPU核数。可选参数:1-32(可选范围与UHostType相关)。默认值为当前实例的CPU核数 + - **DiskSpace** (int) - 【待废弃】数据盘大小,单位:GB,范围[10,1000]; SSD机型,单位:GB,范围[100,500];步长:10,默认值为当前实例的数据盘大小,数据盘不支持缩容,因此不允许输入比当前实例数据盘大小的值 + - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围与UHostType相关)。默认值为当前实例的内存大小。 + - **NetCapValue** (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("ResizeUHostInstance", d, **kwargs) + return apis.ResizeUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def start_uhost_instance(self, req=None, **kwargs): + """ StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **DiskPassword** (str) - 加密盘密码 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StartUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("StartUHostInstance", d, **kwargs) + return apis.StartUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def stop_uhost_instance(self, req=None, **kwargs): + """ StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **UhostId** (str) - UHost实例ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StopUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("StopUHostInstance", d, **kwargs) + return apis.StopUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def terminate_custom_image(self, req=None, **kwargs): + """ TerminateCustomImage - 删除用户自定义镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - (Required) 自制镜像ID 参见 `DescribeImage <https://docs.ucloud.cn/api/uhost-api/describe_image.html>`_ + + **Response** + + - **ImageId** (str) - 自制镜像Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.TerminateCustomImageRequestSchema().dumps(d) + resp = self.invoke("TerminateCustomImage", d, **kwargs) + return apis.TerminateCustomImageResponseSchema().loads(resp)
+ +
[docs] def terminate_uhost_instance(self, req=None, **kwargs): + """ TerminateUHostInstance - 删除指定数据中心的UHost实例。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostId** (str) - (Required) UHost资源Id 参见 `DescribeUHostInstance <https://docs.ucloud.cn/api/uhost-api/describe_uhost_instance.html>`_ + - **Destroy** (int) - 是否直接删除,0表示按照原来的逻辑(有回收站权限,则进入回收站),1表示直接删除 + - **ReleaseEIP** (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。 + - **ReleaseUDisk** (bool) - 是否删除挂载的数据盘。true删除,其他不删除。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **InRecycle** (str) - 放入回收站:"Yes", 彻底删除:“No” + - **UHostId** (str) - UHost 实例 Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.TerminateUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("TerminateUHostInstance", d, **kwargs) + return apis.TerminateUHostInstanceResponseSchema().loads(resp)
+ +
[docs] def upgrade_to_ark_uhost_instance(self, req=None, **kwargs): + """ UpgradeToArkUHostInstance - 普通升级为方舟机型 + + **Request** + + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **UHostIds** (list) - (Required) UHost主机的资源ID,例如UHostIds.0代表希望升级的主机1,UHostIds.1代表主机2。 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **CouponId** (str) - 代金券ID 请参考DescribeCoupon接口 + + **Response** + + - **UHostSet** (list) - UHost主机的资源ID数组 + + """ + d = {"Region": self.config.region} + req and d.update(req) + d = apis.UpgradeToArkUHostInstanceRequestSchema().dumps(d) + resp = self.invoke("UpgradeToArkUHostInstance", d, **kwargs) + return apis.UpgradeToArkUHostInstanceResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/uhub/client.html b/docs/build/html/_modules/ucloud/services/uhub/client.html new file mode 100644 index 0000000..9290afe --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/uhub/client.html @@ -0,0 +1,289 @@ + + + + + + + + ucloud.services.uhub.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uhub.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uhub.schemas import apis
+
+
+
[docs]class UHubClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UHubClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_repo(self, req=None, **kwargs): + """ CreateRepo - 创建镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 仓库名称,不可修改 + - **Description** (str) - 仓库备注 + - **IsShared** (bool) - 镜像仓库是否公开,公开为true、不公开为false;默认为false + + **Response** + + - **Message** (str) - 有错误时返回内容 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.CreateRepoRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateRepo", d, **kwargs) + return apis.CreateRepoResponseSchema().loads(resp)
+ +
[docs] def delete_repo(self, req=None, **kwargs): + """ DeleteRepo - 删除镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 镜像仓库名称 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteRepoRequestSchema().dumps(d) + resp = self.invoke("DeleteRepo", d, **kwargs) + return apis.DeleteRepoResponseSchema().loads(resp)
+ +
[docs] def delete_repo_image(self, req=None, **kwargs): + """ DeleteRepoImage - 删除镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ImageName** (str) - (Required) 镜像名称 + - **RepoName** (str) - (Required) 镜像仓库名称 + - **TagName** (str) - 不指定tag则删除全部tag + + **Response** + + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteRepoImageRequestSchema().dumps(d) + resp = self.invoke("DeleteRepoImage", d, **kwargs) + return apis.DeleteRepoImageResponseSchema().loads(resp)
+ +
[docs] def get_image_tag(self, req=None, **kwargs): + """ GetImageTag - 获取镜像tag + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **ImageName** (str) - (Required) 镜像名称 + - **RepoName** (str) - (Required) 镜像仓库名称 + - **Limit** (int) - 每次获取数量,默认为20 + - **Offset** (int) - 偏移量,默认0 + - **TagName** (str) - 默认不写,如果填写,代表查询该tag,否则查全部tag + + **Response** + + - **TagSet** (list) - 见 **TagSet** 模型定义 + - **TotalCount** (int) - tag总数 + + **Response Model** + + **TagSet** + + - **TagName** (str) - Tag名称 + - **UpdateTime** (str) - 镜像更新时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetImageTagRequestSchema().dumps(d) + resp = self.invoke("GetImageTag", d, **kwargs) + return apis.GetImageTagResponseSchema().loads(resp)
+ +
[docs] def get_repo(self, req=None, **kwargs): + """ GetRepo - 获取镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Limit** (int) - 数量,默认20 + - **Offset** (int) - 偏移量,默认0 + - **Type** (str) - private私有仓库,public公共仓库,默认public + + **Response** + + - **RepoSet** (list) - 见 **RepoSet** 模型定义 + - **TotalCount** (int) - 总的仓库数量 + + **Response Model** + + **RepoSet** + + - **CreateTime** (str) - 仓库创建时间 + - **Description** (str) - 镜像仓库描述 + - **IsOutSide** (str) - 镜像仓库是否外网可以访问,可以为ture,不可以为false + - **IsShared** (str) - 镜像仓库类型,false为私有;true为公有 + - **RepoName** (str) - 镜像仓库名称 + - **UpdateTime** (str) - 仓库更新时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetRepoRequestSchema().dumps(d) + resp = self.invoke("GetRepo", d, **kwargs) + return apis.GetRepoResponseSchema().loads(resp)
+ +
[docs] def get_repo_image(self, req=None, **kwargs): + """ GetRepoImage - 获取镜像仓库下的镜像 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 镜像仓库名称 + - **Limit** (int) - 显示数量,默认为20 + - **Offset** (int) - 偏移量,默认0 + + **Response** + + - **ImageSet** (list) - 见 **ImageSet** 模型定义 + - **TotalCount** (int) - + + **Response Model** + + **ImageSet** + + - **CreateTime** (str) - 创建时间 + - **ImageName** (str) - 镜像名称 + - **LatestTag** (str) - 最新push的Tag + - **PullCount** (int) - 镜像被下载次数 + - **RepoName** (str) - 镜像仓库名称 + - **UpdateTime** (str) - 修改时间 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.GetRepoImageRequestSchema().dumps(d) + resp = self.invoke("GetRepoImage", d, **kwargs) + return apis.GetRepoImageResponseSchema().loads(resp)
+ +
[docs] def update_repo(self, req=None, **kwargs): + """ UpdateRepo - 更新镜像仓库 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **RepoName** (str) - (Required) 镜像仓库名称,不可修改 + - **Description** (str) - 备注 + - **IsShared** (str) - false设置为私有;true设置为公有。默认false + + **Response** + + - **Message** (str) - 错误的时候返回 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.UpdateRepoRequestSchema().dumps(d) + resp = self.invoke("UpdateRepo", d, **kwargs) + return apis.UpdateRepoResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/ulb/client.html b/docs/build/html/_modules/ucloud/services/ulb/client.html new file mode 100644 index 0000000..2c1947b --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/ulb/client.html @@ -0,0 +1,756 @@ + + + + + + + + ucloud.services.ulb.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.ulb.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.ulb.schemas import apis
+
+
+
[docs]class ULBClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(ULBClient, self).__init__(config, transport, middleware, logger) + +
[docs] def allocate_backend(self, req=None, **kwargs): + """ AllocateBackend - 添加ULB后端资源实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ResourceId** (str) - (Required) 所添加的后端资源的资源ID + - **ResourceType** (str) - (Required) 所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost” + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **VServerId** (str) - (Required) VServer实例的ID + - **Enabled** (int) - 后端实例状态开关,枚举值: 1:启用; 0:禁用 默认为启用 + - **Port** (int) - 所添加的后端资源服务端口,取值范围[1-65535],默认80 + - **Weight** (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 + + **Response** + + - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关),可用于 UpdateBackendAttribute/UpdateBackendAttributeBatch/ReleaseBackend + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateBackendRequestSchema().dumps(d) + resp = self.invoke("AllocateBackend", d, **kwargs) + return apis.AllocateBackendResponseSchema().loads(resp)
+ +
[docs] def allocate_backend_batch(self, req=None, **kwargs): + """ AllocateBackendBatch - 批量添加VServer后端节点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Backends** (list) - (Required) 用| 分割字段,格式:ResourceId| ResourceType| Port| Enabled|IP| Weight。ResourceId:所添加的后端资源的资源ID;ResourceType:所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”;Port:所添加的后端资源服务端口,取值范围[1-65535];Enabled:后端实例状态开关,枚举值: 1:启用; 0:禁用;IP:后端资源内网ip;Weight:所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **VServerId** (str) - (Required) VServer实例的ID + - **ApiVersion** (int) - + + **Response** + + - **BackendSet** (list) - 见 **BackendSet** 模型定义 + + **Response Model** + + **BackendSet** + + - **BackendId** (str) - rs的资源ID + - **ResourceId** (str) - rs对应的UHost ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateBackendBatchRequestSchema().dumps(d) + resp = self.invoke("AllocateBackendBatch", d, **kwargs) + return apis.AllocateBackendBatchResponseSchema().loads(resp)
+ +
[docs] def bind_ssl(self, req=None, **kwargs): + """ BindSSL - 将SSL证书绑定到VServer + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLId** (str) - (Required) SSL证书的Id + - **ULBId** (str) - (Required) 所绑定ULB实例ID + - **VServerId** (str) - (Required) 所绑定VServer实例ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BindSSLRequestSchema().dumps(d) + resp = self.invoke("BindSSL", d, **kwargs) + return apis.BindSSLResponseSchema().loads(resp)
+ +
[docs] def create_policy(self, req=None, **kwargs): + """ CreatePolicy - 创建VServer内容转发策略 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId + - **Match** (str) - (Required) 内容转发匹配字段 + - **ULBId** (str) - (Required) 需要添加内容转发策略的负载均衡实例ID + - **VServerId** (str) - (Required) 需要添加内容转发策略的VServer实例ID + - **Type** (str) - 内容转发匹配字段的类型 + + **Response** + + - **PolicyId** (str) - 内容转发策略ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreatePolicyRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreatePolicy", d, **kwargs) + return apis.CreatePolicyResponseSchema().loads(resp)
+ +
[docs] def create_ssl(self, req=None, **kwargs): + """ CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLName** (str) - (Required) SSL证书的名字,默认值为空 + - **CaCert** (str) - CA证书 + - **PrivateKey** (str) - 加密证书的私钥 + - **SSLContent** (str) - SSL证书的完整内容,包括用户证书、加密证书的私钥、CA证书 + - **SSLType** (str) - 所添加的SSL证书类型,目前只支持Pem格式 + - **UserCert** (str) - 用户的证书 + + **Response** + + - **SSLId** (str) - SSL证书的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateSSLRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateSSL", d, **kwargs) + return apis.CreateSSLResponseSchema().loads(resp)
+ +
[docs] def create_ulb(self, req=None, **kwargs): + """ CreateULB - 创建负载均衡实例,可以选择内网或者外网 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - ULB 所属的业务组ID,如果不传则使用默认的业务组 + - **ChargeType** (str) - 付费方式 + - **IPVersion** (str) - ULB ip类型,枚举值:IPv6 / IPv4 (内部测试,暂未对外开放) + - **InnerMode** (str) - 创建的ULB是否为内网模式 + - **ListenType** (str) - ULB 监听器类型,枚举值:RequestProxy / PacketsTransmit (内部测试,暂未对外开放) + - **OuterMode** (str) - 创建的ULB是否为外网模式,默认即为外网模式 + - **PrivateIp** (str) - 创建内网ULB时指定内网IP。若不传值,则随机分配当前子网下的IP(暂时不对外开放,创建外网ULB该字段会忽略) + - **Remark** (str) - 备注 + - **SubnetId** (str) - 内网ULB 所属的子网ID,如果不传则使用默认的子网 + - **Tag** (str) - 业务组 + - **ULBName** (str) - 负载均衡的名字,默认值为“ULB” + - **VPCId** (str) - ULB所在的VPC的ID, 如果不传则使用默认的VPC + + **Response** + + - **ULBId** (str) - 负载均衡实例的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateULBRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateULB", d, **kwargs) + return apis.CreateULBResponseSchema().loads(resp)
+ +
[docs] def create_vserver(self, req=None, **kwargs): + """ CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例ID + - **ClientTimeout** (int) - ListenType为RequestProxy时表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;ListenType为PacketsTransmit时表示连接保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持 + - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 + - **FrontendPort** (int) - VServer后端端口,取值范围[1-65535];默认值为80 + - **ListenType** (str) - 监听器类型,枚举值为:RequestProxy -> 请求代理;PacketsTransmit -> 报文转发;默认为"RequestProxy" + - **Method** (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:"Roundrobin" + - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; + - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 + - **PersistenceInfo** (str) - 根据PersistenceType确认; None和ServerInsert: 此字段无意义; UserDefined:此字段传入自定义会话保持String + - **PersistenceType** (str) - VServer会话保持方式,默认关闭会话保持。枚举值:None -> 关闭;ServerInsert -> 自动生成KEY;UserDefined -> 用户自定义KEY。 + - **Protocol** (str) - VServer实例的协议,请求代理模式下有 HTTP、HTTPS、TCP,报文转发下有 TCP,UDP。默认为“HTTP" + - **VServerName** (str) - VServer实例名称,默认为"VServer" + + **Response** + + - **VServerId** (str) - VServer实例的Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateVServerRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateVServer", d, **kwargs) + return apis.CreateVServerResponseSchema().loads(resp)
+ +
[docs] def delete_policy(self, req=None, **kwargs): + """ DeletePolicy - 删除内容转发策略 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PolicyId** (str) - (Required) 内容转发策略ID + - **GroupId** (str) - 内容转发策略组ID + - **VServerId** (str) - VServer 资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeletePolicyRequestSchema().dumps(d) + resp = self.invoke("DeletePolicy", d, **kwargs) + return apis.DeletePolicyResponseSchema().loads(resp)
+ +
[docs] def delete_ssl(self, req=None, **kwargs): + """ DeleteSSL - 删除SSL证书 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLId** (str) - (Required) SSL证书的ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteSSLRequestSchema().dumps(d) + resp = self.invoke("DeleteSSL", d, **kwargs) + return apis.DeleteSSLResponseSchema().loads(resp)
+ +
[docs] def delete_ulb(self, req=None, **kwargs): + """ DeleteULB - 删除负载均衡实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **ReleaseEip** (bool) - 删除ulb时是否释放绑定的EIP,false标识只解绑EIP,true表示会释放绑定的EIP,默认是false + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteULBRequestSchema().dumps(d) + resp = self.invoke("DeleteULB", d, **kwargs) + return apis.DeleteULBResponseSchema().loads(resp)
+ +
[docs] def delete_vserver(self, req=None, **kwargs): + """ DeleteVServer - 删除VServer实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例的ID + - **VServerId** (str) - (Required) VServer实例的ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteVServerRequestSchema().dumps(d) + resp = self.invoke("DeleteVServer", d, **kwargs) + return apis.DeleteVServerResponseSchema().loads(resp)
+ +
[docs] def describe_ssl(self, req=None, **kwargs): + """ DescribeSSL - 获取SSL证书信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 数据分页值,默认为20 + - **Offset** (int) - 数据偏移量,默认值为0 + - **SSLId** (str) - SSL证书的Id + + **Response** + + - **DataSet** (list) - 见 **ULBSSLSet** 模型定义 + - **TotalCount** (int) - 满足条件的SSL证书总数 + + **Response Model** + + **ULBSSLSet** + + - **HashValue** (str) - + - **SSLId** (str) - SSL证书的Id + - **SSLName** (str) - SSL证书的名字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeSSLRequestSchema().dumps(d) + resp = self.invoke("DescribeSSL", d, **kwargs) + return apis.DescribeSSLResponseSchema().loads(resp)
+ +
[docs] def describe_ulb(self, req=None, **kwargs): + """ DescribeULB - 获取ULB详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - ULB所属的业务组ID + - **Limit** (int) - 数据分页值,默认为20 + - **Offset** (int) - 数据偏移量,默认为0 + - **SubnetId** (str) - ULB所属的子网ID + - **ULBId** (str) - 负载均衡实例的Id。 若指定则返回指定的负载均衡实例的信息; 若不指定则返回当前数据中心中所有的负载均衡实例的信息 + - **VPCId** (str) - ULB所属的VPC + + **Response** + + - **DataSet** (list) - 见 **ULBSet** 模型定义 + - **TotalCount** (int) - 满足条件的ULB总数 + + **Response Model** + + **PolicyBackendSet** + + - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关 + - **ObjectId** (str) - 后端资源的对象ID + - **Port** (int) - 所添加的后端资源服务端口 + - **PrivateIP** (str) - 后端资源的内网IP + - **ResourceName** (str) - 后端资源的实例名称 + + **ULBPolicySet** + + - **BackendSet** (list) - 见 **PolicyBackendSet** 模型定义 + - **Match** (str) - 内容转发匹配字段;默认内容转发类型下为空。 + - **PolicyId** (str) - 内容转发Id,默认内容转发类型下为空。 + - **PolicyPriority** (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。 + - **PolicyType** (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发 + - **TotalCount** (int) - 默认内容转发类型下返回当前rs总数 + - **Type** (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空 + - **VServerId** (str) - 所属VServerId + + **ULBBackendSet** + + - **BackendId** (str) - 后端资源实例的Id + - **Enabled** (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用 + - **Port** (int) - 后端提供服务的端口 + - **PrivateIP** (str) - 后端提供服务的内网IP + - **ResourceId** (str) - 资源实例的资源Id + - **ResourceName** (str) - 资源实例的资源名称 + - **ResourceType** (str) - 资源实例的类型 + - **Status** (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常 + - **SubResourceId** (str) - 资源绑定的虚拟网卡实例的资源Id + - **SubResourceName** (str) - 资源绑定的虚拟网卡实例的资源名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡实例的类型 + - **SubnetId** (str) - 后端提供服务的资源所在的子网的ID + - **Weight** (int) - + + **ULBSSLSet** + + - **HashValue** (str) - + - **SSLId** (str) - SSL证书的Id + - **SSLName** (str) - SSL证书的名字 + + **ULBVServerSet** + + - **BackendSet** (list) - 见 **ULBBackendSet** 模型定义 + - **ClientTimeout** (int) - 空闲连接的回收时间,单位:秒。 + - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 + - **FrontendPort** (int) - VServer服务端口 + - **ListenType** (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发 + - **Method** (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。 + - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; + - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 + - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。 + - **PersistenceType** (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。 + - **PolicySet** (list) - 见 **ULBPolicySet** 模型定义 + - **Protocol** (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。 + - **SSLSet** (list) - 见 **ULBSSLSet** 模型定义 + - **Status** (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。 + - **VServerId** (str) - VServer实例的Id + - **VServerName** (str) - VServer实例的名字 + + **ULBIPSet** + + - **Bandwidth** (int) - 弹性IP的带宽值(暂未对外开放) + - **BandwidthType** (int) - 弹性IP的带宽类型,枚举值:1 表示是共享带宽,0 普通带宽类型(暂未对外开放) + - **EIP** (str) - 弹性IP地址 + - **EIPId** (str) - 弹性IP的ID + - **OperatorName** (str) - 弹性IP的运营商信息,枚举值为: Bgp:BGP IP International:国际IP + + **ULBSet** + + - **Bandwidth** (int) - 带宽 + - **BandwidthType** (int) - 带宽类型,枚举值为: 0,非共享带宽; 1,共享带宽 + - **BusinessId** (str) - ULB 所属的业务组ID + - **CreateTime** (int) - ULB的创建时间,格式为Unix Timestamp + - **ExpireTime** (int) - ULB的到期时间,格式为Unix Timestamp + - **IPSet** (list) - 见 **ULBIPSet** 模型定义 + - **Name** (str) - 负载均衡的资源名称(资源系统中),缺省值“ULB” + - **PrivateIP** (str) - ULB的内网IP,当ULBType为OuterMode时,该值为空 + - **Remark** (str) - 负载均衡的备注,缺省值“” + - **Resource** (list) - ULB的详细信息列表(废弃) + - **SubnetId** (str) - ULB 为 InnerMode 时,ULB 所属的子网ID,默认为空 + - **Tag** (str) - 负载均衡的业务组名称,缺省值“Default” + - **ULBId** (str) - 负载均衡的资源ID + - **ULBName** (str) - 负载均衡的资源名称(内部记载,废弃) + - **ULBType** (str) - ULB 的类型 + - **VPCId** (str) - ULB所在的VPC的ID + - **VServerSet** (list) - 见 **ULBVServerSet** 模型定义 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeULBRequestSchema().dumps(d) + resp = self.invoke("DescribeULB", d, **kwargs) + return apis.DescribeULBResponseSchema().loads(resp)
+ +
[docs] def describe_vserver(self, req=None, **kwargs): + """ DescribeVServer - 获取ULB下的VServer的详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例的Id + - **Limit** (int) - 数据分页值 + - **Offset** (int) - 数据偏移量 + - **VServerId** (str) - VServer实例的Id;若指定则返回指定的VServer实例的信息; 若不指定则返回当前负载均衡实例下所有VServer的信息 + + **Response** + + - **DataSet** (list) - 见 **ULBVServerSet** 模型定义 + - **TotalCount** (int) - 满足条件的VServer总数 + + **Response Model** + + **PolicyBackendSet** + + - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关 + - **ObjectId** (str) - 后端资源的对象ID + - **Port** (int) - 所添加的后端资源服务端口 + - **PrivateIP** (str) - 后端资源的内网IP + - **ResourceName** (str) - 后端资源的实例名称 + + **ULBSSLSet** + + - **HashValue** (str) - + - **SSLId** (str) - SSL证书的Id + - **SSLName** (str) - SSL证书的名字 + + **ULBPolicySet** + + - **BackendSet** (list) - 见 **PolicyBackendSet** 模型定义 + - **Match** (str) - 内容转发匹配字段;默认内容转发类型下为空。 + - **PolicyId** (str) - 内容转发Id,默认内容转发类型下为空。 + - **PolicyPriority** (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。 + - **PolicyType** (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发 + - **TotalCount** (int) - 默认内容转发类型下返回当前rs总数 + - **Type** (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空 + - **VServerId** (str) - 所属VServerId + + **ULBBackendSet** + + - **BackendId** (str) - 后端资源实例的Id + - **Enabled** (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用 + - **Port** (int) - 后端提供服务的端口 + - **PrivateIP** (str) - 后端提供服务的内网IP + - **ResourceId** (str) - 资源实例的资源Id + - **ResourceName** (str) - 资源实例的资源名称 + - **ResourceType** (str) - 资源实例的类型 + - **Status** (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常 + - **SubResourceId** (str) - 资源绑定的虚拟网卡实例的资源Id + - **SubResourceName** (str) - 资源绑定的虚拟网卡实例的资源名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡实例的类型 + - **SubnetId** (str) - 后端提供服务的资源所在的子网的ID + - **Weight** (int) - + + **ULBVServerSet** + + - **BackendSet** (list) - 见 **ULBBackendSet** 模型定义 + - **ClientTimeout** (int) - 空闲连接的回收时间,单位:秒。 + - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 + - **FrontendPort** (int) - VServer服务端口 + - **ListenType** (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发 + - **Method** (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。 + - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; + - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 + - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。 + - **PersistenceType** (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。 + - **PolicySet** (list) - 见 **ULBPolicySet** 模型定义 + - **Protocol** (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。 + - **SSLSet** (list) - 见 **ULBSSLSet** 模型定义 + - **Status** (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。 + - **VServerId** (str) - VServer实例的Id + - **VServerName** (str) - VServer实例的名字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVServerRequestSchema().dumps(d) + resp = self.invoke("DescribeVServer", d, **kwargs) + return apis.DescribeVServerResponseSchema().loads(resp)
+ +
[docs] def release_backend(self, req=None, **kwargs): + """ ReleaseBackend - 从VServer释放后端资源实例 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID) + - **ULBId** (str) - (Required) 负载均衡实例的ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseBackendRequestSchema().dumps(d) + resp = self.invoke("ReleaseBackend", d, **kwargs) + return apis.ReleaseBackendResponseSchema().loads(resp)
+ +
[docs] def unbind_ssl(self, req=None, **kwargs): + """ UnbindSSL - 从VServer解绑SSL证书 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SSLId** (str) - (Required) SSL证书的Id + - **ULBId** (str) - (Required) 所绑定ULB实例ID + - **VServerId** (str) - (Required) 所绑定VServer实例ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UnbindSSLRequestSchema().dumps(d) + resp = self.invoke("UnbindSSL", d, **kwargs) + return apis.UnbindSSLResponseSchema().loads(resp)
+ +
[docs] def update_backend_attribute(self, req=None, **kwargs): + """ UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID) + - **ULBId** (str) - (Required) 负载均衡资源ID + - **Enabled** (int) - 后端实例状态开关 + - **Port** (int) - 后端资源服务端口,取值范围[1-65535] + - **Weight** (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateBackendAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateBackendAttribute", d, **kwargs) + return apis.UpdateBackendAttributeResponseSchema().loads(resp)
+ +
[docs] def update_policy(self, req=None, **kwargs): + """ UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackendId** (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId + - **Match** (str) - (Required) 内容转发匹配字段 + - **PolicyId** (str) - (Required) 转发规则的ID + - **ULBId** (str) - (Required) 需要添加内容转发策略的负载均衡实例ID + - **VServerId** (str) - (Required) 需要添加内容转发策略的VServer实例ID + - **Type** (str) - 内容转发匹配字段的类型 + + **Response** + + - **PolicyId** (str) - 转发规则的ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdatePolicyRequestSchema().dumps(d) + resp = self.invoke("UpdatePolicy", d, **kwargs) + return apis.UpdatePolicyResponseSchema().loads(resp)
+ +
[docs] def update_ulb_attribute(self, req=None, **kwargs): + """ UpdateULBAttribute - 更新ULB名字业务组备注等属性字段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) ULB资源ID + - **Name** (str) - 名字 + - **Remark** (str) - 备注 + - **Tag** (str) - 业务 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateULBAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateULBAttribute", d, **kwargs) + return apis.UpdateULBAttributeResponseSchema().loads(resp)
+ +
[docs] def update_vserver_attribute(self, req=None, **kwargs): + """ UpdateVServerAttribute - 更新VServer实例属性 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ULBId** (str) - (Required) 负载均衡实例ID + - **VServerId** (str) - (Required) VServer实例ID + - **ClientTimeout** (int) - 请求代理的VServer下表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;报文转发的VServer下表示回话保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持 + - **Domain** (str) - MonitorType 为 Path 时指定健康检查发送请求时HTTP HEADER 里的域名 + - **Method** (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:"Roundrobin" + - **MonitorType** (str) - 健康检查的类型,Port:端口,Path:路径 + - **Path** (str) - MonitorType 为 Path 时指定健康检查发送请求时的路径,默认为 / + - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert, 此字段无意义; UserDefined, 则此字段传入用户自定义会话保持String. 若无此字段则不做修改 + - **PersistenceType** (str) - VServer会话保持模式,若无此字段则不做修改。枚举值:None:关闭;ServerInsert:自动生成KEY;UserDefined:用户自定义KEY。 + - **Protocol** (str) - VServer协议类型,请求代理只支持修改为 HTTP/HTTPS,报文转发VServer只支持修改为 TCP/UDP + - **VServerName** (str) - VServer实例名称,若无此字段则不做修改 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateVServerAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateVServerAttribute", d, **kwargs) + return apis.UpdateVServerAttributeResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/umem/client.html b/docs/build/html/_modules/ucloud/services/umem/client.html new file mode 100644 index 0000000..cb1ad25 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/umem/client.html @@ -0,0 +1,831 @@ + + + + + + + + ucloud.services.umem.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.umem.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.umem.schemas import apis
+
+
+
[docs]class UMemClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UMemClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_umem_space(self, req=None, **kwargs): + """ CreateUMemSpace - 创建UMem内存空间 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 空间名称,长度(6<=size<=63) + - **Size** (int) - (Required) 内存大小, 单位:GB, 范围[1~1024] + - **ChargeType** (str) - Year , Month, Dynamic, Trial 默认: Month + - **CouponId** (str) - 使用的代金券id + - **Password** (str) - URedis密码。请遵照 `字段规范 <https://docs.ucloud.cn/api/uhost-api/specification>`_ 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。 + - **Protocol** (str) - 协议:memcache, redis (默认redis).注意:redis无single类型 + - **Quantity** (int) - 购买时长 默认: 1 + - **SubnetId** (str) - + - **Tag** (str) - + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + - **VPCId** (str) - + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **SpaceId** (str) - 创建内存空间ID列表 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUMemSpaceRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUMemSpace", d, **kwargs) + return apis.CreateUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def create_umem_cache_group(self, req=None, **kwargs): + """ CreateUMemcacheGroup - 创建单机Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 请求创建组的名称 范围[6-60] + - **ChargeType** (str) - 计费模式,Year , Month, Dynamic 默认: Month + - **ConfigId** (str) - 配置ID,目前仅支持默认配置id 默认配置id:"9a891891-c245-4b66-bce8-67e59430d67c" + - **CouponId** (str) - 代金券ID + - **Protocol** (str) - + - **Quantity** (int) - 购买时长,默认为1 + - **Size** (int) - 每个节点的内存大小,单位GB,默认1GB 目前仅支持1/2/4/8/16/32这几档 + - **SubnetId** (str) - + - **Tag** (str) - 业务组 默认:Default + - **VPCId** (str) - + - **Version** (str) - Memcache版本信息,默认为1.4.31 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **GroupId** (str) - 创建的组ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUMemcacheGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUMemcacheGroup", d, **kwargs) + return apis.CreateUMemcacheGroupResponseSchema().loads(resp)
+ +
[docs] def create_uredis_group(self, req=None, **kwargs): + """ CreateURedisGroup - 创建主备redis + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **HighAvailability** (str) - (Required) 是否开启高可用,enable或disable + - **Name** (str) - (Required) 请求创建组的名称 (范围[6-63],只能包含英文、数字以及符号-和_) + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **AutoBackup** (str) - 是否自动备份,enable或disable,默认disable + - **BackupId** (str) - 有此项代表从备份中创建,无代表正常创建 + - **BackupTime** (int) - 自动备份开始时间,范围[0-23],默认3点 + - **ChargeType** (str) - 计费模式,Year , Month, Dynamic 默认: Month + - **ConfigId** (str) - 配置ID,目前支持 3.0版本配置ID:"03f58ca9-b64d-4bdd-abc7-c6b9a46fd801",3.2版本配置ID:"3e45ac48-f8a2-a9q2-261d-l342dab130gf", 4.0版本配置ID:"6c9298a3-9d7f-428c-b1d0-e87ab3b8a1ea",默认版本3.0,从备份创建为必传项 + - **CouponId** (str) - 代金券ID + - **MasterGroupId** (str) - Master Redis Group的ID,创建只读Slave时,必须填写 + - **Password** (str) - 初始化密码,需要 base64 编码 + - **Quantity** (int) - 购买时长,默认为1 + - **Size** (int) - 每个节点的内存大小,单位GB,默认1GB,目前仅支持1/2/4/8/16/32,六种 + - **SlaveZone** (str) - 跨机房URedis,slave所在可用区(必须和Zone在同一Region,且不可相同) + - **SubnetId** (str) - + - **Tag** (str) - 业务组名称 + - **VPCId** (str) - + - **Version** (str) - Redis版本信息(详见DescribeURedisVersion返回结果),默认版本3.0 + + **Response** + + - **GroupId** (str) - 创建的组ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateURedisGroupRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateURedisGroup", d, **kwargs) + return apis.CreateURedisGroupResponseSchema().loads(resp)
+ +
[docs] def delete_umem_space(self, req=None, **kwargs): + """ DeleteUMemSpace - 删除UMem内存空间 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SpaceId** (str) - (Required) UMem内存空间ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUMemSpaceRequestSchema().dumps(d) + resp = self.invoke("DeleteUMemSpace", d, **kwargs) + return apis.DeleteUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def delete_umem_cache_group(self, req=None, **kwargs): + """ DeleteUMemcacheGroup - 删除单机Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUMemcacheGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteUMemcacheGroup", d, **kwargs) + return apis.DeleteUMemcacheGroupResponseSchema().loads(resp)
+ +
[docs] def delete_uredis_group(self, req=None, **kwargs): + """ DeleteURedisGroup - 删除主备redis + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteURedisGroupRequestSchema().dumps(d) + resp = self.invoke("DeleteURedisGroup", d, **kwargs) + return apis.DeleteURedisGroupResponseSchema().loads(resp)
+ +
[docs] def describe_umem_price(self, req=None, **kwargs): + """ DescribeUMemPrice - 获取UMem实例价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买umem大小,单位:GB,范围[1~1024] + - **Type** (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - Year, Month, Dynamic,Trial 如果不指定,则一次性获取三种计费 + - **Quantity** (int) - 购买UMem的时长,默认值为1 + - **RegionFlag** (bool) - + + **Response** + + - **DataSet** (list) - 见 **UMemPriceSet** 模型定义 + + **Response Model** + + **UMemPriceSet** + + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **OriginalPrice** (int) - 原价 + - **Price** (int) - 现价,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemPriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemPrice", d, **kwargs) + return apis.DescribeUMemPriceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_space(self, req=None, **kwargs): + """ DescribeUMemSpace - 获取UMem内存空间列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + - **SpaceId** (str) - 内存空间ID (无ID,则获取所有) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UMemSpaceSet** 模型定义 + - **TotalCount** (int) - 根据过滤条件得到的总数 + + **Response Model** + + **UMemSpaceAddressSet** + + - **IP** (str) - UMem实例访问IP + - **Port** (int) - UMem实例访问Port + + **UMemSpaceSet** + + - **Address** (list) - 见 **UMemSpaceAddressSet** 模型定义 + - **ChargeType** (str) - Year, Month, Dynamic, Trial + - **CreateTime** (int) - 创建时间 + - **ExpireTime** (int) - 到期时间 + - **Name** (str) - 内存空间名称 + - **Protocol** (str) - 协议类型: memcache, redis + - **RewriteTime** (int) - 运维时间0 //0点1 //1点依次类推 + - **Size** (int) - 容量单位GB + - **SpaceId** (str) - 内存空间ID + - **State** (str) - Starting:创建中 Running:运行中 Fail:失败 + - **SubnetId** (str) - + - **Tag** (str) - + - **Type** (str) - 空间类型:single(无热备),double(热备) + - **UsedSize** (int) - 使用量单位MB + - **VPCId** (str) - + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemSpaceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemSpace", d, **kwargs) + return apis.DescribeUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_upgrade_price(self, req=None, **kwargs): + """ DescribeUMemUpgradePrice - 获取UMem升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 购买UMem大小,单位:GB + - **SpaceId** (str) - (Required) 需要升级的空间的SpaceId + - **Type** (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 + - **Price** (int) - 价格(兼容老版本) + + **Response Model** + + **PriceDataSet** + + - **CustomPrice** (int) - 用户折后价 + - **PurchaseValue** (int) - 资源有效期 + - **TotalPrice** (int) - 升降级资源的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemUpgradePrice", d, **kwargs) + return apis.DescribeUMemUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_cache_group(self, req=None, **kwargs): + """ DescribeUMemcacheGroup - 显示Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit + - **Limit** (int) - 分页显示的条目数, 默认值为20 + - **Offset** (int) - 分页显示的起始偏移, 默认值为0 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 见 **UMemcacheGroupSet** 模型定义 + - **TotalCount** (int) - 组的总的节点个数 + + **Response Model** + + **UMemcacheGroupSet** + + - **ChargeType** (str) - 计费类型:Year,Month,Dynamic 默认Dynamic + - **ConfigId** (str) - 节点的配置ID + - **CreateTime** (int) - 创建时间 (UNIX时间戳) + - **ExpireTime** (int) - 过期时间 (UNIX时间戳) + - **GroupId** (str) - 组ID + - **ModifyTime** (int) - 修改时间 (UNIX时间戳) + - **Name** (str) - 组名称 + - **Port** (int) - 节点分配的服务端口 + - **Size** (int) - 容量单位GB + - **State** (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败Restarting // 重启中 + - **SubnetId** (str) - + - **Tag** (str) - 业务组名称 + - **UsedSize** (int) - 使用量单位MB + - **VPCId** (str) - + - **Version** (str) - Memcache版本信息,默认为1.4.31 + - **VirtualIP** (str) - 节点的虚拟IP地址 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemcacheGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemcacheGroup", d, **kwargs) + return apis.DescribeUMemcacheGroupResponseSchema().loads(resp)
+ +
[docs] def describe_umem_cache_price(self, req=None, **kwargs): + """ DescribeUMemcachePrice - 获取umemcache组价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 容量大小,单位:GB 取值范围[1-32] + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - 计费模式,Year, Month, Dynamic,默认: Dynamic 默认: 获取所有计费模式的价格 + - **Quantity** (int) - 购买umemcache的时长,默认值为1 + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + + **Response** + + - **DataSet** (list) - 见 **UMemcachePriceSet** 模型定义 + + **Response Model** + + **UMemcachePriceSet** + + - **ChargeType** (str) - 计费模式,Year, Month, Dynamic + - **OriginalPrice** (int) - 原价 + - **Price** (int) - 总价格,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemcachePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemcachePrice", d, **kwargs) + return apis.DescribeUMemcachePriceResponseSchema().loads(resp)
+ +
[docs] def describe_umem_cache_upgrade_price(self, req=None, **kwargs): + """ DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 需要升级的空间的GroupId,请参考DescribeUMemcacheGroup接口 + - **Size** (int) - (Required) 购买umemcache大小,单位:GB + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 + - **Price** (int) - 价格,单位:元 + + **Response Model** + + **PriceDataSet** + + - **CustomPrice** (int) - 用户折后价 + - **PurchaseValue** (int) - 资源有效期 + - **TotalPrice** (int) - 升降级资源的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeUMemcacheUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeUMemcacheUpgradePrice", d, **kwargs) + return apis.DescribeUMemcacheUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_backup(self, req=None, **kwargs): + """ DescribeURedisBackup - 查询主备redis备份 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 组的ID + - **Limit** (int) - 分页显示的条目数, 默认值为10 + - **Offset** (int) - 分页显示的起始偏移, 默认值为0 + + **Response** + + - **DataSet** (list) - 见 **URedisBackupSet** 模型定义 + - **TotalCount** (int) - 用户名下总的备份个数 + + **Response Model** + + **URedisBackupSet** + + - **BackupId** (str) - 备份ID + - **BackupName** (str) - 备份的名称 + - **BackupSize** (int) - 备份文件大小, 以字节为单位 + - **BackupTime** (int) - 备份时间 (UNIX时间戳) + - **BackupType** (str) - 备份类型: Manual 手动 Auto 自动 + - **GroupId** (str) - 对应的实例ID + - **GroupName** (str) - 组名称 + - **State** (str) - 备份的状态: Backuping 备份中 Success 备份成功 Error 备份失败 Expired 备份过期 + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisBackupRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisBackup", d, **kwargs) + return apis.DescribeURedisBackupResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_backup_url(self, req=None, **kwargs): + """ DescribeURedisBackupURL - 获取主备Redis备份下载链接 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BackupId** (str) - (Required) 备份ID + - **GroupId** (str) - 实例名称 + - **RegionFlag** (bool) - 是否是跨机房URedis(默认false) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **BackupPath** (str) - 备份文件公网的地址 + - **BackupURL** (str) - 备份文件公网的地址 + - **InnerBackupPath** (str) - + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisBackupURLRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisBackupURL", d, **kwargs) + return apis.DescribeURedisBackupURLResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_group(self, req=None, **kwargs): + """ DescribeURedisGroup - 查询主备Redis + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit + - **Limit** (int) - 分页显示的条目数, 默认值为20 + - **Offset** (int) - 分页显示的起始偏移, 默认值为0 + - **Zone** (str) - + + **Response** + + - **DataSet** (list) - 见 **URedisGroupSet** 模型定义 + - **TotalCount** (int) - 组的总的节点个数 + + **Response Model** + + **URedisGroupSet** + + - **AutoBackup** (str) - 是否需要自动备份,enable,disable + - **BackupTime** (int) - 组自动备份开始时间,单位小时计,范围[0-23] + - **ChargeType** (str) - 计费类型:Year,Month,Dynamic 默认Dynamic + - **ConfigId** (str) - 节点的配置ID + - **CreateTime** (int) - 创建时间 (UNIX时间戳) + - **ExpireTime** (int) - 过期时间 (UNIX时间戳) + - **GroupId** (str) - 组ID + - **GroupName** (str) - 组名称 + - **HighAvailability** (str) - 是否开启高可用,enable,disable + - **MemorySize** (int) - 容量单位GB + - **ModifyTime** (int) - 修改时间 (UNIX时间戳) + - **Name** (str) - 组名称 + - **Port** (int) - 节点分配的服务端口 + - **Protocol** (str) - 协议 + - **RewriteTime** (int) - 返回运维时间 0 //0点 1 //1点 以此类推 + - **Size** (int) - 容量单位GB + - **SlaveZone** (str) - 跨机房URedis,slave redis所在可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **State** (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败 + - **SubnetId** (str) - + - **Tag** (str) - 业务组名称 + - **Type** (str) - + - **UsedSize** (int) - 使用量单位MB + - **VPCId** (str) - + - **Version** (str) - Redis版本信息 + - **VirtualIP** (str) - 节点的虚拟IP地址 + - **Zone** (str) - 实例所在可用区,或者master redis所在可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisGroupRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisGroup", d, **kwargs) + return apis.DescribeURedisGroupResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_price(self, req=None, **kwargs): + """ DescribeURedisPrice - 取uredis价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 量大小,单位:GB 取值范围[1-32] + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - 计费模式,Year, Month, Dynamic;如果不指定,则一次性获取三种计费 + - **ProductType** (str) - 产品类型:MS_Redis(标准主备版),S_Redis(从库),默认为MS_Redis + - **Quantity** (int) - 计费模式为Dynamic时,购买的时长, 默认为1 + - **RegionFlag** (bool) - 是否是跨机房URedis(默认false) + - **Type** (str) - + + **Response** + + - **DataSet** (list) - 见 **URedisPriceSet** 模型定义 + + **Response Model** + + **URedisPriceSet** + + - **ChargeType** (str) - Year, Month, Dynamic,Trial + - **OriginalPrice** (int) - 原价 + - **Price** (int) - 总价格,单位: 元,保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisPriceRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisPrice", d, **kwargs) + return apis.DescribeURedisPriceResponseSchema().loads(resp)
+ +
[docs] def describe_uredis_upgrade_price(self, req=None, **kwargs): + """ DescribeURedisUpgradePrice - 获取uredis升级价格信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 要升级的空间的GroupId,请参考DescribeURedisGroup接口 + - **Size** (int) - (Required) 购买uredis大小,单位:GB,范围是[1-32] + - **Type** (str) - + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 + - **Price** (int) - 扩容差价,单位: 元,保留小数点后两位有效数字(兼容老版本) + + **Response Model** + + **PriceDataSet** + + - **CustomPrice** (int) - 用户折后价 + - **PurchaseValue** (int) - 资源有效期 + - **TotalPrice** (int) - 升降级资源的价格 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeURedisUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("DescribeURedisUpgradePrice", d, **kwargs) + return apis.DescribeURedisUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def get_umem_space_state(self, req=None, **kwargs): + """ GetUMemSpaceState - 获取UMem内存空间列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SpaceId** (str) - (Required) 内存空间ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **State** (str) - Starting:创建中 Running:运行中 Fail:失败 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUMemSpaceStateRequestSchema().dumps(d) + resp = self.invoke("GetUMemSpaceState", d, **kwargs) + return apis.GetUMemSpaceStateResponseSchema().loads(resp)
+ +
[docs] def modify_umem_space_name(self, req=None, **kwargs): + """ ModifyUMemSpaceName - 修改UMem内存空间名称 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) 新的名称,长度(6<=size<=63) + - **SpaceId** (str) - (Required) UMem内存空间ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyUMemSpaceNameRequestSchema().dumps(d) + resp = self.invoke("ModifyUMemSpaceName", d, **kwargs) + return apis.ModifyUMemSpaceNameResponseSchema().loads(resp)
+ +
[docs] def modify_uredis_group_name(self, req=None, **kwargs): + """ ModifyURedisGroupName - 修改主备redis名称 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组的ID + - **Name** (str) - (Required) Redis组名称 (范围[6-63],只能包含英文、数字以及符号-和_) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyURedisGroupNameRequestSchema().dumps(d) + resp = self.invoke("ModifyURedisGroupName", d, **kwargs) + return apis.ModifyURedisGroupNameResponseSchema().loads(resp)
+ +
[docs] def resize_udredis_space(self, req=None, **kwargs): + """ ResizeUDredisSpace - 调整内存空间容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024) + - **SpaceId** (str) - (Required) 高性能UMem 内存空间Id + - **CouponId** (str) - 使用的代金券Id + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUDredisSpaceRequestSchema().dumps(d) + resp = self.invoke("ResizeUDredisSpace", d, **kwargs) + return apis.ResizeUDredisSpaceResponseSchema().loads(resp)
+ +
[docs] def resize_umem_space(self, req=None, **kwargs): + """ ResizeUMemSpace - 调整内存空间容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024) + - **SpaceId** (str) - (Required) UMem 内存空间Id + - **ChargeType** (str) - + - **CouponId** (str) - 使用的代金券Id + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeUMemSpaceRequestSchema().dumps(d) + resp = self.invoke("ResizeUMemSpace", d, **kwargs) + return apis.ResizeUMemSpaceResponseSchema().loads(resp)
+ +
[docs] def resize_uredis_group(self, req=None, **kwargs): + """ ResizeURedisGroup - 调整主备redis容量 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组ID + - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,且小于等于32) 目前仅支持1/2/4/8/16/32 G 六种容量规格 + - **ChargeType** (str) - + - **CouponId** (int) - 代金券ID 请参考DescribeCoupon接口 + - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeURedisGroupRequestSchema().dumps(d) + resp = self.invoke("ResizeURedisGroup", d, **kwargs) + return apis.ResizeURedisGroupResponseSchema().loads(resp)
+ +
[docs] def restart_umem_cache_group(self, req=None, **kwargs): + """ RestartUMemcacheGroup - 重启单机Memcache + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **GroupId** (str) - (Required) 组的ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RestartUMemcacheGroupRequestSchema().dumps(d) + resp = self.invoke("RestartUMemcacheGroup", d, **kwargs) + return apis.RestartUMemcacheGroupResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/unet/client.html b/docs/build/html/_modules/ucloud/services/unet/client.html new file mode 100644 index 0000000..e62dae6 --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/unet/client.html @@ -0,0 +1,1033 @@ + + + + + + + + ucloud.services.unet.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.unet.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.unet.schemas import apis
+
+
+
[docs]class UNetClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UNetClient, self).__init__(config, transport, middleware, logger) + +
[docs] def allocate_eip(self, req=None, **kwargs): + """ AllocateEIP - 根据提供信息, 申请弹性IP + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域。 + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-200],带宽计费[1-800] + - **OperatorName** (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International + - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按需付费(需开启权限); Trial, 试用(需开启权限) 默认为按月付费 + - **CouponId** (str) - 代金券ID, 默认不使用 + - **Name** (str) - 弹性IP的名称, 默认为 "EIP" + - **PayMode** (str) - 弹性IP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; "ShareBandwidth",共享带宽模式. 默认为 "Bandwidth". + - **Quantity** (int) - 购买时长, 默认: 1 + - **Remark** (str) - 弹性IP的备注, 默认为空 + - **ShareBandwidthId** (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效 + - **Tag** (str) - 业务组名称, 默认为 "Default" + + **Response** + + - **EIPSet** (list) - 见 **UnetAllocateEIPSet** 模型定义 + + **Response Model** + + **UnetEIPAddrSet** + + - **IP** (str) - IP地址 + - **OperatorName** (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp + + **UnetAllocateEIPSet** + + - **EIPAddr** (list) - 见 **UnetEIPAddrSet** 模型定义 + - **EIPId** (str) - 申请到的EIP资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateEIPRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateEIP", d, **kwargs) + return apis.AllocateEIPResponseSchema().loads(resp)
+ +
[docs] def allocate_share_bandwidth(self, req=None, **kwargs): + """ AllocateShareBandwidth - 开通共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - (Required) 付费方式:Year 按年,Month 按月,Dynamic 按时; + - **Name** (str) - (Required) 共享带宽名字 + - **ShareBandwidth** (int) - (Required) 共享带宽值 + - **BwType** (str) - 共享带宽类型,ipv4或者ipv6,不传默认ipv4 + - **Quantity** (int) - 购买时长 + - **ShareBandwidthGuarantee** (int) - 共享带宽保底值(后付费) + + **Response** + + - **ShareBandwidthId** (str) - 共享带宽资源Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateShareBandwidthRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateShareBandwidth", d, **kwargs) + return apis.AllocateShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def allocate_vip(self, req=None, **kwargs): + """ AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域 + - **SubnetId** (str) - (Required) 子网id + - **VPCId** (str) - (Required) 指定vip所属的VPC + - **BusinessId** (str) - 业务组 + - **Count** (int) - 申请数量,默认: 1 + - **Ip** (str) - 指定ip + - **Name** (str) - vip名,默认为VIP + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组名称,默认为Default + - **Zone** (str) - 可用区 + + **Response** + + - **DataSet** (list) - 申请到的VIP地址 + - **VIPSet** (list) - 见 **VIPSet** 模型定义 + + **Response Model** + + **VIPSet** + + - **VIP** (str) - 虚拟ip + - **VIPId** (str) - 虚拟ip id + - **VPCId** (str) - VPC id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AllocateVIPRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AllocateVIP", d, **kwargs) + return apis.AllocateVIPResponseSchema().loads(resp)
+ +
[docs] def associate_eip_with_share_bandwidth(self, req=None, **kwargs): + """ AssociateEIPWithShareBandwidth - 将EIP加入共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域。 + - **EIPIds** (list) - (Required) 要加入共享带宽的EIP的资源Id + - **ShareBandwidthId** (str) - (Required) 共享带宽ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AssociateEIPWithShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("AssociateEIPWithShareBandwidth", d, **kwargs) + return apis.AssociateEIPWithShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def bind_eip(self, req=None, **kwargs): + """ BindEIP - 将尚未使用的弹性IP绑定到指定的资源 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **EIPId** (str) - (Required) 弹性IP的资源Id + - **ResourceId** (str) - (Required) 弹性IP请求绑定的资源ID + - **ResourceType** (str) - (Required) 弹性IP请求绑定的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:natgw;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni:虚拟网卡。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.BindEIPRequestSchema().dumps(d) + resp = self.invoke("BindEIP", d, **kwargs) + return apis.BindEIPResponseSchema().loads(resp)
+ +
[docs] def create_bandwidth_package(self, req=None, **kwargs): + """ CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 + - **Region** (str) - (Config) 地域 + - **Bandwidth** (int) - (Required) 带宽大小(单位Mbps), 取值范围[2,800] (最大值受地域限制) + - **EIPId** (str) - (Required) 所绑定弹性IP的资源ID + - **TimeRange** (int) - (Required) 带宽包有效时长, 取值范围为大于0的整数, 即该带宽包在EnableTime到 EnableTime+TimeRange时间段内生效 + - **CouponId** (str) - 代金券ID + - **EnableTime** (int) - 生效时间, 格式为 Unix timestamp, 默认为立即开通 + + **Response** + + - **BandwidthPackageId** (str) - 所创建带宽包的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateBandwidthPackageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateBandwidthPackage", d, **kwargs) + return apis.CreateBandwidthPackageResponseSchema().loads(resp)
+ +
[docs] def create_firewall(self, req=None, **kwargs): + """ CreateFirewall - 创建防火墙 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **Name** (str) - (Required) 防火墙名称 + - **Rule** (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注 + - **Remark** (str) - 防火墙描述,默认为空 + - **Tag** (str) - 防火墙业务组,默认为Default + + **Response** + + - **FWId** (str) - 防火墙ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateFirewallRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateFirewall", d, **kwargs) + return apis.CreateFirewallResponseSchema().loads(resp)
+ +
[docs] def delete_bandwidth_package(self, req=None, **kwargs): + """ DeleteBandwidthPackage - 删除弹性IP上已附加带宽包 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **BandwidthPackageId** (str) - (Required) 带宽包资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteBandwidthPackageRequestSchema().dumps(d) + resp = self.invoke("DeleteBandwidthPackage", d, **kwargs) + return apis.DeleteBandwidthPackageResponseSchema().loads(resp)
+ +
[docs] def delete_firewall(self, req=None, **kwargs): + """ DeleteFirewall - 删除防火墙 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **FWId** (str) - (Required) 防火墙资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteFirewallRequestSchema().dumps(d) + resp = self.invoke("DeleteFirewall", d, **kwargs) + return apis.DeleteFirewallResponseSchema().loads(resp)
+ +
[docs] def describe_bandwidth_package(self, req=None, **kwargs): + """ DescribeBandwidthPackage - 获取某地域下的带宽包信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20 + - **Offset** (int) - 返回数据偏移量, 默认为0 + + **Response** + + - **DataSets** (list) - 见 **UnetBandwidthPackageSet** 模型定义 + - **TotalCount** (int) - 满足条件的带宽包总数 + + **Response Model** + + **EIPAddrSet** + + - **IP** (str) - 弹性IP地址 + - **OperatorName** (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际. + + **UnetBandwidthPackageSet** + + - **Bandwidth** (int) - 带宽包的临时带宽值, 单位Mbps + - **BandwidthPackageId** (str) - 带宽包的资源ID + - **CreateTime** (int) - 创建时间, 格式为 Unix Timestamp + - **DisableTime** (int) - 失效时间, 格式为 Unix Timestamp + - **EIPAddr** (list) - 见 **EIPAddrSet** 模型定义 + - **EIPId** (str) - 带宽包所绑定弹性IP的资源ID + - **EnableTime** (int) - 生效时间, 格式为 Unix Timestamp + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeBandwidthPackageRequestSchema().dumps(d) + resp = self.invoke("DescribeBandwidthPackage", d, **kwargs) + return apis.DescribeBandwidthPackageResponseSchema().loads(resp)
+ +
[docs] def describe_bandwidth_usage(self, req=None, **kwargs): + """ DescribeBandwidthUsage - 获取带宽用量信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPIds** (list) - 弹性IP的资源Id. 如果为空, 则返回当前 Region中符合条件的所有EIP的带宽用量, n为自然数 + - **Limit** (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20 + - **OffSet** (int) - 返回数据偏移量, 默认为0 + + **Response** + + - **EIPSet** (list) - 见 **UnetBandwidthUsageEIPSet** 模型定义 + - **TotalCount** (int) - EIPSet中的元素个数 + + **Response Model** + + **UnetBandwidthUsageEIPSet** + + - **CurBandwidth** (float) - 最近5分钟带宽用量, 单位Mbps + - **EIPId** (str) - 弹性IP资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeBandwidthUsageRequestSchema().dumps(d) + resp = self.invoke("DescribeBandwidthUsage", d, **kwargs) + return apis.DescribeBandwidthUsageResponseSchema().loads(resp)
+ +
[docs] def describe_eip(self, req=None, **kwargs): + """ DescribeEIP - 获取弹性IP信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **EIPIds** (list) - 弹性IP的资源ID如果为空, 则返回当前 Region中符合条件的的所有EIP + - **Limit** (int) - 数据分页值, 默认为20 + - **Offset** (int) - 数据偏移量, 默认为0 + + **Response** + + - **EIPSet** (list) - 见 **UnetEIPSet** 模型定义 + - **TotalBandwidth** (int) - 满足条件的弹性IP带宽总和, 单位Mbps + - **TotalCount** (int) - 满足条件的弹性IP总数 + + **Response Model** + + **ShareBandwidthSet** + + - **ShareBandwidth** (int) - 共享带宽带宽值 + - **ShareBandwidthId** (str) - 共享带宽ID + - **ShareBandwidthName** (str) - 共享带宽的资源名称 + + **UnetEIPAddrSet** + + - **IP** (str) - IP地址 + - **OperatorName** (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp + + **UnetEIPResourceSet** + + - **EIPId** (str) - 弹性IP的资源ID + - **ResourceId** (str) - 已绑定资源的资源ID + - **ResourceName** (str) - 已绑定的资源名称 + - **ResourceType** (str) - 已绑定的资源类型, 枚举值为: uhost, 云主机;natgw:NAT网关;ulb:负载均衡器;upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;vpngw:IPSec VPN;ucdr:云灾备;dbaudit:数据库审计,uni:虚拟网卡。 + - **SubResourceId** (str) - 资源绑定的虚拟网卡的ID + - **SubResourceName** (str) - 资源绑定的虚拟网卡的名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡的类型。uni,虚拟网卡。 + + **UnetEIPSet** + + - **Bandwidth** (int) - 弹性IP的带宽, 单位为Mbps, 当BandwidthType=1时, 该处显示为共享带宽值. 当BandwidthType=0时, 该处显示这个弹性IP的带宽. + - **BandwidthType** (int) - 带宽模式, 枚举值为: 0: 非共享带宽模式, 1: 共享带宽模式 + - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按小时付费; Trial, 试用. 按小时付费和试用这两种付费模式需要开通权限. + - **CreateTime** (int) - 弹性IP的创建时间, 格式为Unix Timestamp + - **EIPAddr** (list) - 见 **UnetEIPAddrSet** 模型定义 + - **EIPId** (str) - 弹性IP的资源ID + - **Expire** (bool) - 弹性IP是否到期 + - **ExpireTime** (int) - 弹性IP的到期时间, 格式为Unix Timestamp + - **Name** (str) - 弹性IP的名称,缺省值为 "EIP" + - **PayMode** (str) - 弹性IP的计费模式, 枚举值为: "Bandwidth", 带宽计费; "Traffic", 流量计费; "ShareBandwidth",共享带宽模式. 默认为 "Bandwidth". + - **Remark** (str) - 弹性IP的备注, 缺省值为 "" + - **Resource** (dict) - 见 **UnetEIPResourceSet** 模型定义 + - **ShareBandwidthSet** (dict) - 见 **ShareBandwidthSet** 模型定义 + - **Status** (str) - 弹性IP的资源绑定状态, 枚举值为: used: 已绑定, free: 未绑定, freeze: 已冻结 + - **Tag** (str) - 弹性IP的业务组标识, 缺省值为 "Default" + - **Weight** (int) - 外网出口权重, 默认为50, 范围[0-100] + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeEIPRequestSchema().dumps(d) + resp = self.invoke("DescribeEIP", d, **kwargs) + return apis.DescribeEIPResponseSchema().loads(resp)
+ +
[docs] def describe_firewall(self, req=None, **kwargs): + """ DescribeFirewall - 获取防火墙组信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **FWId** (str) - 防火墙ID,默认为返回所有防火墙 + - **Limit** (int) - 返回数据长度,默认为20,最大10000000 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **ResourceId** (str) - 绑定防火墙组的资源ID + - **ResourceType** (str) - 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:"unatgw",NAT网关; "uhost",云主机; "upm",物理云主机; "hadoophost",hadoop节点; "fortresshost",堡垒机; "udhost",私有专区主机;"udockhost",容器;"dbaudit",数据库审计. + + **Response** + + - **DataSet** (list) - 见 **FirewallDataSet** 模型定义 + - **TotalCount** (int) - + + **Response Model** + + **FirewallRuleSet** + + - **DstPort** (str) - 目标端口 + - **Priority** (str) - 优先级 + - **ProtocolType** (str) - 协议类型 + - **Remark** (str) - 防火墙规则备注 + - **RuleAction** (str) - 防火墙动作 + - **SrcIP** (str) - 源地址 + + **FirewallDataSet** + + - **CreateTime** (int) - 防火墙组创建时间,格式为Unix Timestamp + - **FWId** (str) - 防火墙ID + - **GroupId** (str) - 安全组ID(即将废弃) + - **Name** (str) - 防火墙名称 + - **Remark** (str) - 防火墙备注 + - **ResourceCount** (int) - 防火墙绑定资源数量 + - **Rule** (list) - 见 **FirewallRuleSet** 模型定义 + - **Tag** (str) - 防火墙业务组 + - **Type** (str) - 防火墙组类型,枚举值为: "user defined", 用户自定义防火墙; "recommend web", 默认Web防火墙; "recommend non web", 默认非Web防火墙 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeFirewallRequestSchema().dumps(d) + resp = self.invoke("DescribeFirewall", d, **kwargs) + return apis.DescribeFirewallResponseSchema().loads(resp)
+ +
[docs] def describe_firewall_resource(self, req=None, **kwargs): + """ DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙ID + - **Limit** (int) - 返回数据长度,默认为20,最大10000000 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + + **Response** + + - **ResourceSet** (list) - 见 **ResourceSet** 模型定义 + - **TotalCount** (int) - 绑定资源总数 + + **Response Model** + + **ResourceSet** + + - **Name** (str) - 名称 + - **PrivateIP** (str) - 内网IP + - **Remark** (str) - 备注 + - **ResourceID** (str) - 绑定该防火墙的资源id + - **ResourceType** (str) - 绑定资源的资源类型,如"uhost","upm","umem","uhive","uvip","uredis","uhadoop","ufortress","dbaudit","udw","udocker", "umemcache" + - **Status** (int) - 状态 + - **Tag** (str) - 业务组 + - **Zone** (int) - 可用区 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeFirewallResourceRequestSchema().dumps(d) + resp = self.invoke("DescribeFirewallResource", d, **kwargs) + return apis.DescribeFirewallResourceResponseSchema().loads(resp)
+ +
[docs] def describe_share_bandwidth(self, req=None, **kwargs): + """ DescribeShareBandwidth - 获取共享带宽信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ShareBandwidthIds** (list) - 需要返回的共享带宽Id + + **Response** + + - **DataSet** (list) - 见 **UnetShareBandwidthSet** 模型定义 + - **TotalCount** (int) - 符合条件的共享带宽总数,大于等于返回DataSet长度 + + **Response Model** + + **EIPAddrSet** + + - **IP** (str) - 弹性IP地址 + - **OperatorName** (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际. + + **EIPSetData** + + - **Bandwidth** (int) - EIP带宽值 + - **EIPAddr** (list) - 见 **EIPAddrSet** 模型定义 + - **EIPId** (str) - EIP资源Id + + **UnetShareBandwidthSet** + + - **BandwidthGuarantee** (int) - 共享带宽保底值(后付费) + - **ChargeType** (str) - 付费方式, 预付费:Year 按年,Month 按月,Dynamic 按需;后付费:PostPay(按月) + - **CreateTime** (int) - 创建时间, 格式为Unix Timestamp + - **EIPSet** (list) - 见 **EIPSetData** 模型定义 + - **ExpireTime** (int) - 过期时间, 格式为Unix Timestamp + - **Name** (str) - 共享带宽名称 + - **PostPayStartTime** (int) - 共享带宽后付费开始计费时间(后付费) + - **ShareBandwidth** (int) - 共享带宽值(预付费)/共享带宽峰值(后付费), 单位Mbps + - **ShareBandwidthId** (str) - 共享带宽的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("DescribeShareBandwidth", d, **kwargs) + return apis.DescribeShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def describe_vip(self, req=None, **kwargs): + """ DescribeVIP - 获取内网VIP详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - 业务组 + - **SubnetId** (str) - 子网id,不指定则获取VPCId下的所有vip + - **Tag** (str) - 业务组名称, 默认为 Default + - **VPCId** (str) - vpc的id,指定SubnetId时必填 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **DataSet** (list) - 内网VIP地址列表 + - **TotalCount** (int) - vip数量 + - **VIPSet** (list) - 见 **VIPDetailSet** 模型定义 + + **Response Model** + + **VIPDetailSet** + + - **CreateTime** (int) - 创建时间 + - **Name** (str) - + - **RealIp** (str) - 真实主机ip + - **SubnetId** (str) - 子网id + - **VIP** (str) - 虚拟ip + - **VIPId** (str) - 虚拟ip id + - **VPCId** (str) - VPC id + - **Zone** (str) - 地域 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVIPRequestSchema().dumps(d) + resp = self.invoke("DescribeVIP", d, **kwargs) + return apis.DescribeVIPResponseSchema().loads(resp)
+ +
[docs] def disassociate_eip_with_share_bandwidth(self, req=None, **kwargs): + """ DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 移出共享带宽后,EIP的外网带宽, 单位为Mbps. 各地域带宽范围如下: 流量计费[1-200],带宽计费[1-800] + - **ShareBandwidthId** (str) - (Required) 共享带宽ID + - **EIPIds** (list) - EIP的资源Id;默认移出该共享带宽下所有的EIP + - **PayMode** (str) - 移出共享带宽后,EIP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; 默认为 "Bandwidth". + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DisassociateEIPWithShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("DisassociateEIPWithShareBandwidth", d, **kwargs) + return apis.DisassociateEIPWithShareBandwidthResponseSchema().loads( + resp + )
+ +
[docs] def get_eip_pay_mode(self, req=None, **kwargs): + """ GetEIPPayMode - 获取弹性IP计费模式 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **EIPId** (list) - (Required) 弹性IP的资源Id + + **Response** + + - **EIPPayMode** (list) - 见 **EIPPayModeSet** 模型定义 + + **Response Model** + + **EIPPayModeSet** + + - **EIPId** (str) - EIP的资源ID + - **EIPPayMode** (str) - EIP的计费模式. 枚举值为:Bandwidth, 带宽计费;Traffic, 流量计费; "ShareBandwidth",共享带宽模式 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetEIPPayModeRequestSchema().dumps(d) + resp = self.invoke("GetEIPPayMode", d, **kwargs) + return apis.GetEIPPayModeResponseSchema().loads(resp)
+ +
[docs] def get_eip_price(self, req=None, **kwargs): + """ GetEIPPrice - 获取弹性IP价格 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [0-800] + - **OperatorName** (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International,泉州为移动单线cn-qz:ChinaMobile + - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按时付费; 默认为获取三种价格 + - **PayMode** (str) - 弹性IP计费方式r. 枚举值为: Traffic, 流量计费; Bandwidth, 带宽计费; "ShareBandwidth",共享带宽模式. 默认为Bandwidth + - **Quantity** (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末 + + **Response** + + - **PriceSet** (list) - 见 **EIPPriceDetailSet** 模型定义 + + **Response Model** + + **EIPPriceDetailSet** + + - **ChargeType** (str) - 弹性IP付费方式 + - **Price** (float) - 弹性IP价格, 单位"元" + - **PurchaseValue** (int) - 资源有效期, 以Unix Timestamp表示 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetEIPPriceRequestSchema().dumps(d) + resp = self.invoke("GetEIPPrice", d, **kwargs) + return apis.GetEIPPriceResponseSchema().loads(resp)
+ +
[docs] def get_eip_upgrade_price(self, req=None, **kwargs): + """ GetEIPUpgradePrice - 获取弹性IP带宽改动价格 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [1-800] + - **EIPId** (str) - (Required) 弹性IP的资源ID + + **Response** + + - **Price** (float) - 调整带宽后的EIP价格, 单位为"元", 如需退费此处为负值 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetEIPUpgradePriceRequestSchema().dumps(d) + resp = self.invoke("GetEIPUpgradePrice", d, **kwargs) + return apis.GetEIPUpgradePriceResponseSchema().loads(resp)
+ +
[docs] def grant_firewall(self, req=None, **kwargs): + """ GrantFirewall - 将防火墙应用到资源上 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙资源ID + - **ResourceId** (str) - (Required) 所应用资源ID + - **ResourceType** (str) - (Required) 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:"unatgw",NAT网关; "uhost",云主机; "upm",物理云主机; "hadoophost",hadoop节点; "fortresshost",堡垒机; "udhost",私有专区主机;"udockhost",容器;"dbaudit",数据库审计,”uni“,虚拟网卡。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GrantFirewallRequestSchema().dumps(d) + resp = self.invoke("GrantFirewall", d, **kwargs) + return apis.GrantFirewallResponseSchema().loads(resp)
+ +
[docs] def modify_eip_bandwidth(self, req=None, **kwargs): + """ ModifyEIPBandwidth - 调整弹性IP的外网带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 各地域的带宽值范围如下:流量计费[1-200],带宽计费[1-800] + - **EIPId** (str) - (Required) 弹性IP的资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyEIPBandwidthRequestSchema().dumps(d) + resp = self.invoke("ModifyEIPBandwidth", d, **kwargs) + return apis.ModifyEIPBandwidthResponseSchema().loads(resp)
+ +
[docs] def modify_eip_weight(self, req=None, **kwargs): + """ ModifyEIPWeight - 修改弹性IP的外网出口权重 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) 弹性IP的资源ID + - **Weight** (int) - (Required) 外网出口权重, 范围[0-100] 取值为0时, 该弹性IP不会被使用. 取值为100时, 同主机下只会使用这个弹性IP,其他弹性IP不会被使用 请勿将多个绑定在同一资源的弹性IP设置为相同权重 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyEIPWeightRequestSchema().dumps(d) + resp = self.invoke("ModifyEIPWeight", d, **kwargs) + return apis.ModifyEIPWeightResponseSchema().loads(resp)
+ +
[docs] def release_eip(self, req=None, **kwargs): + """ ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态. + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) 弹性IP的资源ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseEIPRequestSchema().dumps(d) + resp = self.invoke("ReleaseEIP", d, **kwargs) + return apis.ReleaseEIPResponseSchema().loads(resp)
+ +
[docs] def release_share_bandwidth(self, req=None, **kwargs): + """ ReleaseShareBandwidth - 关闭共享带宽 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPBandwidth** (int) - (Required) 关闭共享带宽后,各EIP恢复为的带宽值 + - **ShareBandwidthId** (str) - (Required) 共享带宽ID + - **PayMode** (str) - Bandwidth 带宽计费, Traffic 转流量计费 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("ReleaseShareBandwidth", d, **kwargs) + return apis.ReleaseShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def release_vip(self, req=None, **kwargs): + """ ReleaseVIP - 释放VIP资源 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 + - **Region** (str) - (Config) 地域 + - **VIPId** (str) - (Required) 内网VIP的id + - **Zone** (str) - 可用区 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReleaseVIPRequestSchema().dumps(d) + resp = self.invoke("ReleaseVIP", d, **kwargs) + return apis.ReleaseVIPResponseSchema().loads(resp)
+ +
[docs] def resize_share_bandwidth(self, req=None, **kwargs): + """ ResizeShareBandwidth - 调整共享带宽的带宽值 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ShareBandwidth** (int) - (Required) 带宽值,单位为Mb,范围 [20-5000] (最大值受地域限制) + - **ShareBandwidthId** (str) - (Required) 共享带宽的Id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ResizeShareBandwidthRequestSchema().dumps(d) + resp = self.invoke("ResizeShareBandwidth", d, **kwargs) + return apis.ResizeShareBandwidthResponseSchema().loads(resp)
+ +
[docs] def set_eip_pay_mode(self, req=None, **kwargs): + """ SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费. + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Bandwidth** (int) - (Required) 调整的目标带宽值, 单位Mbps. 各地域的带宽值范围如下: 流量计费[1-200],其余情况[1-800] + - **EIPId** (str) - (Required) 弹性IP的资源Id + - **PayMode** (str) - (Required) 计费模式. 枚举值:"Traffic", 流量计费模式; "Bandwidth", 带宽计费模式 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SetEIPPayModeRequestSchema().dumps(d) + resp = self.invoke("SetEIPPayMode", d, **kwargs) + return apis.SetEIPPayModeResponseSchema().loads(resp)
+ +
[docs] def un_bind_eip(self, req=None, **kwargs): + """ UnBindEIP - 将弹性IP从资源上解绑 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) 弹性IP的资源Id + - **ResourceId** (str) - (Required) 弹性IP请求解绑的资源ID + - **ResourceType** (str) - (Required) 弹性IP请求解绑的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:NAT网关;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni,虚拟网卡。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UnBindEIPRequestSchema().dumps(d) + resp = self.invoke("UnBindEIP", d, **kwargs) + return apis.UnBindEIPResponseSchema().loads(resp)
+ +
[docs] def update_eip_attribute(self, req=None, **kwargs): + """ UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **EIPId** (str) - (Required) EIP资源ID + - **Name** (str) - 名字(Name Tag Remark都为空则报错) + - **Remark** (str) - 备注 + - **Tag** (str) - 业务 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateEIPAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateEIPAttribute", d, **kwargs) + return apis.UpdateEIPAttributeResponseSchema().loads(resp)
+ +
[docs] def update_firewall(self, req=None, **kwargs): + """ UpdateFirewall - 更新防火墙规则 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙资源ID + - **Rule** (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注 + + **Response** + + - **FWId** (str) - 防火墙id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateFirewallRequestSchema().dumps(d) + resp = self.invoke("UpdateFirewall", d, **kwargs) + return apis.UpdateFirewallResponseSchema().loads(resp)
+ +
[docs] def update_firewall_attribute(self, req=None, **kwargs): + """ UpdateFirewallAttribute - 更新防火墙规则 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **FWId** (str) - (Required) 防火墙资源ID + - **Name** (str) - 防火墙名称,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 + - **Remark** (str) - 防火墙备注,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 + - **Tag** (str) - 防火墙业务组,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateFirewallAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateFirewallAttribute", d, **kwargs) + return apis.UpdateFirewallAttributeResponseSchema().loads(resp)
+ + _deprecated = { + "allocate_e_ip": "allocate_eip", + "associate_e_ip_with_share_bandwidth": "associate_eip_with_share_bandwidth", + "bind_e_ip": "bind_eip", + "describe_e_ip": "describe_eip", + "disassociate_e_ip_with_share_bandwidth": "disassociate_eip_with_share_bandwidth", + "get_e_ip_pay_mode": "get_eip_pay_mode", + "get_e_ip_price": "get_eip_price", + "get_e_ip_upgrade_price": "get_eip_upgrade_price", + "modify_e_ip_bandwidth": "modify_eip_bandwidth", + "modify_e_ip_weight": "modify_eip_weight", + "release_e_ip": "release_eip", + "set_e_ip_pay_mode": "set_eip_pay_mode", + "un_bind_e_ip": "un_bind_eip", + "update_e_ip_attribute": "update_eip_attribute", + "release_v_ip": "release_vip", + "allocate_v_ip": "allocate_vip", + "describe_v_ip": "describe_vip", + } + + def __getattr__(self, item): + if item in self._deprecated: + instead_of = self._deprecated[item] + msg = "the method {} is deprecated, please use {} instead, this method will remove after 0.5.0 version" + self.logger.warning(msg.format(item, instead_of)) + return getattr(self, self._deprecated[item]) + raise AttributeError( + "'{}' object has no attribute '{}'".format( + self.__class__.__name__, item + ) + )
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/uphost/client.html b/docs/build/html/_modules/ucloud/services/uphost/client.html new file mode 100644 index 0000000..06ad27f --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/uphost/client.html @@ -0,0 +1,457 @@ + + + + + + + + ucloud.services.uphost.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.uphost.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.uphost.schemas import apis
+
+
+
[docs]class UPHostClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(UPHostClient, self).__init__( + config, transport, middleware, logger + ) + +
[docs] def create_phost(self, req=None, **kwargs): + """ CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - (Required) 镜像ID。 请通过 [DescribePHostImage]获取 + - **Password** (str) - (Required) 密码(密码需使用base64进行编码) + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - 计费模式,枚举值为:year, 按年付费; month,按月付费;dynamic,按需付费,(需开启权限) trial, 试用(需开启权限)。默认为按月付费 + - **Cluster** (str) - 网络环境,可选千兆:1G ,万兆:10G, 默认1G + - **Count** (int) - 购买数量,默认为1,(暂不支持) + - **CouponId** (str) - 代金券 + - **Name** (str) - 物理机名称,默认为phost + - **Quantity** (str) - 购买时长,默认为1,范围[1-10] + - **Raid** (str) - Raid配置,默认Raid10 支持:Raid0、Raid1、Raid5、Raid10,NoRaid + - **Remark** (str) - 物理机备注,默认为空 + - **SecurityGroupId** (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 `DescribeSecurityGroup <https://docs.ucloud.cn/api/unet-api/describe_security_group.html>`_ + - **SubnetId** (str) - 子网ID,不填为默认,VPC2.0下需要填写此字段。 + - **Tag** (str) - 业务组,默认为default + - **Type** (str) - 物理机类型,默认为:db-2(基础型-SAS-V3) + - **VPCId** (str) - VPC ID,不填为默认,VPC2.0下需要填写此字段。 + + **Response** + + - **PHostId** (list) - PHost的资源ID数组 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreatePHostRequestSchema().dumps(d) + resp = self.invoke("CreatePHost", d, **kwargs) + return apis.CreatePHostResponseSchema().loads(resp)
+ +
[docs] def describe_phost(self, req=None, **kwargs): + """ DescribePHost - 获取物理机详细信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - 返回数据长度,默认为20 + - **Offset** (int) - 数据偏移量,默认为0 + - **PHostId** (list) - PHost资源ID,若为空,则返回当前Region所有PHost。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostSet** (list) - 见 **PHostSet** 模型定义 + - **TotalCount** (int) - 满足条件的PHost总数 + + **Response Model** + + **PHostDiskSet** + + - **Count** (int) - 磁盘数量 + - **IOCap** (int) - 磁盘IO性能,单位MB/s(待废弃) + - **Name** (str) - 磁盘名称,sys/data + - **Space** (int) - 单盘大小,单位GB + - **Type** (str) - 磁盘属性 + + **PHostCPUSet** + + - **CoreCount** (int) - CPU核数 + - **Count** (int) - CPU个数 + - **Frequence** (float) - CPU主频 + - **Model** (str) - CPU型号 + + **PHostIPSet** + + - **Bandwidth** (int) - IP对应带宽,单位Mb,内网IP不显示带宽信息 + - **IPAddr** (str) - IP地址, + - **IPId** (str) - IP资源ID(内网IP无资源ID)(待废弃) + - **MACAddr** (str) - MAC地址 + - **OperatorName** (str) - 国际: Internation, BGP: BGP, 内网: Private + - **SubnetId** (str) - 子网ID + - **VPCId** (str) - VPC ID + + **PHostSet** + + - **AutoRenew** (str) - 自动续费 + - **CPUSet** (list) - 见 **PHostCPUSet** 模型定义 + - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限)默认为月付 + - **Cluster** (str) - 网络环境。枚举值:千兆:1G ,万兆:10G + - **Components** (str) - 组件信息(暂不支持) + - **CreateTime** (int) - 创建时间 + - **DiskSet** (list) - 见 **PHostDiskSet** 模型定义 + - **ExpireTime** (int) - 到期时间 + - **IPSet** (list) - 见 **PHostIPSet** 模型定义 + - **ImageName** (str) - 镜像名称 + - **IsSupportKVM** (str) - 是否支持紧急登录 + - **Memory** (int) - 内存大小,单位:MB + - **Name** (str) - 物理机名称 + - **OSType** (str) - 操作系统类型 + - **OSname** (str) - 操作系统名称 + - **PHostId** (str) - PHost资源ID + - **PHostType** (str) - 物理机类型,参见DescribePHostMachineType返回值 + - **PMStatus** (str) - 物理云主机状态。枚举值:\\ > 初始化:Initializing; \\ > 启动中:Starting; \\ > 运行中:Running;\\ > 关机中:Stopping; \\ > 安装失败:InstallFailed; \\ > 重启中:Rebooting;\\ > 关机:Stopped; + - **PowerState** (str) - 电源状态,on 或 off + - **RaidSupported** (str) - 是否支持Raid。枚举值:Yes:支持;No:不支持。 + - **Remark** (str) - 物理机备注 + - **SN** (str) - 物理机序列号 + - **Tag** (str) - 业务组 + - **Zone** (str) - 可用区,参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribePHostRequestSchema().dumps(d) + resp = self.invoke("DescribePHost", d, **kwargs) + return apis.DescribePHostResponseSchema().loads(resp)
+ +
[docs] def describe_phost_image(self, req=None, **kwargs): + """ DescribePHostImage - 获取物理云主机镜像列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (list) - 镜像ID + - **ImageType** (str) - 镜像类别,枚举为:Base,标准镜像;默认为标准镜像。 + - **Limit** (int) - 返回数据长度,默认为20 + - **Offset** (int) - 数据偏移量,默认为0 + + **Response** + + - **ImageSet** (list) - 见 **PHostImageSet** 模型定义 + - **TotalCount** (int) - 满足条件的镜像总数 + + **Response Model** + + **PHostImageSet** + + - **ImageId** (str) - 镜像ID + - **ImageName** (str) - 镜像名称 + - **OsName** (str) - 操作系统名称 + - **OsType** (str) - 操作系统类型 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribePHostImageRequestSchema().dumps(d) + resp = self.invoke("DescribePHostImage", d, **kwargs) + return apis.DescribePHostImageResponseSchema().loads(resp)
+ +
[docs] def describe_phost_tags(self, req=None, **kwargs): + """ DescribePHostTags - 获取物理机tag列表(业务组) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **TagSet** (list) - 见 **PHostTagSet** 模型定义 + - **TotalCount** (int) - Tag的个数 + + **Response Model** + + **PHostTagSet** + + - **Tag** (str) - 业务组名称 + - **TotalCount** (int) - 该业务组中包含的主机个数 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribePHostTagsRequestSchema().dumps(d) + resp = self.invoke("DescribePHostTags", d, **kwargs) + return apis.DescribePHostTagsResponseSchema().loads(resp)
+ +
[docs] def get_phost_price(self, req=None, **kwargs): + """ GetPHostPrice - 获取物理机价格列表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ChargeType** (str) - (Required) 计费模式,枚举值为: Year/Month/Trial/Dynamic + - **Count** (int) - (Required) 购买数量,范围[1-5] + - **Quantity** (int) - (Required) 购买时长,1-10个月或1-10年 + - **Cluster** (str) - 网络环境,可选千兆:1G ,万兆:10G + - **Type** (str) - 默认为:DB(数据库型) + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PriceSet** (list) - 见 **PHostPriceSet** 模型定义 + + **Response Model** + + **PHostPriceSet** + + - **ChargeType** (str) - Year/Month/Trial/Dynamic + - **Price** (float) - 价格, 单位:元, 保留小数点后两位有效数字 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetPHostPriceRequestSchema().dumps(d) + resp = self.invoke("GetPHostPrice", d, **kwargs) + return apis.GetPHostPriceResponseSchema().loads(resp)
+ +
[docs] def modify_phost_info(self, req=None, **kwargs): + """ ModifyPHostInfo - 更改物理机信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) 物理机资源ID + - **Name** (str) - 物理机名称,默认不更改 + - **Remark** (str) - 物理机备注,默认不更改 + - **Tag** (str) - 业务组,默认不更改 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyPHostInfoRequestSchema().dumps(d) + resp = self.invoke("ModifyPHostInfo", d, **kwargs) + return apis.ModifyPHostInfoResponseSchema().loads(resp)
+ +
[docs] def poweroff_phost(self, req=None, **kwargs): + """ PoweroffPHost - 断电物理云主机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.PoweroffPHostRequestSchema().dumps(d) + resp = self.invoke("PoweroffPHost", d, **kwargs) + return apis.PoweroffPHostResponseSchema().loads(resp)
+ +
[docs] def reboot_phost(self, req=None, **kwargs): + """ RebootPHost - 重启物理机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.RebootPHostRequestSchema().dumps(d) + resp = self.invoke("RebootPHost", d, **kwargs) + return apis.RebootPHostResponseSchema().loads(resp)
+ +
[docs] def reinstall_phost(self, req=None, **kwargs): + """ ReinstallPHost - 重装物理机操作系统 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Password** (str) - (Required) 密码 + - **Zone** (str) - (Required) 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **ImageId** (str) - 镜像Id,参考镜像列表,默认使用原镜像 + - **Name** (str) - 物理机名称,默认不更改 + - **Raid** (str) - 不保留数据盘重装,可选Raid + - **Remark** (str) - 物理机备注,默认为不更改。 + - **ReserveDisk** (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes + - **Tag** (str) - 业务组,默认不更改。 + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ReinstallPHostRequestSchema().dumps(d) + resp = self.invoke("ReinstallPHost", d, **kwargs) + return apis.ReinstallPHostResponseSchema().loads(resp)
+ +
[docs] def start_phost(self, req=None, **kwargs): + """ StartPHost - 启动物理机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.StartPHostRequestSchema().dumps(d) + resp = self.invoke("StartPHost", d, **kwargs) + return apis.StartPHostResponseSchema().loads(resp)
+ +
[docs] def terminate_phost(self, req=None, **kwargs): + """ TerminatePHost - 删除物理云主机 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PHostId** (str) - (Required) PHost资源ID + - **ReleaseEIP** (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **PHostId** (str) - PHost 的资源ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.TerminatePHostRequestSchema().dumps(d) + resp = self.invoke("TerminatePHost", d, **kwargs) + return apis.TerminatePHostResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/usms/client.html b/docs/build/html/_modules/ucloud/services/usms/client.html new file mode 100644 index 0000000..cfdd22d --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/usms/client.html @@ -0,0 +1,385 @@ + + + + + + + + ucloud.services.usms.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.usms.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.usms.schemas import apis
+
+
+
[docs]class USMSClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(USMSClient, self).__init__(config, transport, middleware, logger) + +
[docs] def create_usms_signature(self, req=None, **kwargs): + """ CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **CertificateType** (int) - (Required) 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书; + - **Description** (str) - (Required) 短信签名申请原因 + - **File** (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB + - **SigContent** (str) - (Required) 短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加 + - **SigPurpose** (int) - (Required) 签名用途,0-自用,1-他用; + - **SigType** (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称; + - **ProxyFile** (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项; + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + - **SigContent** (str) - 短信签名名称 + - **SigId** (str) - 短信签名ID(短信签名申请时的工单ID) + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.CreateUSMSSignatureRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUSMSSignature", d, **kwargs) + return apis.CreateUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def create_usms_template(self, req=None, **kwargs): + """ CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Purpose** (int) - (Required) 短信模板用途类型:1-验证码类短信模板;2-系统通知类短信模板;3-会员推广类短信模板; + - **Template** (str) - (Required) 短信模板内容,说明如下:字数不超过500,每个中文、符号、英文、数组等都计为一个字;模板中的变量填写格式:{N},其中N为大于1的整数,有多个参数时,建议N从1开始顺次,例如:{1}、{2}等;短信模板禁止仅包括变量的情况; + - **TemplateName** (str) - (Required) 短信模板名称,不超过32个字符,每个中文、符号、英文、数字等都计为1个字。 + - **Remark** (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。 + - **UnsubscribeInfo** (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + - **TemplateId** (str) - 短信模板ID(短信模板申请时的工单ID) + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateUSMSTemplateRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateUSMSTemplate", d, **kwargs) + return apis.CreateUSMSTemplateResponseSchema().loads(resp)
+ +
[docs] def delete_usms_signature(self, req=None, **kwargs): + """ DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **SigIds** (list) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1...SigIds.N方式传入 + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.DeleteUSMSSignatureRequestSchema().dumps(d) + resp = self.invoke("DeleteUSMSSignature", d, **kwargs) + return apis.DeleteUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def delete_usms_template(self, req=None, **kwargs): + """ DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **TemplateIds** (list) - (Required) 模板ID(也即短信模板申请时的工单ID),支持以数组的方式,举例,以TemplateIds.0、TemplateIds.1...TemplateIds.N方式传入 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteUSMSTemplateRequestSchema().dumps(d) + resp = self.invoke("DeleteUSMSTemplate", d, **kwargs) + return apis.DeleteUSMSTemplateResponseSchema().loads(resp)
+ +
[docs] def get_usms_send_receipt(self, req=None, **kwargs): + """ GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SessionNoSet** (list) - (Required) 发送短信时返回的SessionNo集合,SessionNoSet.0,SessionNoSet.1....格式 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Data** (list) - 见 **ReceiptPerSession** 模型定义 + - **Message** (str) - 错误描述 + + **Response Model** + + **ReceiptPerPhone** + + - **CostCount** (int) - 消耗短信条数 + - **Phone** (str) - 手机号码 + - **ReceiptDesc** (str) - 回执结果描述 + - **ReceiptResult** (str) - 回执结果 + - **ReceiptTime** (int) - 回执返回时间 + + **ReceiptPerSession** + + - **ReceiptSet** (list) - 见 **ReceiptPerPhone** 模型定义 + - **SessionNo** (str) - 发送短信时返回的SessionNo + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.GetUSMSSendReceiptRequestSchema().dumps(d) + resp = self.invoke("GetUSMSSendReceipt", d, **kwargs) + return apis.GetUSMSSendReceiptResponseSchema().loads(resp)
+ +
[docs] def query_usms_signature(self, req=None, **kwargs): + """ QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **SigContent** (str) - 签名内容;签名ID和签名至少需填写1项; + - **SigId** (str) - 已申请的短信签名ID(短信签名申请时的工单ID);签名ID和签名至少需填写1项; + + **Response** + + - **Data** (dict) - 见 **OutSignature** 模型定义 + - **Message** (str) - 发生错误时,表示具体错误描述 + + **Response Model** + + **OutSignature** + + - **ErrDesc** (str) - 签名审核失败原因 + - **SigContent** (str) - 签名内容 + - **SigId** (str) - 签名ID + - **Status** (int) - 签名状态。0-待审核 1-审核中 2-审核通过 3-审核未通过 4-被禁用 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.QueryUSMSSignatureRequestSchema().dumps(d) + resp = self.invoke("QueryUSMSSignature", d, **kwargs) + return apis.QueryUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def query_usms_template(self, req=None, **kwargs): + """ QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **TemplateId** (str) - (Required) 模板ID + + **Response** + + - **Data** (dict) - 见 **OutTemplate** 模型定义 + - **Message** (str) - 当RetCode不为0时,Message中显示具体错误描述 + + **Response Model** + + **OutTemplate** + + - **CreateTime** (int) - 创建时间 + - **ErrDesc** (str) - 审核失败原因 + - **Purpose** (int) - 模板类型,选项:1-验证码类 2-通知类 3-会员推广类 + - **Remark** (str) - 模板说明 + - **Status** (int) - 短信模板状态;状态说明:0-待审核,1-审核中,2-审核通过,3-审核未通过,4-被禁用 + - **Template** (str) - 短信模板内容 + - **TemplateId** (str) - 短信模板ID + - **TemplateName** (str) - 短信模板名称 + - **UnsubscribeInfo** (str) - 退订信息;一般填写方式“回T退订”,当purpose为3(也即会员推广类)时,为必填项 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.QueryUSMSTemplateRequestSchema().dumps(d) + resp = self.invoke("QueryUSMSTemplate", d, **kwargs) + return apis.QueryUSMSTemplateResponseSchema().loads(resp)
+ +
[docs] def send_usms_message(self, req=None, **kwargs): + """ SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **PhoneNumbers** (list) - (Required) 电话号码数组,电话号码格式为(60)1xxxxxxxx,()中为国际长途区号(如中国为86或0086,两种格式都支持),后面为电话号码.若不传入国际区号,如1851623xxxx,则默认为国内手机号 + - **TemplateId** (str) - (Required) 模板ID。若指定的模板ID审核未通过(status不等于2)则不允许发送 + - **TemplateParams** (list) - (Required) 模板参数数组,以TempalteParams.0,TempalteParams.1.。。格式。若模板ID指定的模板无可变参数,则不传入该参数。模板参数个数与模板不匹配,则不允许发送 + - **SigContent** (str) - 使用的签名,如果不输入则使用默认签名,若没有申请默认签名不允许发送;若输入的签名没有申请,则无法发送 + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Action** (str) - 操作名称 + - **Message** (str) - 发生错误时表示错误描述 + - **RetCode** (int) - 返回码 + - **SessionNo** (str) - 本次提交发送的短信的唯一ID,可根据该值查询本次发送的短信列表 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.SendUSMSMessageRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("SendUSMSMessage", d, **kwargs) + return apis.SendUSMSMessageResponseSchema().loads(resp)
+ +
[docs] def update_usms_signature(self, req=None, **kwargs): + """ UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **File** (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB + - **SigContent** (str) - (Required) 新的短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加 + - **SigId** (str) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1...SigIds.N方式传入 + - **SigPurpose** (int) - (Required) 签名用途,0-自用,1-他用; + - **SigType** (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称; + - **CertificateType** (int) - 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书; + - **ProxyFile** (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项; + + **Response** + + - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 + + """ + d = {"ProjectId": self.config.project_id} + req and d.update(req) + d = apis.UpdateUSMSSignatureRequestSchema().dumps(d) + resp = self.invoke("UpdateUSMSSignature", d, **kwargs) + return apis.UpdateUSMSSignatureResponseSchema().loads(resp)
+ +
[docs] def update_usms_template(self, req=None, **kwargs): + """ UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Template** (str) - (Required) 新的模板内容。模板名称和模板内容必须提供一个,否则会报错。小于等于600个字 + - **TemplateId** (str) - (Required) 短信模板ID + - **Remark** (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。 + - **TemplateName** (str) - 新的模板名称。小于等于32个字,每个中文、英文、数组、符合都计为一个字 + - **UnsubscribeInfo** (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T + - **Zone** (str) - 可用区。参见 `可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + + **Response** + + - **Message** (str) - 发生错误时表示错误描述 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateUSMSTemplateRequestSchema().dumps(d) + resp = self.invoke("UpdateUSMSTemplate", d, **kwargs) + return apis.UpdateUSMSTemplateResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/_modules/ucloud/services/vpc/client.html b/docs/build/html/_modules/ucloud/services/vpc/client.html new file mode 100644 index 0000000..72f3dcc --- /dev/null +++ b/docs/build/html/_modules/ucloud/services/vpc/client.html @@ -0,0 +1,643 @@ + + + + + + + + ucloud.services.vpc.client — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for ucloud.services.vpc.client

+# -*- coding: utf-8 -*-
+
+""" Code is generated by ucloud-model, DO NOT EDIT IT. """
+from ucloud.core.client import Client
+from ucloud.services.vpc.schemas import apis
+
+
+
[docs]class VPCClient(Client): + def __init__(self, config, transport=None, middleware=None, logger=None): + super(VPCClient, self).__init__(config, transport, middleware, logger) + +
[docs] def add_vpc_network(self, req=None, **kwargs): + """ AddVPCNetwork - 添加VPC网段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Network** (list) - (Required) 增加网段 + - **VPCId** (str) - (Required) 源VPC短ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AddVPCNetworkRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("AddVPCNetwork", d, **kwargs) + return apis.AddVPCNetworkResponseSchema().loads(resp)
+ +
[docs] def associate_route_table(self, req=None, **kwargs): + """ AssociateRouteTable - 绑定子网的路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 路由表ID,仅限自定义路由表 + - **SubnetId** (str) - (Required) 子网ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.AssociateRouteTableRequestSchema().dumps(d) + resp = self.invoke("AssociateRouteTable", d, **kwargs) + return apis.AssociateRouteTableResponseSchema().loads(resp)
+ +
[docs] def clone_route_table(self, req=None, **kwargs): + """ CloneRouteTable - 根据一张现有路由表复制一张新的路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 被克隆的路由表ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CloneRouteTableRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CloneRouteTable", d, **kwargs) + return apis.CloneRouteTableResponseSchema().loads(resp)
+ +
[docs] def create_route_table(self, req=None, **kwargs): + """ CreateRouteTable - 创建路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VPCId** (str) - (Required) VPC ID + - **Name** (str) - 路由表名称 Default RouteTable + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组 + + **Response** + + - **RouteTableId** (str) - 路由表ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateRouteTableRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateRouteTable", d, **kwargs) + return apis.CreateRouteTableResponseSchema().loads(resp)
+ +
[docs] def create_subnet(self, req=None, **kwargs): + """ CreateSubnet - 创建子网 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Subnet** (str) - (Required) 子网网络地址,例如192.168.0.0 + - **VPCId** (str) - (Required) VPC资源ID + - **Netmask** (int) - 子网网络号位数,默认为24 + - **Remark** (str) - 备注 + - **SubnetName** (str) - 子网名称,默认为Subnet + - **Tag** (str) - 业务组名称,默认为Default + + **Response** + + - **SubnetId** (str) - 子网ID + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateSubnetRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateSubnet", d, **kwargs) + return apis.CreateSubnetResponseSchema().loads(resp)
+ +
[docs] def create_vpc(self, req=None, **kwargs): + """ CreateVPC - 创建VPC + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Name** (str) - (Required) VPC名称 + - **Network** (list) - (Required) VPC网段 + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组名称 + - **Type** (int) - VPC类型 + + **Response** + + - **VPCId** (str) - VPC资源Id + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateVPCRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateVPC", d, **kwargs) + return apis.CreateVPCResponseSchema().loads(resp)
+ +
[docs] def create_vpc_intercom(self, req=None, **kwargs): + """ CreateVPCIntercom - 新建VPC互通关系 + + **Request** + + - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DstVPCId** (str) - (Required) 目的VPC短ID + - **VPCId** (str) - (Required) 源VPC短ID + - **DstProjectId** (str) - 目的VPC项目ID。默认与源VPC同项目。 + - **DstRegion** (str) - 目的VPC所在地域,默认与源VPC同地域。 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.CreateVPCIntercomRequestSchema().dumps(d) + kwargs["max_retries"] = 0 + resp = self.invoke("CreateVPCIntercom", d, **kwargs) + return apis.CreateVPCIntercomResponseSchema().loads(resp)
+ +
[docs] def delete_route_table(self, req=None, **kwargs): + """ DeleteRouteTable - 删除自定义路由表 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 路由ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteRouteTableRequestSchema().dumps(d) + resp = self.invoke("DeleteRouteTable", d, **kwargs) + return apis.DeleteRouteTableResponseSchema().loads(resp)
+ +
[docs] def delete_subnet(self, req=None, **kwargs): + """ DeleteSubnet - 删除子网 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SubnetId** (str) - (Required) 子网ID + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteSubnetRequestSchema().dumps(d) + resp = self.invoke("DeleteSubnet", d, **kwargs) + return apis.DeleteSubnetResponseSchema().loads(resp)
+ +
[docs] def delete_vpc(self, req=None, **kwargs): + """ DeleteVPC - 删除VPC + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VPCId** (str) - (Required) VPC资源Id + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteVPCRequestSchema().dumps(d) + resp = self.invoke("DeleteVPC", d, **kwargs) + return apis.DeleteVPCResponseSchema().loads(resp)
+ +
[docs] def delete_vpc_intercom(self, req=None, **kwargs): + """ DeleteVPCIntercom - 删除VPC互通关系 + + **Request** + + - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **DstVPCId** (str) - (Required) 目的VPC短ID + - **VPCId** (str) - (Required) 源VPC短ID + - **DstProjectId** (str) - 目的VPC所在项目ID,默认为源VPC所在项目ID + - **DstRegion** (str) - 目的VPC所在地域,默认为源VPC所在地域 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DeleteVPCIntercomRequestSchema().dumps(d) + resp = self.invoke("DeleteVPCIntercom", d, **kwargs) + return apis.DeleteVPCIntercomResponseSchema().loads(resp)
+ +
[docs] def describe_route_table(self, req=None, **kwargs): + """ DescribeRouteTable - 获取路由表详细信息(包括路由策略) + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - 业务组ID + - **Limit** (int) - Limit + - **OffSet** (int) - OffSet + - **RouteTableId** (str) - 路由表ID + - **VPCId** (str) - VPC ID + + **Response** + + - **RouteTables** (list) - 见 **RouteTableInfo** 模型定义 + - **TotalCount** (int) - RouteTables字段的数量 + + **Response Model** + + **RouteRuleInfo** + + - **DstAddr** (str) - 目的地址,比如10.10.8/24 + - **NexthopId** (str) - 路由下一跳ID,比如uvnet-3eljvj + - **NexthopType** (str) - 下一跳类型,比如local、vnet + - **Remark** (str) - 路由规则备注 + - **RouteRuleId** (str) - 规则ID + - **RuleType** (int) - 路由规则类型(0表示系统路由,1表示自定义路由) + + **RouteTableInfo** + + - **CreateTime** (int) - 创建时间戳 + - **Remark** (str) - 路由表备注 + - **RouteRules** (list) - 见 **RouteRuleInfo** 模型定义 + - **RouteTableId** (str) - 路由表ID + - **RouteTableType** (int) - 路由表类型,1为默认,0为自定义 + - **SubnetCount** (str) - 绑定了该路由表的子网数量 + - **Tag** (str) - 业务组 + - **VPCId** (str) - 路由表所属vpc + - **VPCName** (str) - vpc名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeRouteTableRequestSchema().dumps(d) + resp = self.invoke("DescribeRouteTable", d, **kwargs) + return apis.DescribeRouteTableResponseSchema().loads(resp)
+ +
[docs] def describe_subnet(self, req=None, **kwargs): + """ DescribeSubnet - 获取子网信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **BusinessId** (str) - 业务组 + - **Limit** (int) - 列表长度,默认为20 + - **Offset** (int) - 偏移量,默认为0 + - **RouteTableId** (str) - 路由表Id + - **SubnetId** (str) - 子网id,适用于一次查询一个子网信息 + - **SubnetIds** (list) - 子网id数组,适用于一次查询多个子网信息 + - **Tag** (str) - 业务组名称,默认为Default + - **VPCId** (str) - VPC资源id + + **Response** + + - **DataSet** (list) - 见 **SubnetInfo** 模型定义 + - **TotalCount** (int) - 子网总数量 + + **Response Model** + + **SubnetInfo** + + - **CreateTime** (int) - 创建时间 + - **Gateway** (str) - 子网网关 + - **HasNATGW** (bool) - 是否有natgw + - **IPv6Network** (str) - 子网关联的IPv6网段 + - **Netmask** (int) - 子网掩码 + - **OperatorName** (str) - 子网关联的IPv6网段所属运营商 + - **Remark** (str) - 备注 + - **RouteTableId** (str) - 路由表Id + - **Subnet** (str) - 子网网段 + - **SubnetId** (str) - 子网Id + - **SubnetName** (str) - 子网名称 + - **SubnetType** (int) - 子网类型 + - **Tag** (str) - 业务组 + - **VPCId** (str) - VPCId + - **VPCName** (str) - VPC名称 + - **Zone** (str) - 可用区名称 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeSubnetRequestSchema().dumps(d) + resp = self.invoke("DescribeSubnet", d, **kwargs) + return apis.DescribeSubnetResponseSchema().loads(resp)
+ +
[docs] def describe_subnet_resource(self, req=None, **kwargs): + """ DescribeSubnetResource - 展示子网资源 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SubnetId** (str) - (Required) 子网id + - **Limit** (int) - 单页返回数据长度,默认为20 + - **Offset** (int) - 列表起始位置偏移量,默认为0 + - **ResourceType** (str) - 资源类型,默认为全部资源类型。枚举值为:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP. + + **Response** + + - **DataSet** (list) - 见 **SubnetResource** 模型定义 + - **TotalCount** (int) - 总数 + + **Response Model** + + **SubnetResource** + + - **IP** (str) - 资源ip + - **IPv6Address** (str) - 资源的IPv6地址 + - **Name** (str) - 资源名称 + - **ResourceId** (str) - 资源Id + - **ResourceType** (str) - 资源类型。对应的资源类型:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP. + - **SubResourceId** (str) - 资源绑定的虚拟网卡的实例ID + - **SubResourceName** (str) - 资源绑定的虚拟网卡的实例名称 + - **SubResourceType** (str) - 资源绑定的虚拟网卡的类型 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeSubnetResourceRequestSchema().dumps(d) + resp = self.invoke("DescribeSubnetResource", d, **kwargs) + return apis.DescribeSubnetResourceResponseSchema().loads(resp)
+ +
[docs] def describe_vpc(self, req=None, **kwargs): + """ DescribeVPC - 获取VPC信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Limit** (int) - + - **Offset** (int) - + - **Tag** (str) - 业务组名称 + - **VPCIds** (list) - VPCId + + **Response** + + - **DataSet** (list) - 见 **VPCInfo** 模型定义 + + **Response Model** + + **VPCNetworkInfo** + + - **Network** (str) - vpc地址空间 + - **SubnetCount** (int) - 地址空间中子网数量 + + **VPCInfo** + + - **CreateTime** (int) - + - **IPv6Network** (str) - VPC关联的IPv6网段 + - **Name** (str) - + - **Network** (list) - + - **NetworkInfo** (list) - 见 **VPCNetworkInfo** 模型定义 + - **OperatorName** (str) - VPC关联的IPv6网段所属运营商 + - **SubnetCount** (int) - + - **Tag** (str) - + - **UpdateTime** (int) - + - **VPCId** (str) - VPCId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPCRequestSchema().dumps(d) + resp = self.invoke("DescribeVPC", d, **kwargs) + return apis.DescribeVPCResponseSchema().loads(resp)
+ +
[docs] def describe_vpc_intercom(self, req=None, **kwargs): + """ DescribeVPCIntercom - 获取VPC互通信息 + + **Request** + + - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **VPCId** (str) - (Required) VPC短ID + - **DstProjectId** (str) - 目的项目ID,默认为全部项目 + - **DstRegion** (str) - 目的VPC所在地域,默认为全部地域 + + **Response** + + - **DataSet** (list) - 见 **VPCIntercomInfo** 模型定义 + + **Response Model** + + **VPCIntercomInfo** + + - **DstRegion** (str) - 所属地域 + - **Name** (str) - VPC名字 + - **Network** (list) - VPC的地址空间 + - **ProjectId** (str) - 项目Id + - **Tag** (str) - 业务组(未分组显示为 Default) + - **VPCId** (str) - VPCId + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.DescribeVPCIntercomRequestSchema().dumps(d) + resp = self.invoke("DescribeVPCIntercom", d, **kwargs) + return apis.DescribeVPCIntercomResponseSchema().loads(resp)
+ +
[docs] def modify_route_rule(self, req=None, **kwargs): + """ ModifyRouteRule - 路由策略增、删、改 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteRule** (list) - (Required) 格式: RouteRuleId | 目的网段 | 下一跳类型 | 下一跳 |优先级| 备注 | 增、删、改标志 (下一跳类型为instance或者vip,下一跳为云主机id或者vip的id,优先级使用0,动作标志为add/delete/update) 。"添加"示例: test_id | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| add (添加的RouteRuleId填任意非空字符串) 。"删除"示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| delete (RouteRuleId来自DescribeRouteTable中) 。“修改”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-cjksa2 | 0 | Default Route Rule| update (RouteRuleId来自DescribeRouteTable中) + - **RouteTableId** (str) - (Required) 通过DescribeRouteTable拿到 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.ModifyRouteRuleRequestSchema().dumps(d) + resp = self.invoke("ModifyRouteRule", d, **kwargs) + return apis.ModifyRouteRuleResponseSchema().loads(resp)
+ +
[docs] def update_route_table_attribute(self, req=None, **kwargs): + """ UpdateRouteTableAttribute - 更新路由表基本信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **RouteTableId** (str) - (Required) 路由表ID + - **Name** (str) - 名称 + - **Remark** (str) - 备注 + - **Tag** (str) - 业务组名称 + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateRouteTableAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateRouteTableAttribute", d, **kwargs) + return apis.UpdateRouteTableAttributeResponseSchema().loads(resp)
+ +
[docs] def update_subnet_attribute(self, req=None, **kwargs): + """ UpdateSubnetAttribute - 更新子网信息 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **SubnetId** (str) - (Required) 子网ID + - **Name** (str) - 子网名称(如果Name不填写,Tag必须填写) + - **Tag** (str) - 业务组名称(如果Tag不填写,Name必须填写) + + **Response** + + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateSubnetAttributeRequestSchema().dumps(d) + resp = self.invoke("UpdateSubnetAttribute", d, **kwargs) + return apis.UpdateSubnetAttributeResponseSchema().loads(resp)
+ +
[docs] def update_vpc_network(self, req=None, **kwargs): + """ UpdateVPCNetwork - 更新VPC网段 + + **Request** + + - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 <https://docs.ucloud.cn/api/summary/get_project_list.html>`_ + - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 <https://docs.ucloud.cn/api/summary/regionlist.html>`_ + - **Network** (list) - (Required) 需要保留的VPC网段。当前仅支持删除VPC网段,添加网段请参考 `AddVPCNetwork <https://docs.ucloud.cn/api/vpc2.0-api/add_vpc_network>`_ + - **VPCId** (str) - (Required) VPC的ID + + **Response** + + - **Message** (str) - 错误信息 + + """ + d = {"ProjectId": self.config.project_id, "Region": self.config.region} + req and d.update(req) + d = apis.UpdateVPCNetworkRequestSchema().dumps(d) + resp = self.invoke("UpdateVPCNetwork", d, **kwargs) + return apis.UpdateVPCNetworkResponseSchema().loads(resp)
+
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/scripts/__init__.py b/docs/build/html/_sources/contents.rst.txt similarity index 100% rename from scripts/__init__.py rename to docs/build/html/_sources/contents.rst.txt diff --git a/docs/build/html/_sources/core.rst.txt b/docs/build/html/_sources/core.rst.txt new file mode 100644 index 0000000..e6545e5 --- /dev/null +++ b/docs/build/html/_sources/core.rst.txt @@ -0,0 +1,35 @@ +Core +==== + +Config +------ + +.. autoclass:: ucloud.core.auth.Credential + :members: + +.. autoclass:: ucloud.core.client.Config + :members: + +Client +------ + +.. autoclass:: ucloud.core.client.Client + :members: + +Transport +--------- + +.. autoclass:: ucloud.core.transport.RequestsTransport + :members: + +Middleware +---------- + +.. autoclass:: ucloud.core.utils.middleware.Middleware + :members: + +Testing +------- + +.. automodule:: ucloud.core.testing.env + :members: diff --git a/docs/build/html/_sources/helpers.rst.txt b/docs/build/html/_sources/helpers.rst.txt new file mode 100644 index 0000000..e8192e1 --- /dev/null +++ b/docs/build/html/_sources/helpers.rst.txt @@ -0,0 +1,13 @@ +Helpers +======= + +Wait Resource State +------------------- + +.. autofunction:: ucloud.helpers.wait.wait_for_state + +Utilities +--------- + +.. automodule:: ucloud.helpers.utils + :members: diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt new file mode 100644 index 0000000..d04eaf0 --- /dev/null +++ b/docs/build/html/_sources/index.rst.txt @@ -0,0 +1,56 @@ +UCloud SDK Python 2 +=================== + +UCloud SDK is a Python client library for accessing the UCloud API. + +This client can run on Linux, macOS and Windows. + +- Website: https://www.ucloud.cn/ +- Free software: Apache 2.0 license +- `Documentation `_ + +.. image:: https://img.shields.io/pypi/v/ucloud-sdk-python2.svg + :target: https://pypi.python.org/pypi/ucloud-sdk-python2/ + :alt: Latest Version +.. image:: https://travis-ci.org/ucloud/ucloud-sdk-python2.svg?branch=master + :target: https://travis-ci.org/ucloud/ucloud-sdk-python2 + :alt: Travis CI Status +.. image:: https://codecov.io/github/ucloud/ucloud-sdk-python2/coverage.svg?branch=master + :target: https://codecov.io/github/ucloud/ucloud-sdk-python2?branch=master + :alt: Codecov Status +.. image:: https://img.shields.io/badge/docs-passing-brightgreen.svg + :target: https://ucloud.github.io/ucloud-sdk-python2/ + :alt: Doc Status + +Guide +----- + +.. toctree:: + :maxdepth: 2 + + quick_start + usage + +.. include:: quick_start.rst + +API Reference +------------- + +.. toctree:: + :maxdepth: 2 + + services + helpers + core + +Indices and tables +------------------ + +* :ref:`genindex` +* :ref:`search` + +Feedback & Contribution +----------------------- + +- `Issue `_ +- `Pull Request `_ diff --git a/docs/build/html/_sources/quick_start.rst.txt b/docs/build/html/_sources/quick_start.rst.txt new file mode 100644 index 0000000..bfc0176 --- /dev/null +++ b/docs/build/html/_sources/quick_start.rst.txt @@ -0,0 +1,61 @@ +QuickStart +========== + +Installation +------------ + +Install with pip: + +.. code:: shell + + pip install ucloud-sdk-python2 + +Install with source code: + +.. code:: shell + + clone https://github.com/ucloud/ucloud-sdk-python2.git + cd ucloud-sdk-python2 + python setup.py install + +QuickStart +---------- + +Currently, user public key & private key is the only method of authenticating with the API. You could get your keys here: + +- `Key Generation `_ + +You can then use your keys to create a new client of uhost service: + +.. code-block:: python + + from ucloud.core import exc + from ucloud.client import Client + + client = Client({ + "region": "cn-bj2", + "project_id": "...", + "public_key": "...", + "private_key": "...", + }) + + try: + resp = client.uhost().create_uhost_instance({ + 'Name': 'sdk-python-quickstart', + 'Zone': image["zone"], + 'ImageId': image["image_id"], + 'LoginMode': "Password", + 'Password': utils.b64encode(utils.gen_password(20)), + 'CPU': 1, + 'Memory': 1, + 'Disks': [{ + 'Size': 10, + 'Type': 'CLOUD_SSD' + }], + }) + except exc.UCloudException as e: + print(e) + else: + print(resp) + +.. note:: UHost created above cannot be accessed via Internet unless an EIP is created and bind to the UHost. diff --git a/docs/build/html/_sources/services.rst.txt b/docs/build/html/_sources/services.rst.txt new file mode 100644 index 0000000..5084cdb --- /dev/null +++ b/docs/build/html/_sources/services.rst.txt @@ -0,0 +1,81 @@ +UCloud SDK Services +=================== + +PathX +----- + +.. autoclass:: ucloud.services.pathx.client.PathXClient + :members: + +StepFlow +-------- + +.. autoclass:: ucloud.services.stepflow.client.StepFlowClient + :members: + +UAccount +-------- + +.. autoclass:: ucloud.services.uaccount.client.UAccountClient + :members: + +UDB +--- + +.. autoclass:: ucloud.services.udb.client.UDBClient + :members: + +UDPN +---- + +.. autoclass:: ucloud.services.udpn.client.UDPNClient + :members: + +UDisk +----- + +.. autoclass:: ucloud.services.udisk.client.UDiskClient + :members: + +UHost +----- + +.. autoclass:: ucloud.services.uhost.client.UHostClient + :members: + +ULB +--- + +.. autoclass:: ucloud.services.ulb.client.ULBClient + :members: + +UMem +---- + +.. autoclass:: ucloud.services.umem.client.UMemClient + :members: + +UNet +---- + +.. autoclass:: ucloud.services.unet.client.UNetClient + :members: + +UPHost +------ + +.. autoclass:: ucloud.services.uphost.client.UPHostClient + :members: + +USMS +---- + +.. autoclass:: ucloud.services.usms.client.USMSClient + :members: + +VPC +--- + +.. autoclass:: ucloud.services.vpc.client.VPCClient + :members: + diff --git a/docs/build/html/_sources/usage.rst.txt b/docs/build/html/_sources/usage.rst.txt new file mode 100644 index 0000000..04986e5 --- /dev/null +++ b/docs/build/html/_sources/usage.rst.txt @@ -0,0 +1,96 @@ +Usage +===== + +Type System +----------- + +UCloud Python SDK has type system for runtime checking. + +For example: + +.. code-block:: python + + client.uhost().create_uhost_instance({ + 'CPU': "i am not a integer", + }) + +it will raise :class:`ValidationException` with invalid integer and some required field is miss matched. + +Wait State Changed +------------------ + +SDK also provide state waiter helper to improver usage experience. + +**When using it?** + +Waiter can wait for remote state is achieved to target state. such as, + +- create and wait for resource state is completed. +- invoke/start/stop a resource and wait for it is finished. +- custom retry policies and wait for retrying is finished. + +For example: + +.. code-block:: python + + def mget_uhost_states(uhost_ids): + resp = client.uhost().describe_uhost_instance({'UHostIds': uhost_ids}) + return [inst.get('State') for inst in resp.get('UHostSet')] + + # Stop all instances + for uhost_id in uhost_ids: + client.uhost().stop_uhost_instance({'UHostId': uhost_id}) + + # Wait all instances is stopped + wait.wait_for_state( + target=['stopped'], pending=['pending'], + timeout=300, # wait 5min + refresh=lambda: ( + 'stopped' if all([state == 'Stopped' for state in mget_uhost_states(uhost_ids)]) else 'pending' + ), + ) + + # Remove all instances + for uhost_id in uhost_ids: + client.uhost().terminate_uhost_instance({'UHostId': uhost_id}) + +By the default, waiter will use exponential back-off delay between twice request. +it will raise :class:`WaitTimeoutException` when timeout is reached. + +Client/Transport Middleware +--------------------------- + +UCloud SDK provide middleware feature to client or transport level request. + +It allowed to add custom logic into the lifecycle of request/response. + +For example: + +.. code-block:: python + + @client.middleware.request + def log_params(req): + print('[REQ]', req) + + @client.middleware.response + def log_response(resp): + print('[RESP]', resp) + + +or transport: + +.. code-block:: python + + from ucloud.core.transport import RequestsTransport + + transport = RequestsTransport() + + @transport.middleware.request + def log_request(req): + print('[REQ]', req) + + @transport.middleware.response + def log_response(resp): + print('[RESP]', resp) + + Client({'Region': 'cn-bj2'}, transport=transport) diff --git a/docs/build/html/_static/ajax-loader.gif b/docs/build/html/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/docs/build/html/_static/ajax-loader.gif differ diff --git a/docs/build/html/_static/alabaster.css b/docs/build/html/_static/alabaster.css new file mode 100644 index 0000000..0eddaeb --- /dev/null +++ b/docs/build/html/_static/alabaster.css @@ -0,0 +1,701 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css new file mode 100644 index 0000000..0807176 --- /dev/null +++ b/docs/build/html/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/build/html/_static/comment-bright.png b/docs/build/html/_static/comment-bright.png new file mode 100644 index 0000000..15e27ed Binary files /dev/null and b/docs/build/html/_static/comment-bright.png differ diff --git a/docs/build/html/_static/comment-close.png b/docs/build/html/_static/comment-close.png new file mode 100644 index 0000000..4d91bcf Binary files /dev/null and b/docs/build/html/_static/comment-close.png differ diff --git a/docs/build/html/_static/comment.png b/docs/build/html/_static/comment.png new file mode 100644 index 0000000..dfbc0cb Binary files /dev/null and b/docs/build/html/_static/comment.png differ diff --git a/docs/build/html/_static/custom.css b/docs/build/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/docs/build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js new file mode 100644 index 0000000..344db17 --- /dev/null +++ b/docs/build/html/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js new file mode 100644 index 0000000..d28647e --- /dev/null +++ b/docs/build/html/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/docs/build/html/_static/down-pressed.png b/docs/build/html/_static/down-pressed.png new file mode 100644 index 0000000..5756c8c Binary files /dev/null and b/docs/build/html/_static/down-pressed.png differ diff --git a/docs/build/html/_static/down.png b/docs/build/html/_static/down.png new file mode 100644 index 0000000..1b3bdad Binary files /dev/null and b/docs/build/html/_static/down.png differ diff --git a/docs/build/html/_static/file.png b/docs/build/html/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/docs/build/html/_static/file.png differ diff --git a/docs/build/html/_static/jquery-3.2.1.js b/docs/build/html/_static/jquery-3.2.1.js new file mode 100644 index 0000000..d2d8ca4 --- /dev/null +++ b/docs/build/html/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + +
+
+
+ + +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/core.html b/docs/build/html/core.html new file mode 100644 index 0000000..b50754f --- /dev/null +++ b/docs/build/html/core.html @@ -0,0 +1,325 @@ + + + + + + + + Core — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Core

+
+

Config

+
+
+class ucloud.core.auth.Credential(public_key, private_key, **kwargs)[source]
+

credential is the object to store credential information

+

the keys can be found on APIKey documentation

+

it can calculate signature for OpenAPI:

+
>>> cred = Credential('my_public_key', 'my_private_key')
+>>> cred.verify_ac({"foo": "bar"})
+'d4411ab30953fb0bbcb1e7313081f05e4e91a394'
+
+
+ +++ + + + +
Parameters:
    +
  • public_key
  • +
  • private_key
  • +
+
+
+ +
+
+class ucloud.core.client.Config(region, project_id=None, base_url='https://api.ucloud.cn', user_agent=None, timeout=30, max_retries=3, log_level=20, **kwargs)[source]
+

Config is the config of ucloud sdk, use for setting up

+ +++ + + + +
Parameters:
    +
  • region (str) – Region is the region of backend service, +See also Region list Documentation
  • +
  • project_id (str) – ProjectId is the unique identify of project, used for organize resources, +Most of resources should belong to a project. Sub-Account must have an project id. +See also Project list Documentation
  • +
  • base_url (str) – BaseUrl is the url of backend api
  • +
  • user_agent – UserAgent is an attribute for sdk client, used for distinguish who is using sdk. +See also User Agent +It will be appended to the end of sdk user-agent. +eg. “MyAPP/0.10.1” -> “Python/3.7.0 Python-SDK/0.1.0 MyAPP/0.10.1”
  • +
  • timeout (int) – Timeout is timeout for every request.
  • +
  • max_retries (int) – MaxRetries is the number of max retry times. +Set MaxRetries more than 0 to enable auto-retry for network and service availability problem +if auto-retry is enabled, it will enable default retry policy using exponential backoff.
  • +
  • log_level (int) – LogLevel is equal to builtin logging level, +if logLevel not be set, use INFO level as default.
  • +
+
+
+ +
+
+

Client

+
+
+class ucloud.core.client.Client(config, transport=None, middleware=None, logger=None)[source]
+
+
+invoke(action, args=None, **options)[source]
+

invoke will invoke the action with arguments data and options

+ +++ + + + + + +
Parameters:
    +
  • action (str) – the api action, like CreateUHostInstance
  • +
  • args (dict) – arguments of api(action), see doc: UCloud API Documentation
  • +
+
Returns:

+
+
+ +
+ +
+
+

Transport

+
+
+class ucloud.core.transport.RequestsTransport(max_retries=3, backoff_factor=0.3, status_forcelist=(500, 502, 504))[source]
+

transport is the implementation of http client, use for send a request and return a http response

+ +++ + + + +
Parameters:
    +
  • max_retries (int) – max retries is the max number of transport request when occur http error
  • +
  • backoff_factor (float) – backoff factor will calculate the backoff delay during retrying, +the backoff delay = {backoff factor} * (2 ^ ({number of total retries} - 1))
  • +
  • status_forcelist (tuple) – the status code list that could be retried
  • +
+
+
+
+middleware
+

the middleware object, see :mod:

+ +++ + + + +
Returns:the transport middleware
+
+ +
+
+send(req, **options)[source]
+

send request and return the response

+ +++ + + + + + +
Parameters:req – the full http request descriptor
Returns:the response of http request
+
+ +
+ +
+
+

Middleware

+
+
+class ucloud.core.utils.middleware.Middleware[source]
+

middleware is the object to store request/response handlers

+
>>> middleware = Middleware()
+
+
+

Add a request handler to prepare the request

+
>>> @middleware.request
+... def prepare(req):
+...     req['Region'] = 'cn-bj2'
+...     return req
+
+
+

Add a response handler to log the response detail

+
>>> @middleware.response
+... def logged(resp):
+...     print(resp)
+...     return resp
+
+
+
>>> len(middleware.request_handlers), len(middleware.response_handlers)
+(1, 1)
+
+
+
+
+request(handler, index=-1)[source]
+

request is the request handler register to add request handler.

+ +++ + + + + + +
Parameters:
    +
  • handler – request handler function, receive request object +and return a new request
  • +
  • index (int) – the position of request in the handler list, +default is append it to end
  • +
+
Returns:

+
+
+ +
+
+response(handler, index=-1)[source]
+

response is the response handler register to add response handler.

+ +++ + + + + + +
Parameters:
    +
  • handler – response handler function, receive response object +and return a new response
  • +
  • index (int) – the position of response in the handler list, +default is append it to end
  • +
+
Returns:

+
+
+ +
+ +
+
+

Testing

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html new file mode 100644 index 0000000..0183e87 --- /dev/null +++ b/docs/build/html/genindex.html @@ -0,0 +1,756 @@ + + + + + + + + + Index — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | I + | M + | P + | Q + | R + | S + | T + | U + | V + | W + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + +
+ +

F

+ + +
+ +

G

+ + + +
+ +

I

+ + + +
+ +

M

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + +
+ +

W

+ + +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/helpers.html b/docs/build/html/helpers.html new file mode 100644 index 0000000..2000d8a --- /dev/null +++ b/docs/build/html/helpers.html @@ -0,0 +1,207 @@ + + + + + + + + Helpers — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Helpers

+
+

Wait Resource State

+
+
+ucloud.helpers.wait.wait_for_state(pending, target, refresh, timeout, startup_delay=0, min_backoff_interval=0.1, max_backoff_interval=10)[source]
+

wait_for_state is a utilities function to wait the state return by refresh function achieve the specific state, +the generally usage is wait the cloud resource, such as uhost, udb … is +ready after created.

+
>>> wait_for_state(
+...     pending=["pending"],
+...     target=["running"],
+...     refresh=lambda: "running",
+...     timeout=0.5,
+... )
+
+
+ +++ + + + +
Parameters:
    +
  • pending – pending is the list of pending state, the state is returned by refresh function
  • +
  • target – target is the list of target state, it is usually the terminate state, eg. running and fail
  • +
  • refresh – the customized refresh function, expect no arguments and return a state
  • +
  • timeout – timeout is the total time to wait state is achieved
  • +
  • startup_delay – the time to wait before first refresh function is called
  • +
  • min_backoff_interval – the backoff time for first refresh interval
  • +
  • max_backoff_interval – the max backoff time for refresh interval
  • +
+
+
+ +
+
+

Utilities

+
+
+ucloud.helpers.utils.b64decode(s)[source]
+

base64 decode

+ +++ + + + + + +
Parameters:s (str) – base64 string
Returns:output string
+
+ +
+
+ucloud.helpers.utils.b64encode(s)[source]
+

base64 encode

+ +++ + + + + + +
Parameters:s (str) – input string
Returns:base64 string
+
+ +
+
+ucloud.helpers.utils.gen_password(n, lower_letters='abcdefghijklmnopqrstuvwxyz', upper_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ', number_letters='0123456789', special_letters='_', min_lower=1, min_upper=1, min_number=1, min_specials=1)[source]
+

generate password for any resource

+
>>> len(gen_password(20))
+20
+
+
+ +++ + + + + + +
Parameters:
    +
  • n (int) – password total length
  • +
  • lower_letters (str) – all lowercase letters
  • +
  • upper_letters (str) – all uppercase letters
  • +
  • number_letters (str) – all number letters
  • +
  • special_letters (str) – all special letters
  • +
  • min_lower (int) – minimal number of lowercase letters
  • +
  • min_upper (int) – minimal number of uppercase letters
  • +
  • min_number (int) – minimal number of number letters
  • +
  • min_specials (int) – minimal number of special letters
  • +
+
Returns:

+
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/index.html b/docs/build/html/index.html new file mode 100644 index 0000000..772a055 --- /dev/null +++ b/docs/build/html/index.html @@ -0,0 +1,241 @@ + + + + + + + + UCloud SDK Python 2 — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

UCloud SDK Python 2

+

UCloud SDK is a Python client library for accessing the UCloud API.

+

This client can run on Linux, macOS and Windows.

+ +Latest Version +Travis CI Status +Codecov Status +Doc Status + +
+
+

QuickStart

+
+

Installation

+

Install with pip:

+
pip install ucloud-sdk-python2
+
+
+

Install with source code:

+
clone https://github.com/ucloud/ucloud-sdk-python2.git
+cd ucloud-sdk-python2
+python setup.py install
+
+
+
+
+

QuickStart

+

Currently, user public key & private key is the only method of authenticating with the API. You could get your keys here:

+ +

You can then use your keys to create a new client of uhost service:

+
from ucloud.core import exc
+from ucloud.client import Client
+
+client = Client({
+    "region": "cn-bj2",
+    "project_id": "...",
+    "public_key": "...",
+    "private_key": "...",
+})
+
+try:
+    resp = client.uhost().create_uhost_instance({
+        'Name': 'sdk-python-quickstart',
+        'Zone': image["zone"],
+        'ImageId': image["image_id"],
+        'LoginMode': "Password",
+        'Password': utils.b64encode(utils.gen_password(20)),
+        'CPU': 1,
+        'Memory': 1,
+        'Disks': [{
+            'Size': 10,
+            'Type': 'CLOUD_SSD'
+        }],
+    })
+except exc.UCloudException as e:
+    print(e)
+else:
+    print(resp)
+
+
+
+

Note

+

UHost created above cannot be accessed via Internet unless an EIP is created and bind to the UHost.

+
+
+ +
+

Indices and tables

+ +
+
+

Feedback & Contribution

+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv new file mode 100644 index 0000000..3e18ca5 Binary files /dev/null and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html new file mode 100644 index 0000000..367e219 --- /dev/null +++ b/docs/build/html/py-modindex.html @@ -0,0 +1,124 @@ + + + + + + + + Python Module Index — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Python Module Index

+ +
+ u +
+ + + + + + + + + + +
 
+ u
+ ucloud +
    + ucloud.helpers.utils +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/quick_start.html b/docs/build/html/quick_start.html new file mode 100644 index 0000000..115be33 --- /dev/null +++ b/docs/build/html/quick_start.html @@ -0,0 +1,159 @@ + + + + + + + + QuickStart — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

QuickStart

+
+

Installation

+

Install with pip:

+
pip install ucloud-sdk-python2
+
+
+

Install with source code:

+
clone https://github.com/ucloud/ucloud-sdk-python2.git
+cd ucloud-sdk-python2
+python setup.py install
+
+
+
+
+

QuickStart

+

Currently, user public key & private key is the only method of authenticating with the API. You could get your keys here:

+ +

You can then use your keys to create a new client of uhost service:

+
from ucloud.core import exc
+from ucloud.client import Client
+
+client = Client({
+    "region": "cn-bj2",
+    "project_id": "...",
+    "public_key": "...",
+    "private_key": "...",
+})
+
+try:
+    resp = client.uhost().create_uhost_instance({
+        'Name': 'sdk-python-quickstart',
+        'Zone': image["zone"],
+        'ImageId': image["image_id"],
+        'LoginMode': "Password",
+        'Password': utils.b64encode(utils.gen_password(20)),
+        'CPU': 1,
+        'Memory': 1,
+        'Disks': [{
+            'Size': 10,
+            'Type': 'CLOUD_SSD'
+        }],
+    })
+except exc.UCloudException as e:
+    print(e)
+else:
+    print(resp)
+
+
+
+

Note

+

UHost created above cannot be accessed via Internet unless an EIP is created and bind to the UHost.

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/search.html b/docs/build/html/search.html new file mode 100644 index 0000000..4d9cd42 --- /dev/null +++ b/docs/build/html/search.html @@ -0,0 +1,117 @@ + + + + + + + + Search — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js new file mode 100644 index 0000000..3b6ebeb --- /dev/null +++ b/docs/build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["contents","core","helpers","index","quick_start","services","usage"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,"sphinx.ext.viewcode":1,sphinx:54},filenames:["contents.rst","core.rst","helpers.rst","index.rst","quick_start.rst","services.rst","usage.rst"],objects:{"ucloud.core.auth":{Credential:[1,0,1,""]},"ucloud.core.client":{Client:[1,0,1,""],Config:[1,0,1,""]},"ucloud.core.client.Client":{invoke:[1,1,1,""]},"ucloud.core.transport":{RequestsTransport:[1,0,1,""]},"ucloud.core.transport.RequestsTransport":{middleware:[1,2,1,""],send:[1,1,1,""]},"ucloud.core.utils.middleware":{Middleware:[1,0,1,""]},"ucloud.core.utils.middleware.Middleware":{request:[1,1,1,""],response:[1,1,1,""]},"ucloud.helpers":{utils:[2,3,0,"-"]},"ucloud.helpers.utils":{b64decode:[2,4,1,""],b64encode:[2,4,1,""],gen_password:[2,4,1,""]},"ucloud.helpers.wait":{wait_for_state:[2,4,1,""]},"ucloud.services.pathx.client":{PathXClient:[5,0,1,""]},"ucloud.services.pathx.client.PathXClient":{create_global_ssh_instance:[5,1,1,""],delete_global_ssh_instance:[5,1,1,""],describe_global_ssh_area:[5,1,1,""],describe_global_ssh_instance:[5,1,1,""],modify_global_ssh_port:[5,1,1,""],modify_global_ssh_remark:[5,1,1,""]},"ucloud.services.stepflow.client":{StepFlowClient:[5,0,1,""]},"ucloud.services.stepflow.client.StepFlowClient":{create_sf_workflow_from_template:[5,1,1,""],get_sf_workflow_template:[5,1,1,""]},"ucloud.services.uaccount.client":{UAccountClient:[5,0,1,""]},"ucloud.services.uaccount.client.UAccountClient":{create_project:[5,1,1,""],get_project_list:[5,1,1,""],get_region:[5,1,1,""],get_user_info:[5,1,1,""],modify_project:[5,1,1,""],terminate_project:[5,1,1,""]},"ucloud.services.udb.client":{UDBClient:[5,0,1,""]},"ucloud.services.udb.client.UDBClient":{backup_udb_instance:[5,1,1,""],backup_udb_instance_binlog:[5,1,1,""],backup_udb_instance_error_log:[5,1,1,""],backup_udb_instance_slow_log:[5,1,1,""],check_recover_udb_instance:[5,1,1,""],check_udb_instance_to_ha_allowance:[5,1,1,""],clear_udb_log:[5,1,1,""],create_udb_instance:[5,1,1,""],create_udb_instance_by_recovery:[5,1,1,""],create_udb_param_group:[5,1,1,""],create_udb_replication_instance:[5,1,1,""],create_udb_route_instance:[5,1,1,""],create_udb_slave:[5,1,1,""],delete_udb_backup:[5,1,1,""],delete_udb_instance:[5,1,1,""],delete_udb_log_package:[5,1,1,""],delete_udb_param_group:[5,1,1,""],describe_udb_backup:[5,1,1,""],describe_udb_backup_blacklist:[5,1,1,""],describe_udb_binlog_backup_url:[5,1,1,""],describe_udb_instance:[5,1,1,""],describe_udb_instance_backup_state:[5,1,1,""],describe_udb_instance_backup_url:[5,1,1,""],describe_udb_instance_binlog:[5,1,1,""],describe_udb_instance_binlog_backup_state:[5,1,1,""],describe_udb_instance_price:[5,1,1,""],describe_udb_instance_state:[5,1,1,""],describe_udb_instance_upgrade_price:[5,1,1,""],describe_udb_log_backup_url:[5,1,1,""],describe_udb_log_package:[5,1,1,""],describe_udb_param_group:[5,1,1,""],describe_udb_type:[5,1,1,""],edit_udb_backup_blacklist:[5,1,1,""],fetch_udb_instance_earliest_recover_time:[5,1,1,""],modify_udb_instance_name:[5,1,1,""],modify_udb_instance_password:[5,1,1,""],promote_udb_instance_to_ha:[5,1,1,""],promote_udb_slave:[5,1,1,""],resize_udb_instance:[5,1,1,""],restart_udb_instance:[5,1,1,""],start_udb_instance:[5,1,1,""],stop_udb_instance:[5,1,1,""],switch_udb_instance_to_ha:[5,1,1,""],update_udb_instance_backup_strategy:[5,1,1,""],update_udb_instance_slave_backup_switch:[5,1,1,""],update_udb_param_group:[5,1,1,""],upload_udb_param_group:[5,1,1,""]},"ucloud.services.udisk.client":{UDiskClient:[5,0,1,""]},"ucloud.services.udisk.client.UDiskClient":{attach_udisk:[5,1,1,""],clone_udisk:[5,1,1,""],clone_udisk_snapshot:[5,1,1,""],create_udisk:[5,1,1,""],create_udisk_snapshot:[5,1,1,""],delete_udisk:[5,1,1,""],delete_udisk_snapshot:[5,1,1,""],describe_udisk:[5,1,1,""],describe_udisk_price:[5,1,1,""],describe_udisk_snapshot:[5,1,1,""],describe_udisk_upgrade_price:[5,1,1,""],detach_udisk:[5,1,1,""],rename_udisk:[5,1,1,""],resize_udisk:[5,1,1,""],restore_udisk:[5,1,1,""],set_udisk__udataark_mode:[5,1,1,""]},"ucloud.services.udpn.client":{UDPNClient:[5,0,1,""]},"ucloud.services.udpn.client.UDPNClient":{allocate_udpn:[5,1,1,""],describe_udpn:[5,1,1,""],get_udpn_line_list:[5,1,1,""],get_udpn_price:[5,1,1,""],get_udpn_upgrade_price:[5,1,1,""],modify_udpn_bandwidth:[5,1,1,""],release_udpn:[5,1,1,""]},"ucloud.services.uhost.client":{UHostClient:[5,0,1,""]},"ucloud.services.uhost.client.UHostClient":{copy_custom_image:[5,1,1,""],create_custom_image:[5,1,1,""],create_uhost_instance:[5,1,1,""],describe_image:[5,1,1,""],describe_uhost_instance:[5,1,1,""],describe_uhost_tags:[5,1,1,""],get_uhost_instance_price:[5,1,1,""],get_uhost_instance_vnc_info:[5,1,1,""],get_uhost_upgrade_price:[5,1,1,""],import_custom_image:[5,1,1,""],modify_uhost_instance_name:[5,1,1,""],modify_uhost_instance_remark:[5,1,1,""],modify_uhost_instance_tag:[5,1,1,""],poweroff_uhost_instance:[5,1,1,""],reboot_uhost_instance:[5,1,1,""],reinstall_uhost_instance:[5,1,1,""],reset_uhost_instance_password:[5,1,1,""],resize_attached_disk:[5,1,1,""],resize_uhost_instance:[5,1,1,""],start_uhost_instance:[5,1,1,""],stop_uhost_instance:[5,1,1,""],terminate_custom_image:[5,1,1,""],terminate_uhost_instance:[5,1,1,""],upgrade_to_ark_uhost_instance:[5,1,1,""]},"ucloud.services.ulb.client":{ULBClient:[5,0,1,""]},"ucloud.services.ulb.client.ULBClient":{allocate_backend:[5,1,1,""],allocate_backend_batch:[5,1,1,""],bind_ssl:[5,1,1,""],create_policy:[5,1,1,""],create_ssl:[5,1,1,""],create_ulb:[5,1,1,""],create_vserver:[5,1,1,""],delete_policy:[5,1,1,""],delete_ssl:[5,1,1,""],delete_ulb:[5,1,1,""],delete_vserver:[5,1,1,""],describe_ssl:[5,1,1,""],describe_ulb:[5,1,1,""],describe_vserver:[5,1,1,""],release_backend:[5,1,1,""],unbind_ssl:[5,1,1,""],update_backend_attribute:[5,1,1,""],update_policy:[5,1,1,""],update_ulb_attribute:[5,1,1,""],update_vserver_attribute:[5,1,1,""]},"ucloud.services.umem.client":{UMemClient:[5,0,1,""]},"ucloud.services.umem.client.UMemClient":{create_umem_cache_group:[5,1,1,""],create_umem_space:[5,1,1,""],create_uredis_group:[5,1,1,""],delete_umem_cache_group:[5,1,1,""],delete_umem_space:[5,1,1,""],delete_uredis_group:[5,1,1,""],describe_umem_cache_group:[5,1,1,""],describe_umem_cache_price:[5,1,1,""],describe_umem_cache_upgrade_price:[5,1,1,""],describe_umem_price:[5,1,1,""],describe_umem_space:[5,1,1,""],describe_umem_upgrade_price:[5,1,1,""],describe_uredis_backup:[5,1,1,""],describe_uredis_backup_url:[5,1,1,""],describe_uredis_group:[5,1,1,""],describe_uredis_price:[5,1,1,""],describe_uredis_upgrade_price:[5,1,1,""],get_umem_space_state:[5,1,1,""],modify_umem_space_name:[5,1,1,""],modify_uredis_group_name:[5,1,1,""],resize_udredis_space:[5,1,1,""],resize_umem_space:[5,1,1,""],resize_uredis_group:[5,1,1,""],restart_umem_cache_group:[5,1,1,""]},"ucloud.services.unet.client":{UNetClient:[5,0,1,""]},"ucloud.services.unet.client.UNetClient":{allocate_eip:[5,1,1,""],allocate_share_bandwidth:[5,1,1,""],allocate_vip:[5,1,1,""],associate_eip_with_share_bandwidth:[5,1,1,""],bind_eip:[5,1,1,""],create_bandwidth_package:[5,1,1,""],create_firewall:[5,1,1,""],delete_bandwidth_package:[5,1,1,""],delete_firewall:[5,1,1,""],describe_bandwidth_package:[5,1,1,""],describe_bandwidth_usage:[5,1,1,""],describe_eip:[5,1,1,""],describe_firewall:[5,1,1,""],describe_firewall_resource:[5,1,1,""],describe_share_bandwidth:[5,1,1,""],describe_vip:[5,1,1,""],disassociate_eip_with_share_bandwidth:[5,1,1,""],get_eip_pay_mode:[5,1,1,""],get_eip_price:[5,1,1,""],get_eip_upgrade_price:[5,1,1,""],grant_firewall:[5,1,1,""],modify_eip_bandwidth:[5,1,1,""],modify_eip_weight:[5,1,1,""],release_eip:[5,1,1,""],release_share_bandwidth:[5,1,1,""],release_vip:[5,1,1,""],resize_share_bandwidth:[5,1,1,""],set_eip_pay_mode:[5,1,1,""],un_bind_eip:[5,1,1,""],update_eip_attribute:[5,1,1,""],update_firewall:[5,1,1,""],update_firewall_attribute:[5,1,1,""]},"ucloud.services.uphost.client":{UPHostClient:[5,0,1,""]},"ucloud.services.uphost.client.UPHostClient":{create_phost:[5,1,1,""],describe_phost:[5,1,1,""],describe_phost_image:[5,1,1,""],describe_phost_tags:[5,1,1,""],get_phost_price:[5,1,1,""],modify_phost_info:[5,1,1,""],poweroff_phost:[5,1,1,""],reboot_phost:[5,1,1,""],reinstall_phost:[5,1,1,""],start_phost:[5,1,1,""],terminate_phost:[5,1,1,""]},"ucloud.services.usms.client":{USMSClient:[5,0,1,""]},"ucloud.services.usms.client.USMSClient":{create_usms_signature:[5,1,1,""],create_usms_template:[5,1,1,""],delete_usms_signature:[5,1,1,""],delete_usms_template:[5,1,1,""],get_usms_send_receipt:[5,1,1,""],query_usms_signature:[5,1,1,""],query_usms_template:[5,1,1,""],send_usms_message:[5,1,1,""],update_usms_signature:[5,1,1,""],update_usms_template:[5,1,1,""]},"ucloud.services.vpc.client":{VPCClient:[5,0,1,""]},"ucloud.services.vpc.client.VPCClient":{add_vpc_network:[5,1,1,""],associate_route_table:[5,1,1,""],clone_route_table:[5,1,1,""],create_route_table:[5,1,1,""],create_subnet:[5,1,1,""],create_vpc:[5,1,1,""],create_vpc_intercom:[5,1,1,""],delete_route_table:[5,1,1,""],delete_subnet:[5,1,1,""],delete_vpc:[5,1,1,""],delete_vpc_intercom:[5,1,1,""],describe_route_table:[5,1,1,""],describe_subnet:[5,1,1,""],describe_subnet_resource:[5,1,1,""],describe_vpc:[5,1,1,""],describe_vpc_intercom:[5,1,1,""],modify_route_rule:[5,1,1,""],update_route_table_attribute:[5,1,1,""],update_subnet_attribute:[5,1,1,""],update_vpc_network:[5,1,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"],"3":["py","module","Python module"],"4":["py","function","Python function"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute","3":"py:module","4":"py:function"},terms:{"03f58ca9":5,"0\u4e0b\u9700\u8981\u586b\u5199\u6b64\u5b57\u6bb5":5,"0\u4e0d\u652f\u6301":5,"0\u4e0d\u8fd4\u56de":5,"0\u4e3a\u81ea\u5b9a\u4e49":5,"0\u4ee3\u8868\u5e0c\u671b\u5347\u7ea7\u7684\u4e3b\u673a1":5,"0\u4ee3\u8868\u5e0c\u671b\u83b7\u53d6\u4fe1\u606f":5,"0\u5065\u5eb7\u68c0\u67e5\u5065\u5eb7\u72b6\u6001":5,"0\u60c5\u51b5\u4e0b":5,"0\u60c5\u51b5\u4e0b\u65e0\u9700\u586b\u5199":5,"0\u70b91":5,"0\u7248\u672c\u914d\u7f6eid":5,"0\u8868\u793a\u4e0d\u53d8":5,"0\u8868\u793a\u4ece\u5e93\u5907\u4efd\u529f\u80fd\u5173\u95ed":5,"0\u8868\u793a\u5173\u95ed\u5f53\u5929\u5907\u4efd":5,"0\u8868\u793a\u6309\u7167\u539f\u6765\u7684\u903b\u8f91":5,"0\u8868\u793a\u7cfb\u7edf\u8def\u7531":5,"0\u8868\u793a\u81ea\u52a8":5,"1000m":5,"10\u4e2a\u6708\u62161":5,"10\u5206\u949f\u540e\u518d\u8c03\u7528\u8be5\u63a5\u53e3\u62c9\u53d6\u56de\u6267\u4fe1\u606f":5,"10\u5e74":5,"10g":5,"1100000\u8868\u793a\u6253\u5f00\u661f\u671f\u516d\u548c\u661f\u671f\u4e94\u7684\u5907\u4efd\u529f\u80fd":5,"12000m":5,"12\u4e2a\u5b57\u7b26":5,"15000m":5,"1500m":5,"16000m":5,"1\u4e3a\u9ed8\u8ba4":5,"1\u4ee3\u8868\u4e3b\u673a2":5,"1\u652f\u6301":5,"1\u70b9\u4f9d\u6b21\u7c7b\u63a8":5,"1\u8868\u793a\u624b\u52a8":5,"1\u8868\u793a\u6253\u5f00\u5f53\u5929\u5907\u4efd":5,"1\u8868\u793a\u76f4\u63a5\u5220\u9664":5,"1\u8868\u793a\u81ea\u5b9a\u4e49\u8def\u7531":5,"1\u8fd4\u56de":5,"1xxxxxxxx":5,"2000m":5,"24000m":5,"261d":5,"2\u7248\u672c\u914d\u7f6eid":5,"2\u8868\u793a\u964d\u7ea7":5,"30000m":5,"3000g":5,"3000m":5,"32000m":5,"32\u8fd9\u51e0\u6863":5,"3e45ac48":5,"3eljvj":5,"4000m":5,"428c":5,"443\u7aef\u53e3":5,"48000m":5,"4b66":5,"4bdd":5,"500g":5,"5\u53ca\u4ee5\u4e0a\u7248\u672c":5,"5\u7b49\u955c\u50cf\u4f1a\u6807\u8bb0\u4e3a":5,"5min":6,"6000m":5,"600m":5,"63\u4f4d":5,"64000m":5,"65535\u4e14\u4e0d\u80fd\u4f7f\u752880":5,"67e59430d67c":5,"6c9298a3":5,"8000m":5,"96000m":5,"9a891891":5,"9d7f":5,"\u4e00\u5929\u5185\u5907\u4efd\u65f6\u95f4\u95f4\u9694":5,"\u4e00\u81f4\u6027\u54c8\u5e0c":5,"\u4e00\u822c\u586b\u5199\u65b9\u5f0f":5,"\u4e07\u5146":5,"\u4e09\u8bc1\u5408\u4e00":5,"\u4e0a\u6d77\u4e00":5,"\u4e0a\u6d77\u4e8c":5,"\u4e0b\u4e00\u4e2aactivity\u7684\u540d\u5b57":5,"\u4e0b\u4e00\u8df3":5,"\u4e0b\u4e00\u8df3\u4e3a\u4e91\u4e3b\u673aid\u6216\u8005vip\u7684id":5,"\u4e0b\u4e00\u8df3\u7c7b\u578b":5,"\u4e0b\u4e00\u8df3\u7c7b\u578b\u4e3ainstance\u6216\u8005vip":5,"\u4e0b\u6e38\u670d\u52a1\u63d0\u4f9b\u5546\u56de\u6267\u4fe1\u606f\u8fd4\u56de\u4f1a\u6709\u4e00\u5b9a\u5ef6\u65f6":5,"\u4e0d\u4f1a\u5f71\u54cd\u521b\u5efa\u4e3b\u673a\u6d41\u7a0b":5,"\u4e0d\u4f20\u65f6\u8ba4\u4e3a\u4e0d\u4fee\u6539":5,"\u4e0d\u4f20\u65f6\u8ba4\u4e3a\u4e0d\u4fee\u6539\u540d\u5b57":5,"\u4e0d\u4f20\u83b7\u53d6\u9879\u76ee\u4e0b\u5168\u90e8\u5b9e\u4f8b":5,"\u4e0d\u4f20\u9ed8\u8ba4ipv4":5,"\u4e0d\u4fdd\u7559\u6570\u636e\u76d8\u91cd\u88c5":5,"\u4e0d\u5141\u8bb8\u591a\u70b9\u6302\u8f7d":5,"\u4e0d\u52a0\u5bc6":5,"\u4e0d\u533a\u5206\u5927\u5c0f\u5199":5,"\u4e0d\u53ef\u4fee\u6539":5,"\u4e0d\u53ef\u7528":5,"\u4e0d\u5728\u9694\u79bb\u7ec4\u5219\u8fd4\u56de":5,"\u4e0d\u586b\u4e3a\u9ed8\u8ba4":5,"\u4e0d\u586b\u5199\u4e3a\u9ed8\u8ba4\u9879\u76ee":5,"\u4e0d\u586b\u5219\u6309\u73b0\u5728\u5355\u70b9\u8ba1\u8d39\u6267\u884c":5,"\u4e0d\u586b\u65f6\u9ed8\u8ba4\u5168\u90e8\u53ef\u7528\u533a":5,"\u4e0d\u586b\u9ed8\u8ba4\u4e3a\u7a7a":5,"\u4e0d\u586b\u9ed8\u8ba4\u4e3a\u7a7a\u5b57\u7b26\u4e32":5,"\u4e0d\u586b\u9ed8\u8ba4ye":5,"\u4e0d\u5b89\u88c5":5,"\u4e0d\u5efa\u8bae\u8c03\u7528":5,"\u4e0d\u5f00\u542f":5,"\u4e0d\u62a5\u7559":5,"\u4e0d\u6307\u5b9a\u5219\u83b7\u53d6vpcid\u4e0b\u7684\u6240\u6709vip":5,"\u4e0d\u652f\u6301":5,"\u4e0d\u662f":5,"\u4e0d\u81ea\u52a8\u7eed\u8d39":5,"\u4e0d\u8d85\u8fc732\u4e2a\u5b57\u7b26":5,"\u4e0d\u8de8\u5730\u57df\u4e0d\u7528\u586b":5,"\u4e0d\u9002\u7528\u4e8e\u7cfb\u7edf\u76d8":5,"\u4e0d\u9700\u8981\u586b\u5199":5,"\u4e0d\u9700\u8981\u914d\u7f6einstancemod":5,"\u4e0e\u8d44\u6e90\u81ea\u8eabid\u65e0\u5173":5,"\u4e0ekey\u914d\u5408\u4f7f\u7528":5,"\u4e0evalue\u914d\u5408\u4f7f\u7528":5,"\u4e13\u533a\u7684id":5,"\u4e13\u533aid":5,"\u4e13\u533aid\u4fe1\u606f":5,"\u4e13\u7ebf":5,"\u4e13\u7ebf\u4ef7\u683c":5,"\u4e13\u7ebf\u53ef\u7528\u533a1":5,"\u4e13\u7ebf\u53ef\u7528\u533a2":5,"\u4e13\u7ebf\u5e26\u5bbd\u8d44\u6e90":5,"\u4e14\u4e0d\u53ef\u76f8\u540c":5,"\u4e14\u544a\u8b66\u6a21\u677fid\u6b63\u786e":5,"\u4e14\u5c0f\u4e8e\u7b49\u4e8e32":5,"\u4e1a\u52a1":5,"\u4e1a\u52a1\u7ec4":5,"\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u4e1a\u52a1\u7ec4id":5,"\u4e1c\u4eac":5,"\u4e24\u5957\u53c2\u6570\u53ef\u4ee5\u914d\u7f6e\u5347\u964d\u673a":5,"\u4e24\u79cd\u683c\u5f0f\u90fd\u652f\u6301":5,"\u4e2a":5,"\u4e2d":5,"\u4e2d\u4e3a\u56fd\u9645\u957f\u9014\u533a\u53f7":5,"\u4e3a":5,"\u4e3a1\u65f6disktype\u4e0euhost\u78c1\u76d8\u7c7b\u578b\u5b9a\u4e49\u4e00\u81f4":5,"\u4e3a\u5fc5\u586b\u9879":5,"\u4e3a\u6307\u5b9a\u5e93":5,"\u4e3a\u661f\u671f\u5929\u7684\u5907\u4efd\u5f00\u5173":5,"\u4e3a\u7a7a\u5219\u4e0d\u505a\u4fee\u6539":5,"\u4e3a\u7a7a\u62c9\u53d6\u6240\u6709":5,"\u4e3a\u975e\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f\u4e0b":5,"\u4e3amongodb\u65f6":5,"\u4e3aulb\u7cfb\u7edf\u4e2d\u4f7f\u7528":5,"\u4e3b\u4ece\u7ed3\u5bf9\u6570\u91cf":5,"\u4e3b\u5e93\u7684id":5,"\u4e3b\u673a\u4ee3\u91d1\u5238id":5,"\u4e3b\u673a\u767b\u9646\u6a21\u5f0f":5,"\u4e3b\u673a\u7684\u751f\u547d\u5468\u671f\u7c7b\u578b":5,"\u4e3b\u673a\u7684\u7cfb\u7edf\u76d8id":5,"\u4e3b\u673a\u78c1\u76d8\u7c7b\u578b":5,"\u4e3b\u673a\u7cfb\u5217":5,"\u4e3b\u673aid\u7b49\u53c2\u6570\u8fdb\u884c\u8fc7\u6ee4":5,"\u4e3b\u8282\u70b9\u7684id":5,"\u4e3e\u4f8b":5,"\u4e3e\u4f8b\u5982\u4e0b":5,"\u4e4b\u524dlog":5,"\u4e4b\u95f4\u7684\u6574\u6570":5,"\u4e5f\u4e0d\u4f1a\u5728\u524d\u7aef\u62a5\u9519":5,"\u4e5f\u5373\u4f1a\u5458\u63a8\u5e7f\u7c7b":5,"\u4e5f\u5373\u4f1a\u5458\u63a8\u5e7f\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u4e5f\u5373\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u4e5f\u5373\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u4e5f\u5373sigpurpose\u4e3a1":5,"\u4e702\u4e2a\u6708":5,"\u4e91\u4e3b\u673a":5,"\u4e91\u4e3b\u673a\u673a\u578b":5,"\u4e91\u4e3b\u673a\u673a\u578b\u8bf4\u660e":5,"\u4e91\u4e3b\u673a\u673a\u578bv1":5,"\u4e91\u707e\u5907":5,"\u4e91\u707e\u5907\u6307\u660e191":5,"\u4e91\u76d8":5,"\u4e91\u76d8\u4ee3\u91d1\u5238id":5,"\u4e91\u76d8\u652f\u63010":5,"\u4e91\u786c\u76d8":5,"\u4e91\u786c\u76d8\u7c7b\u578b\u53c2\u7167\u5982\u4e0b":5,"\u4e9a\u592a":5,"\u4ea7\u54c1\u7c7b\u578b":5,"\u4ec5\u5317\u4eaca\u7684\u4e91\u4e3b\u673a\u4f1a\u8fd4\u56de\u6b64\u5b57\u6bb5":5,"\u4ec5\u5728sqlserver\u7684\u60c5\u51b5\u4e0b\u586b\u8be5\u53c2\u6570":5,"\u4ec5\u5f53\u78c1\u76d8\u662fudisk\u65f6\u8fd4\u56de":5,"\u4ec5\u5f53\u8be5\u53ef\u7528\u533a\u652f\u6301\u8de8\u53ef\u7528\u533a\u9ad8\u53ef\u7528\u65f6\u586b\u5165":5,"\u4ec5\u5f53paymode\u4e3asharebandwidth\u65f6\u6709\u6548":5,"\u4ec5\u652f\u6301\u90e8\u5206\u53ef\u7528\u533a":5,"\u4ec5\u884c\u4e1a\u955c\u50cf\u5c06\u8fd4\u56de\u8fd9\u4e2a\u503c":5,"\u4ec5\u90e8\u5206\u53ef\u7528\u533a\u652f\u6301\u4e91\u786c\u76d8\u65b9\u5f0f\u7684\u4e3b\u673a\u5b58\u50a8\u65b9\u5f0f":5,"\u4ec5\u9650\u81ea\u5b9a\u4e49\u8def\u7531\u8868":5,"\u4ec5gpu\u673a\u578b\u652f\u6301\u6b64\u5b57\u6bb5":5,"\u4ecb\u7ecd\u94fe\u63a5":5,"\u4ecd\u5728\u521d\u59cb\u5316\u7684\u7cfb\u7edf\u76d8\u65e0\u6cd5\u5236\u4f5c\u955c\u50cf":5,"\u4ece\u5907\u4efd\u521b\u5efa\u4e3a\u5fc5\u4f20\u9879":5,"\u4ece\u5907\u4efd\u6062\u590d\u6570\u636e\u81f3udisk":5,"\u4ece\u5df2\u6709\u914d\u7f6e\u6587\u4ef6\u521b\u5efa\u65b0\u914d\u7f6e\u6587\u4ef6":5,"\u4ece\u5e93":5,"\u4ece\u5e93\u5b9e\u4f8b":5,"\u4ece\u5e93\u63d0\u5347\u4e3a\u72ec\u7acb\u5e93":5,"\u4ece\u5e93\u7684\u5907\u4efd\u5f00\u5173":5,"\u4ece\u5e93\u7684id":5,"\u4ece\u5feb\u7167\u521b\u5efaudisk\u514b\u9686":5,"\u4ece\u6307\u5b9a\u7684\u5feb\u7167\u6062\u590d":5,"\u4ece\u6307\u5b9auhost\u5b9e\u4f8b":5,"\u4eceudisk\u521b\u5efaudisk\u514b\u9686":5,"\u4ecevserver\u89e3\u7ed1ssl\u8bc1\u4e66":5,"\u4ecevserver\u91ca\u653e\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b":5,"\u4ed6\u7528":5,"\u4ed8\u8d39\u65b9\u5f0f":5,"\u4ee3\u8868\u4e86\u8d2d\u4e70\u81f3\u6708\u672b":5,"\u4ee3\u8868\u4f18\u5148\u9009\u62e9\u57fa\u7840\u7f51\u7edc":5,"\u4ee3\u8868\u610f\u4e49\u4e3a":5,"\u4ee3\u8868\u8d2d\u4e70\u81f3\u6708\u672b":5,"\u4ee3\u8868\u9009\u62e9\u5b50\u7f51":5,"\u4ee3\u8868http\u68c0\u67e5\u57df\u540d":5,"\u4ee3\u8868http\u68c0\u67e5\u8def\u5f84":5,"\u4ee3\u91d1\u5238":5,"\u4ee3\u91d1\u5238id":5,"\u4ee3\u91d1\u52b5":5,"\u4ee5":5,"\u4ee5\u5730\u533aairport":5,"\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d":5,"\u4ee5\u6b64\u7c7b\u63a8":5,"\u4ee5\u7a7a\u683c\u952e\u5206\u5272":5,"\u4ee5sigid":5,"\u4ee5tempalteparam":5,"\u4ee5templateid":5,"\u4ee5unix":5,"\u4ef2\u88c1\u8282\u70b9\u6309\u6700\u5c0f\u673a\u578b\u521b\u5efa":5,"\u4ef7\u683c":5,"\u4f01\u4e1a\u8425\u4e1a\u6267\u7167":5,"\u4f18\u5148\u7ea7":5,"\u4f18\u5148\u7ea7\u4f7f\u75280":5,"\u4f1a\u5458\u63a8\u5e7f\u7c7b":5,"\u4f1a\u5458\u63a8\u5e7f\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u4f1a\u5458\u7c7b\u578b":5,"\u4f20\u4e86\u5219\u4e0d\u80fd\u4e3a\u7a7a":5,"\u4f20\u5b9e\u4f8bid\u83b7\u53d6\u5355\u4e2a\u5b9e\u4f8b\u4fe1\u606f":5,"\u4f4e":5,"\u4f5c":5,"\u4f7f\u7528\u4ee3\u91d1\u5238\u53ef\u51b2\u62b5\u90e8\u5206\u8d39\u7528":5,"\u4f7f\u7528\u7684\u4ee3\u91d1\u5238id":5,"\u4f7f\u7528\u7684\u5907\u4efd\u65b9\u5f0f":5,"\u4f7f\u7528\u7684\u7b7e\u540d":5,"\u4f7f\u7528\u91cf\u5355\u4f4dmb":5,"\u4f7f\u7528describeudbparamgroup\u83b7\u5f97":5,"\u4f8b\u5982":5,"\u4f8b\u5982192":5,"\u4f8b\u5982uhostid":5,"\u4f9b\u5e94\u5546":5,"\u4fdd\u7559":5,"\u4fdd\u7559\u5c0f\u6570\u70b9\u540e\u4e24\u4f4d\u6709\u6548\u6570\u5b57":5,"\u4fee\u6539":5,"\u4fee\u6539\u4e3b\u5907redis\u540d\u79f0":5,"\u4fee\u6539\u5e26\u5bbd\u503c":5,"\u4fee\u6539\u5f39\u6027ip\u7684\u5916\u7f51\u51fa\u53e3\u6743\u91cd":5,"\u4fee\u6539\u6302\u8f7d\u7684\u78c1\u76d8\u5927\u5c0f":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u4e1a\u52a1\u7ec4\u6807\u8bc6":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u540d\u79f0":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u5907\u6ce8\u4fe1\u606f":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u7684\u8d44\u6e90\u914d\u7f6e":5,"\u4fee\u6539\u65f6\u95f4":5,"\u4fee\u6539\u9879\u76ee":5,"\u4fee\u6539db\u5b9e\u4f8b\u7684\u7ba1\u7406\u5458\u5bc6\u7801":5,"\u4fee\u6539globalssh\u5907\u6ce8":5,"\u4fee\u6539globalssh\u7aef\u53e3":5,"\u4fee\u6539udb\u81ea\u52a8\u5907\u4efd\u7b56\u7565":5,"\u4fee\u6539umem\u5185\u5b58\u7a7a\u95f4\u540d\u79f0":5,"\u503c":5,"\u504f\u79fb\u91cf":5,"\u5065\u5eb7\u68c0\u67e5\u5f02\u5e38":5,"\u5065\u5eb7\u68c0\u67e5\u7684\u7c7b\u578b":5,"\u5065\u5eb7\u68c0\u67e5\u7c7b\u578b":5,"\u5141\u8bb8\u4e00\u4e2a\u6216\u8005\u4e09\u4e2a":5,"\u5141\u8bb8\u503c\u7684\u683c\u5f0f\u7c7b\u578b":5,"\u5141\u8bb8\u591a\u70b9\u6302\u8f7d":5,"\u5141\u8bb8\u7684\u503c":5,"\u5143":5,"\u514b\u9686\u4e2d":5,"\u514b\u9686\u7236disk\u7684id":5,"\u514b\u9686\u7236snapshot\u7684id":5,"\u514d\u8d39\u5e26\u5bbd\u6a21\u5f0f":5,"\u516c\u4f17\u53f7\u6216\u5c0f\u7a0b\u5e8f\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u516c\u4f17\u53f7\u6216\u5c0f\u7a0b\u5e8f\u7684\u7ba1\u7406\u754c\u9762\u622a\u56fe":5,"\u516c\u53f8\u540d\u79f0":5,"\u516c\u53f8\u5730\u5740":5,"\u516c\u53f8\u6216\u4f01\u4e1a\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u516d\u7684\u5907\u4efd\u914d\u7f6e\u5f00\u5173":5,"\u516d\u79cd":5,"\u516d\u79cd\u5bb9\u91cf\u89c4\u683c":5,"\u51717\u4f4d":5,"\u5171\u4eab\u5e26\u5bbd":5,"\u5171\u4eab\u5e26\u5bbd\u4fdd\u5e95\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u540d\u5b57":5,"\u5171\u4eab\u5e26\u5bbd\u540d\u79f0":5,"\u5171\u4eab\u5e26\u5bbd\u540e\u4ed8\u8d39\u5f00\u59cb\u8ba1\u8d39\u65f6\u95f4":5,"\u5171\u4eab\u5e26\u5bbd\u5cf0\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u5e26\u5bbd\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f":5,"\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f\u5fc5\u987b\u6307\u5b9a0m\u5e26\u5bbd":5,"\u5171\u4eab\u5e26\u5bbd\u7684\u8d44\u6e90\u540d\u79f0":5,"\u5171\u4eab\u5e26\u5bbd\u7684\u8d44\u6e90id":5,"\u5171\u4eab\u5e26\u5bbd\u7684id":5,"\u5171\u4eab\u5e26\u5bbd\u7c7b\u578b":5,"\u5171\u4eab\u5e26\u5bbd\u8d44\u6e90id":5,"\u5171\u4eab\u5e26\u5bbdid":5,"\u5173\u673a":5,"\u5173\u673a\u4e2d":5,"\u5173\u95ed":5,"\u5173\u95ed\u4e2d":5,"\u5173\u95ed\u4f1a\u8bdd\u4fdd\u6301":5,"\u5173\u95ed\u5171\u4eab\u5e26\u5bbd":5,"\u5173\u95ed\u5171\u4eab\u5e26\u5bbd\u540e":5,"\u5173\u95edudb\u5b9e\u4f8b":5,"\u5176\u4e2dcongfigsrv\u5206\u4e3asccc\u548ccsrs\u4e24\u79cd\u6a21\u5f0f":5,"\u5176\u4e2dn\u4e3a\u5927\u4e8e1\u7684\u6574\u6570":5,"\u5176\u4ed6\u4e0d\u5220\u9664":5,"\u5176\u4ed6\u503c":5,"\u5176\u4ed6\u503c\u6216\u4e0d\u586b":5,"\u5176\u4ed6\u5355\u4f4d\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u5176\u4ed6\u573a\u666f\u9700\u8981\u4e8b\u5148\u5173\u95ed\u5b9e\u4f8b":5,"\u5176\u4ed6\u5f39\u6027ip\u4e0d\u4f1a\u88ab\u4f7f\u7528":5,"\u5176\u4ed6\u6216\u8005\u4e0d\u586b":5,"\u5176\u4ed6\u6d77\u5916\u7ebf\u8def\u5747\u4e3a":5,"\u5176\u4f59\u4ece\u53f3\u5230\u5de6\u4f9d\u6b21\u4e3a\u661f\u671f\u4e00\u5230\u661f\u671f":5,"\u5176\u4f59\u4ece\u53f3\u5230\u5de6\u4f9d\u6b21\u4e3a\u661f\u671f\u4e00\u5230\u661f\u671f\u516d\u7684\u5907\u4efd\u914d\u7f6e\u5f00\u5173":5,"\u5176\u4f59\u60c5\u51b5":5,"\u5176\u53d6\u503c\u5982\u4e0b":5,"\u5177\u4f53\u673a\u578b\u4e0ecpu\u7684\u5bf9\u5e94\u5173\u7cfb\u53c2\u7167\u63a7\u5236\u53f0":5,"\u5177\u4f53\u8bf7\u67e5\u8be2\u63a7\u5236\u53f0":5,"\u517c\u5bb9\u8001\u7248\u672c":5,"\u5185\u5b58\u5927\u5c0f":5,"\u5185\u5b58\u5b58\u50a8":5,"\u5185\u5b58\u5bb9\u91cf\u5927\u5c0f":5,"\u5185\u5b58\u7a7a\u95f4\u540d\u79f0":5,"\u5185\u5b58\u7a7a\u95f4id":5,"\u5185\u5b58\u9650\u5236":5,"\u5185\u5bb9\u7c7b\u578b":5,"\u5185\u5bb9\u8f6c\u53d1\u4f18\u5148\u7ea7":5,"\u5185\u5bb9\u8f6c\u53d1\u5339\u914d\u5b57\u6bb5":5,"\u5185\u5bb9\u8f6c\u53d1\u5339\u914d\u5b57\u6bb5\u7684\u7c7b\u578b":5,"\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u5e94\u7528\u7684\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b\u7684id":5,"\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u7ec4id":5,"\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565id":5,"\u5185\u5bb9\u8f6c\u53d1id":5,"\u5185\u7f51":5,"\u5185\u7f51ip":5,"\u5185\u7f51ip\u4e0d\u663e\u793a\u5e26\u5bbd\u4fe1\u606f":5,"\u5185\u7f51ip\u65e0\u5bf9\u5e94\u7684\u8d44\u6e90id":5,"\u5185\u7f51ip\u65e0\u8d44\u6e90id":5,"\u5185\u7f51ulb":5,"\u5185\u7f51vip":5,"\u5185\u7f51vip\u5730\u5740\u5217\u8868":5,"\u5185\u7f51vip\u7684id":5,"\u5185\u90e8\u53c2\u6570":5,"\u5185\u90e8\u5b57\u6bb5":5,"\u5185\u90e8\u6d4b\u8bd5":5,"\u5185\u90e8\u8bb0\u8f7d":5,"\u5206":5,"\u5206\u5272\u5b57\u6bb5":5,"\u5206\u7247\u96c6\u7fa4":5,"\u5206\u914d\u4e00\u6761":5,"\u5206\u914d\u4e2d":5,"\u5206\u9694":5,"\u5206\u9875\u663e\u793a\u6570\u91cf":5,"\u5206\u9875\u663e\u793a\u7684\u6761\u76ee\u6570":5,"\u5206\u9875\u663e\u793a\u7684\u8d77\u59cb\u504f\u79fb":5,"\u5206\u9875\u663e\u793a\u8d77\u59cb\u504f\u79fb\u4f4d\u7f6e":5,"\u5207\u6362\u540e\u9ad8\u53ef\u7528db\u5b9e\u4f8b\u7684id":5,"\u5207\u6362\u65f6\u4f1a\u6d89\u53ca\u4ed8\u8d39":5,"\u5217\u8868\u64cd\u4f5c\u5219\u6307\u5b9a":5,"\u5217\u8868\u64cd\u4f5c\u65f6\u5fc5\u586b":5,"\u5217\u8868\u64cd\u4f5c\u65f6\u624d\u4f1a\u6709\u8be5\u53c2\u6570":5,"\u5217\u8868\u8d77\u59cb\u4f4d\u7f6e\u504f\u79fb\u91cf":5,"\u5217\u8868\u957f\u5ea6":5,"\u5217\u8868udb\u5b9e\u4f8b\u5907\u4efd\u4fe1\u606f":5,"\u5217\u8868udb\u5b9e\u4f8bbinlog\u6216slowlog\u6216errorlog\u5907\u4efd\u4fe1\u606f":5,"\u5219\u4e00\u6b21\u6027\u83b7\u53d6\u4e09\u79cd\u8ba1\u8d39":5,"\u5219\u4e0d\u4f20\u5165\u8be5\u53c2\u6570":5,"\u5219\u4e0d\u5141\u8bb8\u53d1\u9001":5,"\u5219\u4e3adataark":5,"\u5219\u53ea\u6709master":5,"\u5219\u53ea\u83b7\u53d6\u8be5db\u7684\u5907\u4efd\u4fe1\u606f":5,"\u5219\u53ef\u9009\u662f\u5426\u9009\u53d6\u7279\u5b9adb\u7c7b\u578b\u7684\u914d\u7f6e":5,"\u5219\u5fc5\u586b":5,"\u5219\u5fc5\u9009":5,"\u5219\u5fc5\u987b\u586b\u5199":5,"\u5219\u5fc5\u987b\u8d4b\u503c":5,"\u5219\u65e0\u6cd5\u4fdd\u7559\u6570\u636e\u76d8":5,"\u5219\u65e0\u6cd5\u53d1\u9001":5,"\u5219\u662f\u8be5db\u5907\u4efd\u603b\u6570":5,"\u5219\u67e5\u8be2\u8be5\u7528\u6237\u5728\u673a\u623f\u6240\u6709\u7684\u4e13\u7ebf\u4fe1\u606f":5,"\u5219\u6b64\u5b57\u6bb5\u4f20\u5165\u7528\u6237\u81ea\u5b9a\u4e49\u4f1a\u8bdd\u4fdd\u6301string":5,"\u5219\u7ed1\u5b9a\u544a\u8b66\u6a21\u677f":5,"\u5219\u83b7\u53d6\u6240\u6709":5,"\u5219\u8868\u660e\u4ece\u5907\u4efd\u6062\u590d\u5b9e\u4f8b":5,"\u5219\u8868\u793a\u4efb\u4f55\u5b9e\u4f8b\u7c7b\u578b\u5747\u53ef":5,"\u5219\u8868\u793a\u4efb\u4f55\u78c1\u76d8\u7c7b\u578b\u5747\u53ef":5,"\u5219\u8bf7\u8054\u7cfb\u6280\u672f\u652f\u6301\u786e\u8ba4\u539f\u56e0":5,"\u5219\u8fd4\u56de\u5f53\u524d":5,"\u5219\u8fd4\u56de\u5f53\u524dregion":5,"\u5219\u8fd4\u56de\u5f53\u524dregion\u6240\u6709phost":5,"\u5219\u8fdb\u5165\u56de\u6536\u7ad9":5,"\u5219\u968f\u673a\u5206\u914d\u5f53\u524d\u5b50\u7f51\u4e0b\u7684ip":5,"\u5219\u9700\u8981\u6307\u5b9a":5,"\u5219\u9ed8\u8ba4\u4e3a\u56fd\u5185\u624b\u673a\u53f7":5,"\u521b\u5efa\u4e2d":5,"\u521b\u5efa\u4e3b\u5907redi":5,"\u521b\u5efa\u4e3b\u673a\u7684\u6700\u521d\u6765\u6e90\u955c\u50cf\u7684\u64cd\u4f5c\u7cfb\u7edf\u540d\u79f0":5,"\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\u6307\u5b9a\u5185\u7f51ip":5,"\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\u6307\u5b9amac":5,"\u521b\u5efa\u4ece\u8282\u70b9\u7684dbid":5,"\u521b\u5efa\u5185\u5b58\u7a7a\u95f4id\u5217\u8868":5,"\u521b\u5efa\u5185\u7f51ulb\u65f6\u6307\u5b9a\u5185\u7f51ip":5,"\u521b\u5efa\u5355\u673amemcach":5,"\u521b\u5efa\u53ea\u8bfbslave\u65f6":5,"\u521b\u5efa\u5916\u7f51ulb\u8be5\u5b57\u6bb5\u4f1a\u5ffd\u7565":5,"\u521b\u5efa\u5931\u8d25":5,"\u521b\u5efa\u5b50\u7f51":5,"\u521b\u5efa\u65f6\u95f4":5,"\u521b\u5efa\u65f6\u95f4\u6233":5,"\u521b\u5efa\u7684\u5de5\u4f5c\u6d41\u7248\u672c\u53f7":5,"\u521b\u5efa\u7684\u7ec4id":5,"\u521b\u5efa\u7684ulb\u662f\u5426\u4e3a\u5185\u7f51\u6a21\u5f0f":5,"\u521b\u5efa\u7684ulb\u662f\u5426\u4e3a\u5916\u7f51\u6a21\u5f0f":5,"\u521b\u5efa\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b":5,"\u521b\u5efa\u8def\u7531\u8868":5,"\u521b\u5efa\u9632\u706b\u5899":5,"\u521b\u5efa\u9879\u76ee":5,"\u521b\u5efadb":5,"\u521b\u5efaglobalssh\u5b9e\u4f8b":5,"\u521b\u5efamongodb\u7684\u526f\u672c\u8282\u70b9":5,"\u521b\u5efamongos\u5b9e\u4f8b":5,"\u521b\u5efaslave\u7684dbid":5,"\u521b\u5efasnapshot\u5feb\u7167":5,"\u521b\u5efassl\u8bc1\u4e66":5,"\u521b\u5efaudb\u5b9e\u4f8b":5,"\u521b\u5efaudb\u5b9e\u4f8b\u7684slav":5,"\u521b\u5efaudisk":5,"\u521b\u5efaudisk\u78c1\u76d8":5,"\u521b\u5efauhost\u5b9e\u4f8b":5,"\u521b\u5efaumem\u5185\u5b58\u7a7a\u95f4":5,"\u521b\u5efavpc":5,"\u521b\u5efavserver\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565":5,"\u521b\u5efavserver\u5b9e\u4f8b":5,"\u521d\u59cb\u5316":5,"\u521d\u59cb\u5316\u4e2d":5,"\u521d\u59cb\u5316\u5bc6\u7801":5,"\u5220":5,"\u5220\u9664":5,"\u5220\u9664\u4e2d":5,"\u5220\u9664\u4e3b\u5907redi":5,"\u5220\u9664\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565":5,"\u5220\u9664\u5355\u673amemcach":5,"\u5220\u9664\u5931\u8d25":5,"\u5220\u9664\u5b50\u7f51":5,"\u5220\u9664\u5f39\u6027ip\u4e0a\u5df2\u9644\u52a0\u5e26\u5bbd\u5305":5,"\u5220\u9664\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u7684uhost\u5b9e\u4f8b":5,"\u5220\u9664\u65f6\u95f4\u70b9":5,"\u5220\u9664\u7269\u7406\u4e91\u4e3b\u673a":5,"\u5220\u9664\u7528\u6237\u81ea\u5b9a\u4e49\u955c\u50cf":5,"\u5220\u9664\u81ea\u5b9a\u4e49\u8def\u7531\u8868":5,"\u5220\u9664\u8be5\u76d8\u6240\u521b\u5efa\u51fa\u6765\u7684\u6240\u6709\u5feb\u7167":5,"\u5220\u9664\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b":5,"\u5220\u9664\u914d\u7f6e\u53c2\u6570\u7ec4":5,"\u5220\u9664\u9632\u706b\u5899":5,"\u5220\u9664\u9879\u76ee":5,"\u5220\u9664globalssh\u5b9e\u4f8b":5,"\u5220\u9664snapshot":5,"\u5220\u9664ssl\u8bc1\u4e66":5,"\u5220\u9664udb\u5b9e\u4f8b":5,"\u5220\u9664udb\u5b9e\u4f8b\u5907\u4efd":5,"\u5220\u9664udb\u65e5\u5fd7\u5305":5,"\u5220\u9664udisk":5,"\u5220\u9664ulb\u65f6\u662f\u5426\u91ca\u653e\u7ed1\u5b9a\u7684eip":5,"\u5220\u9664umem\u5185\u5b58\u7a7a\u95f4":5,"\u5220\u9664vpc":5,"\u5220\u9664vpc\u4e92\u901a\u5173\u7cfb":5,"\u5220\u9664vserver\u5b9e\u4f8b":5,"\u522b\u4e3apvft_unkown":5,"\u522b\u540d":5,"\u5230\u671f\u65f6\u95f4":5,"\u5236\u4f5c\u4e2d":5,"\u524d\u65f6\u95f4\u70b9\u524d\u4e00\u5929":5,"\u524d\u7aef\u6682\u65f6\u53ea\u5f00\u653e\u5185\u5b58\u5b9a\u5236":5,"\u526f\u672c\u96c6\u6570\u91cf":5,"\u529f\u80fd\u4ec5\u90e8\u5206\u53ef\u7528\u533a\u5f00\u653e":5,"\u52a0\u5bc6":5,"\u52a0\u5bc6\u76d8":5,"\u52a0\u5bc6\u76d8\u5bc6\u7801":5,"\u52a0\u5bc6\u76d8\u7684\u5bc6\u7801":5,"\u52a0\u5bc6\u76d8\u9700\u8981\u6743\u9650\u4f4d":5,"\u52a0\u5bc6\u8bc1\u4e66\u7684\u79c1\u94a5":5,"\u52a0\u5bc6\u9700\u8981\u7684cmk":5,"\u52a0\u6743\u8f6e\u8be2":5,"\u52a0\u901f\u57df\u540d":5,"\u52a8\u4f5c\u6807\u5fd7\u4e3aadd":5,"\u5305\u542b\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8":5,"\u5305\u62ec":5,"\u5305\u62ec2":5,"\u5305\u62ec\u4ef2\u88c1":5,"\u5305\u62ec\u5185\u5b58\u548c\u78c1\u76d8\u7684\u914d\u7f6e":5,"\u5305\u62ec\u521b\u5efamysql":5,"\u5305\u62ec\u6240\u6709gpu\u673a\u578b":5,"\u5305\u62ec\u6bcf\u4e2a\u5355\u53ef\u7528\u533a\u548c\u8de8\u53ef\u7528\u533a":5,"\u5305\u62ec\u7528\u6237\u8bc1\u4e66":5,"\u5305\u62ec\u8def\u7531\u7b56\u7565":5,"\u5305\u62ec\u8f6c\u53d1\u89c4\u5219\u540e\u7684\u670d\u52a1\u8282\u70b9":5,"\u5317\u4eac\u4e00\u5730\u57df\u65e0\u6548":5,"\u5317\u4eac\u4e00\u5f53\u524d\u5b57\u6bb5\u4e3a\u7a7a":5,"\u5317\u4eac\u4e8c":5,"\u533a\u57df\u822a\u7a7a\u6e2f\u56fd\u9645\u901a\u7528\u4ee3\u7801":5,"\u5343\u5146":5,"\u5347\u7ea7\u4e2d":5,"\u5347\u7ea7\u540e\u7684\u4ef7\u683c":5,"\u5347\u7ea7\u548c\u964d\u7ea7":5,"\u5347\u7ea7\u76ee\u6807udisk":5,"\u5347\u964d\u7ea7\u540e\u662f\u5426\u542f\u52a8db":5,"\u5347\u964d\u7ea7\u8d44\u6e90\u7684\u4ef7\u683c":5,"\u534e\u76db\u987f":5,"\u534f\u8bae":5,"\u534f\u8bae\u7c7b\u578b":5,"\u5355\u4f4d":5,"\u5355\u4f4d\u4e3a":5,"\u5355\u4f4d\u4e3a\u5206":5,"\u5355\u4f4d\u4e3amb":5,"\u5355\u4f4d\u4e3ambp":5,"\u5355\u4f4d\u5c0f\u65f6":5,"\u5355\u4f4d\u5c0f\u65f6\u8ba1":5,"\u5355\u4f4dgb":5,"\u5355\u4f4dmb":5,"\u5355\u4f4dmbp":5,"\u5355\u70b9":5,"\u5355\u76d8\u5927\u5c0f":5,"\u5355\u9875\u8fd4\u56de\u6570\u636e\u957f\u5ea6":5,"\u5360\u75284\u4e2a\u5b57\u957f":5,"\u5373\u5c06\u5e9f\u5f03":5,"\u5373\u8be5\u5e26\u5bbd\u5305\u5728enabletime\u5230":5,"\u5373\u8fd4\u56delocaldisk":5,"\u5378\u8f7d\u4e2d":5,"\u5378\u8f7d\u67d0\u4e2a\u5df2\u7ecf\u6302\u8f7d\u5728\u6307\u5b9auhost\u5b9e\u4f8b\u4e0a\u7684udisk":5,"\u5378\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u5378\u8f7d\u7684uhost\u5b9e\u4f8bid":5,"\u539f\u4ef7":5,"\u539fdb\u72b6\u6001\u4e3awaitforswitch\u65f6":5,"\u53c2\u6570":5,"\u53c2\u6570\u4e3aother":5,"\u53c2\u6570\u503c":5,"\u53c2\u6570\u503c\u5e94\u7528\u7c7b\u578b":5,"\u53c2\u6570\u540d\u79f0":5,"\u53c2\u6570\u7c7b\u578b":5,"\u53c2\u6570\u7ec4\u540d\u79f0":5,"\u53c2\u6570\u7ec4\u603b\u6570":5,"\u53c2\u6570\u7ec4\u63cf\u8ff0":5,"\u53c2\u6570\u7ec4\u662f\u5426\u53ef\u4fee\u6539":5,"\u53c2\u6570\u7ec4id":5,"\u53c2\u8003":5,"\u53c2\u8003\u955c\u50cf\u5217\u8868":5,"\u53c2\u89c1":5,"\u53c2\u89c1describephostmachinetype\u8fd4\u56de\u503c":5,"\u53c2\u89c1describesubnet":5,"\u53ca\u65b0\u7684\u5b9e\u4f8b\u540d\u79f0":5,"\u53cc\u7ebf":5,"\u53cc\u7ebfip":5,"\u53d1\u751f\u9519\u8bef\u65f6":5,"\u53d1\u751f\u9519\u8bef\u65f6\u8868\u793a\u9519\u8bef\u63cf\u8ff0":5,"\u53d1\u9001\u77ed\u4fe1\u606f":5,"\u53d1\u9001\u77ed\u4fe1\u65f6\u8fd4\u56de\u7684sessionno":5,"\u53d1\u9001\u77ed\u4fe1\u65f6\u8fd4\u56de\u7684sessionno\u96c6\u5408":5,"\u53d6\u503c\u4e3a0\u62161":5,"\u53d6\u503c\u4e3a0\u65f6":5,"\u53d6\u503c\u4e3a100\u65f6":5,"\u53d6\u503c\u4e3a1024\u7684\u500d\u6570":5,"\u53d6\u503c\u8303\u56f4":5,"\u53d6\u503c\u8303\u56f43306\u81f365535":5,"\u53d6\u503c\u8303\u56f4\u4e3a":5,"\u53d6\u503c\u8303\u56f4\u4e3a\u5927\u4e8e0\u7684\u6574\u6570":5,"\u53d6\u503c\u8303\u56f4\u4e3a\u5927\u4e8e\u7b49\u4e8e2\u4e14\u5c0f\u4e8e\u7b49\u4e8e1000":5,"\u53d6\u503c\u8303\u56f4\u662f":5,"\u53d6\u503c\u8303\u56f4\u9700\u5927\u4e8e\u5f53\u524d\u78c1\u76d8\u5927\u5c0f":5,"\u53d6uredis\u4ef7\u683c\u4fe1\u606f":5,"\u53ea\u5728\u62a5\u6587\u8f6c\u53d1\u4e2d\u4f7f\u7528":5,"\u53ea\u652f\u6301\u666e\u901a\u7248db\u4e0d\u652f\u6301\u9ad8\u53ef\u7528":5,"\u53ea\u6709\u903b\u8f91\u5907\u4efd\u4e0b\u5907\u4efd\u9ed1\u540d\u5355\u624d\u751f\u6548":5,"\u53ea\u80fd\u5305\u542b\u82f1\u6587":5,"\u53ea\u80fd\u586btrue\u6216fals":5,"\u53ea\u8981\u6709\u4e00\u5757\u78c1\u76d8\u4e3a\u672c\u5730\u76d8":5,"\u53ea\u9488\u5bf9mysql5":5,"\u53ef\u4ee5\u4ecedescribeudblogpackage\u7ed3\u679c\u5f53\u4e2d\u83b7\u5f97":5,"\u53ef\u4ee5\u628a\u6574\u4e2a":5,"\u53ef\u4ee5\u83b7\u53d6\u591a\u4e2a\u7c7b\u578b\u7684\u65e5\u5fd7\u8bb0\u5f55":5,"\u53ef\u4ee5\u9009\u62e9\u5185\u7f51\u6216\u8005\u5916\u7f51":5,"\u53ef\u5305\u542b\u4e2d\u6587":5,"\u53ef\u6839\u636e\u8be5\u503c\u67e5\u8be2\u672c\u6b21\u53d1\u9001\u7684\u77ed\u4fe1\u5217\u8868":5,"\u53ef\u7528":5,"\u53ef\u7528\u4e8e":5,"\u53ef\u7528\u533a":5,"\u53ef\u7528\u533a\u5217\u8868":5,"\u53ef\u7528\u533a\u540d\u5b57":5,"\u53ef\u7528\u533a\u540d\u79f0":5,"\u53ef\u7528\u533a\u57df":5,"\u53ef\u7f6e\u4e3atrue":5,"\u53ef\u81ea\u5b9a\u4e49dn":5,"\u53ef\u8bbe\u4e3a\u4ee5\u4e0b\u51e0\u4e2a\u503c":5,"\u53ef\u9009":5,"\u53ef\u9009\u503c\u4e3a":5,"\u53ef\u9009\u503c\u4e3aconfigsrv":5,"\u53ef\u9009\u503c\u5982\u4e0b":5,"\u53ef\u9009\u5343\u5146":5,"\u53ef\u9009\u53c2\u6570":5,"\u53ef\u9009\u8303\u56f4\u4e0euhosttype\u76f8\u5173":5,"\u53ef\u9009\u8303\u56f4\u53c2\u7167\u597d\u63a7\u5236\u53f0":5,"\u53ef\u9009\u8303\u56f4\u53c2\u7167\u63a7\u5236\u53f0":5,"\u53ef\u9009\u8303\u56f4\u53c2\u8003\u63a7\u5236\u53f0":5,"\u53ef\u9009\u914d\u7f6e\u8303\u56f4\u8bf7\u53c2\u8003":5,"\u53ef\u9009raid":5,"\u53ef\u9009raw":5,"\u53ef\u901a\u8fc7":5,"\u53ef\u901a\u8fc7describeisolationgroup\u83b7\u53d6":5,"\u53ef\u901a\u8fc7describeudbbackup\u83b7\u5f97":5,"\u53ef\u901a\u8fc7describeudbinstancebinlog\u83b7\u5f97":5,"\u53ef\u901a\u8fc7describeudblogpackage\u83b7\u5f97":5,"\u53ef\u901a\u8fc7describeudbparamgroup\u83b7\u53d6":5,"\u5404\u503c":5,"\u5404\u503c\u4ee3\u8868":5,"\u5404\u5730\u57df\u5141\u8bb8\u7684\u7ebf\u8def\u53c2\u6570\u5982\u4e0b":5,"\u5404\u5730\u57df\u5e26\u5bbd\u8303\u56f4\u5982\u4e0b":5,"\u5404\u5730\u57df\u7684\u5e26\u5bbd\u503c\u8303\u56f4\u5982\u4e0b":5,"\u5404\u5730\u57df\u975e\u5171\u4eab\u5e26\u5bbd\u7684\u5e26\u5bbd\u8303\u56f4\u5982\u4e0b":5,"\u5404eip\u6062\u590d\u4e3a\u7684\u5e26\u5bbd\u503c":5,"\u540c\u4e3b\u673a\u4e0b\u53ea\u4f1a\u4f7f\u7528\u8fd9\u4e2a\u5f39\u6027ip":5,"\u540c\u65f6\u4f20snapshotid\u4f18\u5148":5,"\u540c\u65f6\u8bbe\u5b9a\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8":5,"\u540c\u65f6\u8bbe\u5b9a\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8\u7684\u78c1\u76d8\u7c7b\u578b":5,"\u540d\u5b57":5,"\u540d\u79f0":5,"\u540e\u4ed8\u8d39":5,"\u540e\u7aef\u5b9e\u4f8b\u72b6\u6001\u5f00\u5173":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u5185\u7f51ip":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u5b9e\u4f8b\u542f\u7528\u4e0e\u5426":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u5b9e\u4f8b\u8fd0\u884c\u72b6\u6001":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u7aef\u53e3":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u8d44\u6e90\u6240\u5728\u7684\u5b50\u7f51\u7684id":5,"\u540e\u7aef\u8d44\u6e90\u5185\u7f51ip":5,"\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b\u7684id":5,"\u540e\u7aef\u8d44\u6e90\u670d\u52a1\u7aef\u53e3":5,"\u540e\u7aef\u8d44\u6e90\u7684\u5185\u7f51ip":5,"\u540e\u7aef\u8d44\u6e90\u7684\u5b9e\u4f8b\u540d\u79f0":5,"\u540e\u7aef\u8d44\u6e90\u7684\u5bf9\u8c61id":5,"\u540e\u9762\u4e3a\u7535\u8bdd\u53f7\u7801":5,"\u5426":5,"\u5426\u5219":5,"\u5426\u5219\u4e3a\u5217\u8868\u64cd":5,"\u5426\u5219\u4e3a\u5217\u8868\u64cd\u4f5c":5,"\u5426\u5219\u4f1a\u62a5\u9519":5,"\u5426\u5219\u4f7f\u7528\u5355\u70b9\u8ba1\u8d39\u7b56\u7565\u7684\u503c":5,"\u5426\u5219\u662f\u5217\u8868\u64cd\u4f5c":5,"\u542b\u57df\u540d":5,"\u542f\u52a8\u4e2d":5,"\u542f\u52a8\u5904\u4e8e\u5173\u95ed\u72b6\u6001\u7684uhost\u5b9e\u4f8b":5,"\u542f\u52a8\u7269\u7406\u673a":5,"\u542f\u52a8udb\u5b9e\u4f8b":5,"\u542f\u7528":5,"\u544a\u8b66\u6a21\u677fid":5,"\u548c_":5,"\u548cdrop":5,"\u5546\u6807\u540d\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u5546\u6807\u6ce8\u518c\u8bc1\u4e66":5,"\u56de\u6267\u7ed3\u679c":5,"\u56de\u6267\u7ed3\u679c\u63cf\u8ff0":5,"\u56de\u6267\u8fd4\u56de\u65f6\u95f4":5,"\u56den\u9000\u8ba2":5,"\u56det\u9000\u8ba2":5,"\u56detd\u9000\u8ba2":5,"\u56e0\u4e3a\u8981\u52a0\u4e0a1":5,"\u56e0\u6b64\u4e0d\u5141\u8bb8\u8f93\u5165\u6bd4\u5f53\u524d\u5b9e\u4f8b\u6570\u636e\u76d8\u5927\u5c0f\u7684\u503c":5,"\u56e0\u6b64\u4e0d\u5141\u8bb8\u8f93\u5165\u6bd4\u5f53\u524d\u5b9e\u4f8b\u7cfb\u7edf\u76d8\u5c0f\u7684\u503c":5,"\u56fd\u9645":5,"\u56fd\u9645\u53f7\u7801\u524d\u7f00":5,"\u56fd\u9645ip":5,"\u5728\u52a0\u6743\u8f6e\u8be2\u7b97\u6cd5\u4e0b\u6709\u6548":5,"\u5730\u533a\u4ee3\u53f7":5,"\u5730\u5740\u7a7a\u95f4\u4e2d\u5b50\u7f51\u6570\u91cf":5,"\u5730\u57df":5,"\u5730\u57df\u540d\u5b57":5,"\u5730\u57df\u548c\u53ef\u7528\u533a\u5217\u8868":5,"\u57ce\u5e02":5,"\u57df\u540d":5,"\u57fa\u4e8evip\u548c\u54e8\u5175\u8282\u70b9\u7684\u67b6\u6784":5,"\u57fa\u7840\u578b":5,"\u57fa\u7840\u7f51\u7edc\u6a21\u5f0f":5,"\u57fa\u7840\u955c\u50cf\u540d\u79f0":5,"\u57fa\u7840\u955c\u50cfid":5,"\u5821\u5792\u673a":5,"\u586b":5,"\u586b\u4ee3\u8868\u5355\u53ef\u7528\u533a":5,"\u586b\u5199\u540e\u4e0d\u80fd\u586b\u5199snapshotid":5,"\u586b\u5199\u540e\u4e0d\u80fd\u586b\u5199udisk":5,"\u586b\u5199\u652f\u6301ssh\u8bbf\u95eeip\u7684\u5730\u533a\u540d\u79f0":5,"\u589e":5,"\u589e\u52a0\u7f51\u6bb5":5,"\u5907\u4efd\u4e2d":5,"\u5907\u4efd\u540d\u79f0":5,"\u5907\u4efd\u5916\u7f51url":5,"\u5907\u4efd\u5931\u8d25":5,"\u5907\u4efd\u5b8c\u6210\u65f6\u95f4":5,"\u5907\u4efd\u5f00\u59cb\u65f6\u95f4":5,"\u5907\u4efd\u603b\u6570":5,"\u5907\u4efd\u6210\u529f":5,"\u5907\u4efd\u6240\u5728\u53ef\u7528\u533a":5,"\u5907\u4efd\u6587\u4ef6\u4fdd\u7559\u7684\u6570\u91cf":5,"\u5907\u4efd\u6587\u4ef6\u516c\u7f51\u7684\u5730\u5740":5,"\u5907\u4efd\u6587\u4ef6\u540d\u79f0":5,"\u5907\u4efd\u6587\u4ef6\u5927\u5c0f":5,"\u5907\u4efd\u65b9\u6848":5,"\u5907\u4efd\u65e5\u671f\u6807\u8bb0\u4f4d":5,"\u5907\u4efd\u65f6\u671f\u6807\u8bb0\u4f4d":5,"\u5907\u4efd\u65f6\u95f4":5,"\u5907\u4efd\u65f6\u95f4\u95f4\u9694":5,"\u5907\u4efd\u72b6\u6001":5,"\u5907\u4efd\u7528\u6237\u7f51url":5,"\u5907\u4efd\u7684\u540d\u79f0":5,"\u5907\u4efd\u7684\u6574\u70b9\u65f6\u95f4":5,"\u5907\u4efd\u7684\u72b6\u6001":5,"\u5907\u4efd\u7b56\u7565":5,"\u5907\u4efd\u7c7b\u578b":5,"\u5907\u4efd\u8bb0\u5f55id":5,"\u5907\u4efd\u8fc7\u671f":5,"\u5907\u4efd\u9519\u8bef\u4fe1\u606f":5,"\u5907\u4efd\u9ed1\u540d\u5355":5,"\u5907\u4efd\u9ed1\u540d\u5355\u5217\u8868":5,"\u5907\u4efdid":5,"\u5907\u4efdudb\u5b9e\u4f8b":5,"\u5907\u4efdudb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684binlog\u5217\u8868":5,"\u5907\u4efdudb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684errorlog":5,"\u5907\u4efdudb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684slowlog\u5206\u6790\u7ed3\u679c":5,"\u5907\u6848\u53f7":5,"\u5907\u6848\u670d\u52a1\u5546\u7684\u5907\u6848\u6210\u529f\u622a\u56fe":5,"\u5907\u6ce8":5,"\u5907\u6ce8\u4fe1\u606f":5,"\u5907\u6ce8\u7b49\u5c5e\u6027\u5b57\u6bb5":5,"\u590d\u5236\u81ea\u5236\u955c\u50cf":5,"\u5916\u7f51\u51fa\u53e3\u6743\u91cd":5,"\u591a\u7528\u4e8e\u9ad8\u53ef\u7528\u7a0b\u5e8f\u4f5c\u4e3a\u6f02\u79fbip":5,"\u5927\u4e8e100\u4e3a\u5b50\u5e10\u6237":5,"\u5927\u4e8e\u7b49\u4e8e\u8fd4\u56dedataset\u957f\u5ea6":5,"\u5927\u6570\u636e\u96c6\u7fa4":5,"\u5931\u6548":5,"\u5931\u6548\u65f6\u95f4":5,"\u5931\u8d25":5,"\u5982":5,"\u59821851623xxxx":5,"\u5982\u4e0d\u4f20\u6b64\u53c2\u6570":5,"\u5982\u4e2d\u56fd\u4e3a86\u62160086":5,"\u5982\u4f55\u67e5\u8be2securitygroupid\u8bf7\u53c2\u89c1":5,"\u5982\u6309\u6708":5,"\u5982\u679c\u4e0d\u4f20\u5165":5,"\u5982\u679c\u4e0d\u4f20\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684\u4e1a\u52a1\u7ec4":5,"\u5982\u679c\u4e0d\u4f20\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684\u5b50\u7f51":5,"\u5982\u679c\u4e0d\u4f20\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684vpc":5,"\u5982\u679c\u4e0d\u6307\u5b9a":5,"\u5982\u679c\u4e0d\u8f93\u5165\u5219\u4f7f\u7528\u9ed8\u8ba4\u7b7e\u540d":5,"\u5982\u679c\u4e3a\u7a7a":5,"\u5982\u679c\u4ece\u5e93\u5907\u4efd\u5f00\u5173\u8bbe\u5b9a\u4e3a\u6253\u5f00":5,"\u5982\u679c\u4ece\u5e93\u843d\u540e\u53ef\u80fd\u4f1a\u7981\u6b62\u63d0\u5347":5,"\u5982\u679c\u4f20\u4e86\u544a\u8b66\u6a21\u677fid":5,"\u5982\u679c\u521b\u5efauhost\u5b9e\u4f8b\u65f6loginmode\u4e3apassword":5,"\u5982\u679c\u586b\u4e86backupid":5,"\u5982\u679c\u6307\u5b9a":5,"\u5982\u679c\u6307\u5b9a\u4e3atrue":5,"\u5982\u679c\u6307\u5b9a\u5219\u83b7\u53d6\u5355\u4e2adb\u5b9e\u4f8b\u7684\u63cf\u8ff0":5,"\u5982\u679c\u6307\u5b9a\u5219\u83b7\u53d6\u63cf\u8ff0":5,"\u5982\u679c\u6307\u5b9adbid":5,"\u5982\u679c\u64cd\u4f5c\u6210\u529f":5,"\u5982\u679c\u662f\u4ecewindows\u91cd\u88c5\u4e3alinux\u6216\u53cd\u4e4b":5,"\u5982\u679c\u662f\u5217\u8868\u64cd\u4f5c":5,"\u5982\u679c\u6709\u503c\u8868\u793a\u4e13\u533a\u4e2d\u7684db\u914d\u7f6e\u5347\u964d\u7ea7":5,"\u5982\u679c\u6709\u8be5\u9009\u9879":5,"\u5982\u679c\u672a\u6307\u5b9agroupid":5,"\u5982\u679c\u6ca1\u4f20":5,"\u5982\u679c\u7ed1\u5b9aeip\u8fd9\u4e2a\u53c2\u6570\u5fc5\u586b":5,"\u5982\u679c\u843d\u540e\u60c5\u51b5\u4e0b":5,"\u5982\u679c\u8981\u4f20\u5165\u591a\u4e2a\u6587\u4ef6\u540d":5,"\u5982\u679c\u8ba1\u8d39\u5355\u4f4d\u662f":5,"\u5982\u679c\u8fd9\u4e2a\u53c2\u6570\u5b58\u5728\u8fd9\u8bf4\u660e\u662f\u5728\u4e13\u533a\u4e2d\u521b\u5efadb":5,"\u5982\u679cloginmode\u4e3akeypair":5,"\u5982\u679cname\u4e0d\u586b\u5199":5,"\u5982\u679ctag\u4e0d\u586b\u5199":5,"\u5982\u679cudbid\u4e0d\u4e3a\u7a7a\u5219\u53ea\u67e5\u770b\u6b64\u4e13\u533a\u4e0b\u9762\u7684db":5,"\u5982\u679cusessd\u4e3atru":5,"\u5982\u9700\u9000\u8d39\u6b64\u5904\u4e3a\u8d1f\u503c":5,"\u5982\u9999\u6e2f":5,"\u5982cn":5,"\u5982cpu\u6838\u5fc3\u6570":5,"\u5982hk":5,"\u5982month":5,"\u5982mysql":5,"\u5982org":5,"\u5b50\u5e10\u53f7\u5fc5\u987b\u586b\u5199":5,"\u5b50\u7f51":5,"\u5b50\u7f51\u5173\u8054\u7684ipv6\u7f51\u6bb5":5,"\u5b50\u7f51\u5173\u8054\u7684ipv6\u7f51\u6bb5\u6240\u5c5e\u8fd0\u8425\u5546":5,"\u5b50\u7f51\u540d\u79f0":5,"\u5b50\u7f51\u603b\u6570\u91cf":5,"\u5b50\u7f51\u63a9\u7801":5,"\u5b50\u7f51\u6a21\u5f0f":5,"\u5b50\u7f51\u7c7b\u578b":5,"\u5b50\u7f51\u7f51\u5173":5,"\u5b50\u7f51\u7f51\u6bb5":5,"\u5b50\u7f51\u7f51\u7edc\u53f7\u4f4d\u6570":5,"\u5b50\u7f51\u7f51\u7edc\u5730\u5740":5,"\u5b50\u7f51id":5,"\u5b50\u7f51id\u6570\u7ec4":5,"\u5b57\u6570\u4e0d\u8d85\u8fc7128":5,"\u5b57\u6570\u4e0d\u8d85\u8fc7500":5,"\u5b57\u6bb5\u89c4\u8303":5,"\u5b57\u6bcd":5,"\u5b57\u7b26\u90fd\u6309\u4e00\u4e2a\u5b57\u8ba1":5,"\u5b57\u8282":5,"\u5b89\u5168\u7ec4id":5,"\u5b89\u88c5":5,"\u5b89\u88c5\u5931\u8d25":5,"\u5b9a\u4e49\u76d1\u542c\u7684\u534f\u8bae\u548c\u7aef\u53e3\u4ee5\u53ca\u8d1f\u8f7d\u5747\u8861\u7b97\u6cd5":5,"\u5b9e\u4f8b":5,"\u5b9e\u4f8b\u540d\u79f0":5,"\u5b9e\u4f8b\u6240\u5728\u53ef\u7528\u533a":5,"\u5b9e\u4f8b\u6240\u5728\u7684\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u5b9e\u4f8b\u72b6\u6001":5,"\u5b9e\u4f8b\u7684\u65b0\u540d\u5b57":5,"\u5b9e\u4f8b\u7684\u65b0\u5bc6\u7801":5,"\u5b9e\u4f8b\u7684\u90e8\u7f72\u7c7b\u578b":5,"\u5b9e\u4f8b\u7684id":5,"\u5b9e\u4f8bid":5,"\u5b9e\u540d\u8ba4\u8bc1\u72b6\u6001":5,"\u5ba1\u6838\u4e2d":5,"\u5ba1\u6838\u5931\u8d25\u539f\u56e0":5,"\u5ba1\u6838\u672a\u901a\u8fc7":5,"\u5ba1\u6838\u901a\u8fc7":5,"\u5ba2\u6237\u81ea\u5b9a\u4e49":5,"\u5bb9\u5668":5,"\u5bb9\u5668\u96c6\u7fa4":5,"\u5bb9\u91cf\u5355\u4f4dgb":5,"\u5bb9\u91cf\u5927\u5c0f":5,"\u5bb9\u91cf\u8c03\u6574\u4e2d":5,"\u5bb9\u91cf\u8c03\u6574\u5931\u8d25":5,"\u5bbf\u4e3b\u673a\u7c7b\u578b":5,"\u5bc6\u7801":5,"\u5bc6\u7801\u683c\u5f0f\u4f7f\u7528base64\u7f16\u7801":5,"\u5bc6\u7801\u9700\u4f7f\u7528base64\u8fdb\u884c\u7f16\u7801":5,"\u5bf9\u4e8e":5,"\u5bf9\u4e8e\u5185\u5b58\u5347\u7ea7\u65e0\u9700\u5173\u95ed\u5b9e\u4f8b":5,"\u5bf9\u5e94\u7684\u5b9e\u4f8bid":5,"\u5bf9\u5e94\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5bf9\u5e94\u7684db\u540d\u79f0":5,"\u5bf9\u5e94\u78c1\u76d8\u5236\u4f5c\u5feb\u7167\u65f6\u6240\u6302\u8f7d\u7684\u4e3b\u673a":5,"\u5bf9\u5e94\u78c1\u76d8\u662f\u5426\u5904\u4e8e\u53ef\u7528\u72b6\u6001":5,"\u5bf9master\u5219\u4e3a\u7a7a":5,"\u5bf9mongodb\u5219\u662f\u526f\u672c\u96c6id":5,"\u5bf9mysql\u7684slave\u800c\u8a00\u662fmaster\u7684dbid":5,"\u5bfc\u5165\u5de5\u4f5c\u6d41\u5b9a\u4e49":5,"\u5bfc\u5165\u7684\u914d\u7f6e\u5185\u5bb9\u91c7\u7528base64\u7f16\u7801":5,"\u5bfc\u5165udb\u914d\u7f6e":5,"\u5bfc\u51fa\u5de5\u4f5c\u6d41\u5b9a\u4e49":5,"\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684\u7248\u672c\u53f7":5,"\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684id":5,"\u5c06\u4e00\u4e2a\u53ef\u7528\u7684udisk\u6302\u8f7d\u5230\u67d0\u53f0\u4e3b\u673a\u4e0a":5,"\u5c06\u5c1a\u672a\u4f7f\u7528\u7684\u5f39\u6027ip\u7ed1\u5b9a\u5230\u6307\u5b9a\u7684\u8d44\u6e90":5,"\u5c06\u5f39\u6027ip\u4ece\u8d44\u6e90\u4e0a\u89e3\u7ed1":5,"\u5c06\u65b0\u521b\u5efa\u7684db\u6062\u590d\u5230\u6307\u5b9adb\u67d0\u4e2a\u6307\u5b9a\u65f6\u95f4\u70b9":5,"\u5c06\u9632\u706b\u5899\u5e94\u7528\u5230\u8d44\u6e90\u4e0a":5,"\u5c06eip\u52a0\u5165\u5171\u4eab\u5e26\u5bbd":5,"\u5c06eip\u79fb\u51fa\u5171\u4eab\u5e26\u5bbd":5,"\u5c06ssl\u8bc1\u4e66\u7ed1\u5b9a\u5230vserver":5,"\u5c0f\u4e8e\u7b49\u4e8e32\u4e2a\u5b57":5,"\u5c0f\u4e8e\u7b49\u4e8e600\u4e2a\u5b57":5,"\u5c55\u793a\u5b50\u7f51\u8d44\u6e90":5,"\u5c5e\u6027":5,"\u5de5\u4fe1\u90e8\u5907\u6848\u7f51\u7ad9\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u5df2\u5173\u95ed":5,"\u5df2\u51bb\u7ed3":5,"\u5df2\u5220\u9664":5,"\u5df2\u5e9f\u5f03":5,"\u5df2\u6302\u8f7d":5,"\u5df2\u6709\u4e3b\u673a\u7684\u4e1a\u52a1\u7ec4\u603b\u4e2a\u6570":5,"\u5df2\u7533\u8bf7\u7684\u77ed\u4fe1\u7b7e\u540did":5,"\u5df2\u7ed1\u5b9a":5,"\u5df2\u7ed1\u5b9a\u7684\u8d44\u6e90\u540d\u79f0":5,"\u5df2\u7ed1\u5b9a\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5df2\u7ed1\u5b9a\u8d44\u6e90\u5b9e\u4f8b\u7684\u5e26\u5bbd\u8ba1\u8d39\u5f39\u6027ip\u9644\u52a0\u4e34\u65f6\u5e26\u5bbd\u5305":5,"\u5df2\u7ed1\u5b9a\u8d44\u6e90\u7684\u8d44\u6e90id":5,"\u5e26\u5bbd":5,"\u5e26\u5bbd\u4fe1\u606f":5,"\u5e26\u5bbd\u503c":5,"\u5e26\u5bbd\u5305\u6240\u7ed1\u5b9a\u5f39\u6027ip\u7684\u8d44\u6e90id":5,"\u5e26\u5bbd\u5305\u6709\u6548\u65f6\u957f":5,"\u5e26\u5bbd\u5305\u7684\u4e34\u65f6\u5e26\u5bbd\u503c":5,"\u5e26\u5bbd\u5305\u7684\u8d44\u6e90id":5,"\u5e26\u5bbd\u5305\u8d44\u6e90id":5,"\u5e26\u5bbd\u5927\u5c0f":5,"\u5e26\u5bbd\u6a21\u5f0f":5,"\u5e26\u5bbd\u7c7b\u578b":5,"\u5e26\u5bbd\u8ba1\u8d39":5,"\u5e26\u5bbd\u8ba1\u8d39\u6a21\u5f0f":5,"\u5e76\u4e14quantity\u4e3a0":5,"\u5e76\u53ef\u6839\u636e\u6570\u636e\u4e2d\u5fc3":5,"\u5e76\u91ca\u653e":5,"\u5e76\u91cd\u65b0\u63d0\u4ea4\u5ba1\u6838":5,"\u5e7f\u4e1c":5,"\u5e94\u7528\u5546\u5e97\u540e\u53f0\u5f00\u53d1\u8005\u7ba1\u7406\u622a\u56fe":5,"\u5e9f\u5f03":5,"\u5efa\u8bae\u4e0d\u518d\u4f7f\u7528":5,"\u5efa\u8bae\u5347\u7ea7\u4e3a1":5,"\u5efa\u8bae\u53d1\u9001\u5b8c\u77ed\u4fe1\u4ee5\u540e":5,"\u5efa\u8bae\u540e\u7eed\u4e0d\u518d\u4f7f\u7528":5,"\u5efa\u8baen\u4ece1\u5f00\u59cb\u987a\u6b21":5,"\u5f00\u542f":5,"\u5f00\u542f\u6216\u8005\u5173\u95edudb\u4ece\u5e93\u5907\u4efd":5,"\u5f00\u542f\u65b9\u821f":5,"\u5f00\u542f\u70ed\u5347\u7ea7":5,"\u5f00\u542f\u7f51\u7edc\u589e\u5f3a1":5,"\u5f00\u542f\u7f51\u7edc\u589e\u5f3a2":5,"\u5f00\u59cb\u65f6\u95f4":5,"\u5f00\u901a\u5171\u4eab\u5e26\u5bbd":5,"\u5f39\u6027ip\u4ed8\u8d39\u65b9\u5f0f":5,"\u5f39\u6027ip\u4ef7\u683c":5,"\u5f39\u6027ip\u5730\u5740":5,"\u5f39\u6027ip\u662f\u5426\u5230\u671f":5,"\u5f39\u6027ip\u7684\u4e1a\u52a1\u7ec4\u6807\u8bc6":5,"\u5f39\u6027ip\u7684\u521b\u5efa\u65f6\u95f4":5,"\u5f39\u6027ip\u7684\u5230\u671f\u65f6\u95f4":5,"\u5f39\u6027ip\u7684\u540d\u79f0":5,"\u5f39\u6027ip\u7684\u5907\u6ce8":5,"\u5f39\u6027ip\u7684\u5916\u7f51\u5e26\u5bbd":5,"\u5f39\u6027ip\u7684\u5e26\u5bbd":5,"\u5f39\u6027ip\u7684\u5e26\u5bbd\u503c":5,"\u5f39\u6027ip\u7684\u5e26\u5bbd\u7c7b\u578b":5,"\u5f39\u6027ip\u7684\u7ebf\u8def\u5982\u4e0b":5,"\u5f39\u6027ip\u7684\u8ba1\u8d39\u6a21\u5f0f":5,"\u5f39\u6027ip\u7684\u8d44\u6e90\u7ed1\u5b9a\u72b6\u6001":5,"\u5f39\u6027ip\u7684\u8d44\u6e90id":5,"\u5f39\u6027ip\u7684\u8d44\u6e90id\u5982\u679c\u4e3a\u7a7a":5,"\u5f39\u6027ip\u7684\u8fd0\u8425\u5546\u4fe1\u606f":5,"\u5f39\u6027ip\u7684id":5,"\u5f39\u6027ip\u8ba1\u8d39\u65b9\u5f0fr":5,"\u5f39\u6027ip\u8bf7\u6c42\u7ed1\u5b9a\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5f39\u6027ip\u8bf7\u6c42\u7ed1\u5b9a\u7684\u8d44\u6e90id":5,"\u5f39\u6027ip\u8bf7\u6c42\u89e3\u7ed1\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5f39\u6027ip\u8bf7\u6c42\u89e3\u7ed1\u7684\u8d44\u6e90id":5,"\u5f39\u6027ip\u8d44\u6e90id":5,"\u5f3a\u5236\u63d0\u5347\u4e22\u5931\u6570\u636e":5,"\u5f53\u524d\u4ec5\u652f\u6301\u5220\u9664vpc\u7f51\u6bb5":5,"\u5f53\u524d\u4ec5\u652f\u6301mysql":5,"\u5f53\u524d\u53ea\u652f\u6301\u4e00\u4e2a\u5185\u7f51ip":5,"\u5f53\u524d\u652f\u6301mysql\u548cpg":5,"\u5f53\u524d\u78c1\u76d8\u652f\u6301\u7684\u5907\u4efd\u6a21\u5f0f\u53c2\u8003":5,"\u5f53\u524deip\u4ee3\u91d1\u5238id":5,"\u5f53\u53ea\u83b7\u53d6\u8fd9\u4e2a\u7279\u5b9adbid\u7684\u4fe1\u606f\u65f6":5,"\u5f53\u5bfc\u51fa\u67d0\u4e9b\u6570\u636e\u9047\u5230\u95ee\u9898\u540e":5,"\u5f53\u60a8\u662f\u4ee3\u7406\u5e76\u4f7f\u7528\u7b2c\u4e09\u65b9\u7684\u7b7e\u540d\u65f6":5,"\u5f53\u8bf7\u6c42\u6ca1\u6709\u586b\u5199zone\u65f6":5,"\u5f53bandwidthtyp":5,"\u5f53cento":5,"\u5f53db\u7c7b\u578b":5,"\u5f53db\u7c7b\u578b\u4e3amongodb\u65f6":5,"\u5f53monitortype\u4e3apath\u65f6":5,"\u5f53monitortype\u4e3aport\u65f6":5,"\u5f53purpose\u4e3a3":5,"\u5f53purpose\u4e3a3\u65f6":5,"\u5f53retcode\u4e0d\u4e3a0\u65f6":5,"\u5f53udisk\u6302\u8f7d\u6210\u529f\u540e":5,"\u5f53ulbtype\u4e3aoutermode\u65f6":5,"\u5f7b\u5e95\u5220\u9664":5,"\u5f85\u5ba1\u6838":5,"\u5f85\u5e9f\u5f03":5,"\u5fc5\u586b":5,"\u5fc5\u987b\u540c\u65f6\u4f20zone":5,"\u5fc5\u987b\u548czone\u5728\u540c\u4e00region":5,"\u5fc5\u987b\u586b\u5199":5,"\u5fc5\u987b\u586btrue":5,"\u5fc5\u987b\u8bbe\u7f6e":5,"\u5feb\u7167\u540d\u79f0":5,"\u5feb\u7167\u5907\u4efd\u5373\u7269\u7406\u5907\u4efd":5,"\u5feb\u7167\u5907\u4efd\u5907\u4efd\u9ed1\u540d\u5355\u4e0b\u65e0\u6548":5,"\u5feb\u7167\u63cf\u8ff0":5,"\u5feb\u7167\u7248\u672c":5,"\u5feb\u7167\u72b6\u6001":5,"\u5feb\u7167\u7684\u6e90udisk\u7684id":5,"\u5feb\u7167\u7684\u6e90udisk\u7684nam":5,"\u5feb\u7167\u7684udisk\u7684id":5,"\u5feb\u7167id":5,"\u603b\u4ef7\u683c":5,"\u603b\u6570":5,"\u603b\u7684\u6570\u636e\u76d8\u5b58\u50a8\u7a7a\u95f4":5,"\u6062\u590d\u4e2d":5,"\u6062\u590d\u5230\u67d0\u4e2a\u65f6\u95f4\u70b9\u7684\u65f6\u95f4\u6233":5,"\u6062\u590d\u5931\u8d25":5,"\u610f\u4e49\u4e3a0":5,"\u610f\u4e49\u5206":5,"\u6216":5,"\u6216\u767b\u5f55\u7528\u6237\u4e2d\u5fc3\u67e5\u770b":5,"\u6216\u8005":5,"\u6216\u8005\u628a\u8bc1\u4e66":5,"\u6216\u8005master":5,"\u6240\u521b\u5efa\u5e26\u5bbd\u5305\u7684\u8d44\u6e90id":5,"\u6240\u521b\u5efa\u9879\u76ee\u7684id":5,"\u6240\u5728\u53ef\u7528\u533a":5,"\u6240\u5c5e\u5730\u57df":5,"\u6240\u5c5e\u7684\u4e1a\u52a1\u7ec4id":5,"\u6240\u5c5e\u7684\u5b50\u7f51id":5,"\u6240\u5c5e\u884c\u4e1a":5,"\u6240\u5c5evserverid":5,"\u6240\u5e94\u7528\u8d44\u6e90id":5,"\u6240\u6709\u7b26\u5408\u6761\u4ef6\u7684uhost\u5b9e\u4f8b":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u5728ulb\u4e2d\u7684\u5bf9\u8c61id":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u670d\u52a1\u7aef\u53e3":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u7684\u7c7b\u578b":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u7684\u8d44\u6e90id":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aefrs\u6743\u91cd":5,"\u6240\u6dfb\u52a0\u7684ssl\u8bc1\u4e66\u7c7b\u578b":5,"\u6240\u7ed1\u5b9a\u5f39\u6027ip\u7684\u8d44\u6e90id":5,"\u6240\u7ed1\u5b9aulb\u5b9e\u4f8bid":5,"\u6240\u7ed1\u5b9avserver\u5b9e\u4f8bid":5,"\u6240\u91ca\u653e\u5f39\u6027ip\u5fc5\u987b\u4e3a\u975e\u7ed1\u5b9a\u72b6\u6001":5,"\u624b\u52a8":5,"\u624b\u673a\u53f7\u7801":5,"\u6253\u5f00":5,"\u6269\u5bb9\u5dee\u4ef7":5,"\u6279\u91cf\u521b\u5efa\u4e0d\u4f1a\u8fd4\u56de":5,"\u6279\u91cf\u521b\u5efa\u4e3b\u673a\u65f6\u5fc5\u586b":5,"\u6279\u91cf\u521b\u5efa\u8be5\u53c2\u6570\u65e0\u6548":5,"\u6279\u91cf\u6dfb\u52a0vserver\u540e\u7aef\u8282\u70b9":5,"\u628aufile\u7684\u955c\u50cf\u6587\u4ef6\u5bfc\u5165\u5230uhost":5,"\u62a2\u5360\u578b\u4e91\u4e3b\u673a":5,"\u62a2\u5360\u6027\u4e91\u4e3b\u673a":5,"\u62a5\u6587\u8f6c\u53d1":5,"\u62a5\u6587\u8f6c\u53d1\u4e0b\u6709":5,"\u62a5\u6587\u8f6c\u53d1\u7684vserver\u4e0b\u8868\u793a\u56de\u8bdd\u4fdd\u6301\u7684\u65f6\u95f4":5,"\u62a5\u6587\u8f6c\u53d1vserver\u53ea\u652f\u6301\u4fee\u6539\u4e3a":5,"\u62c9\u53d6\u6240\u6709\u673a\u623f\u7684\u914d\u7f6e\u6587\u4ef6":5,"\u62d2\u6536\u56det":5,"\u62d2\u7edd":5,"\u6302\u8f7d\u4e2d":5,"\u6302\u8f7d\u7684\u8bbe\u5907\u540d\u79f0":5,"\u6302\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u6302\u8f7d\u7684uhost\u5b9e\u4f8bid":5,"\u6302\u8f7d\u7684uhost\u7684id":5,"\u6302\u8f7d\u7684uhost\u7684ip":5,"\u6302\u8f7d\u7684uhost\u7684nam":5,"\u6307\u505c\u6b62\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\u7684uhost\u5b9e\u4f8b":5,"\u6307\u5b9a\u4ece\u65b9\u821f\u6062\u590d\u7684\u5907\u4efd\u65f6\u95f4\u70b9":5,"\u6307\u5b9a\u5e93mysql":5,"\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3":5,"\u6307\u5b9a\u662f\u5426\u662f\u5426\u4f7f\u7528ssd":5,"\u6307\u5b9a\u8868citi":5,"\u6307\u5b9aclasstyp":5,"\u6307\u5b9adbid\u65f6\u65e0\u9700\u586b\u5199classtyp":5,"\u6307\u5b9adbid\u7528\u4e8e\u83b7\u53d6\u8be5db\u7684\u4fe1\u606f":5,"\u6307\u5b9aip":5,"\u6307\u5b9aoffset":5,"\u6307\u5b9asubnetid\u65f6\u5fc5\u586b":5,"\u6307\u5b9avip\u6240\u5c5e\u7684vpc":5,"\u6307\u5f53\u524d\u81ea\u5b9a\u4e49\u955c\u50cf\u7684\u6765\u6e90\u955c\u50cf":5,"\u6309\u5c0f\u65f6\u4ed8\u8d39":5,"\u6309\u5c0f\u65f6\u4ed8\u8d39\u548c\u8bd5\u7528\u8fd9\u4e24\u79cd\u4ed8\u8d39\u6a21\u5f0f\u9700\u8981\u5f00\u901a\u6743\u9650":5,"\u6309\u5c0f\u65f6\u8d2d\u4e70":5,"\u6309\u5e74":5,"\u6309\u5e74\u4ed8\u8d39":5,"\u6309\u65f6":5,"\u6309\u65f6\u4ed8\u8d39":5,"\u6309\u6708":5,"\u6309\u6708\u4ed8\u8d39":5,"\u6309\u7167\u6bcf66\u4e2a\u8fdb\u884c\u5207\u5272":5,"\u6309\u9700":5,"\u6309\u9700\u4ed8\u8d39":5,"\u63a5\u53d7":5,"\u63a5\u53e3\u8fd4\u56de\u6d88\u606f":5,"\u63cf\u8ff0":5,"\u63cf\u8ff0\u5de5\u4f5c\u6d41\u5b9a\u4e49\u7684base64\u5b57\u7b26\u4e32":5,"\u63d0\u5347\u4e3a\u72ec\u5e93\u8fdb\u884c\u4e2d":5,"\u63d0\u793a\u4fe1\u606f":5,"\u642d\u914d\u4f7f\u7528":5,"\u64cd\u4f5c\u540d\u79f0":5,"\u64cd\u4f5c\u7cfb\u7edf\u540d\u79f0":5,"\u64cd\u4f5c\u7cfb\u7edf\u5e73\u53f0":5,"\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u522b":5,"\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b":5,"\u64cd\u4f5c\u7cfb\u7edf\u8be6\u7ec6\u7248\u672c":5,"\u652f\u4ed8\u5468\u671f":5,"\u652f\u4ed8\u65b9\u5f0f":5,"\u652f\u6301":5,"\u652f\u6301100":5,"\u652f\u6301\u4e24\u7c7b\u64cd\u4f5c":5,"\u652f\u6301\u4ee5\u6570\u7ec4\u7684\u65b9\u5f0f":5,"\u652f\u6301\u5730\u57df":5,"\u652f\u6301\u591a\u503c\u4f20\u5165":5,"\u652f\u6301udpn\u7684\u5730\u57df\u4e4b\u4e00":5,"\u6539":5,"\u6539\u6807\u5fd7":5,"\u6539\u914d\u6210\u529f\u7684\u78c1\u76d8id":5,"\u653e\u5165\u56de\u6536\u7ad9":5,"\u653f\u5e9c":5,"\u6570\u503c\u5bf9\u5e94\u7684\u7248\u672c\u5982\u4e0b":5,"\u6570\u5b57":5,"\u6570\u5b57\u4ee5\u53ca\u7b26\u53f7":5,"\u6570\u5b57\u548c\u7b26\u53f7":5,"\u6570\u5b57\u7b49\u90fd\u8ba1\u4e3a1\u4e2a\u5b57":5,"\u6570\u5b57\u8d8a\u5927\u4f18\u5148\u7ea7\u8d8a\u9ad8":5,"\u6570\u636e\u4e2d\u5fc3\u540d\u79f0":5,"\u6570\u636e\u4e2d\u5fc3id":5,"\u6570\u636e\u4ed3\u5e93":5,"\u6570\u636e\u504f\u79fb\u91cf":5,"\u6570\u636e\u5206\u9875\u503c":5,"\u6570\u636e\u5e93":5,"\u6570\u636e\u5e93\u578b":5,"\u6570\u636e\u5e93\u5ba1\u8ba1":5,"\u6570\u636e\u65b9\u821f":5,"\u6570\u636e\u65b9\u821f\u6a21\u5f0f":5,"\u6570\u636e\u76d8":5,"\u6570\u636e\u76d8\u4e0d\u652f\u6301\u7f29\u5bb9":5,"\u6570\u636e\u76d8\u5927\u5c0f":5,"\u6570\u636e\u8282\u70b9":5,"\u6570\u7ec4":5,"\u6570\u7ec4\u7b49\u90fd\u8ba1\u4e3a\u4e00\u4e2a\u5b57":5,"\u6587\u4ef6\u5927\u5c0f\u4e0d\u8d85\u8fc74":5,"\u65ad\u5f00":5,"\u65ad\u7535\u7269\u7406\u4e91\u4e3b\u673a":5,"\u65b0":5,"\u65b0\u52a0\u5761":5,"\u65b0\u5efavpc\u4e92\u901a\u5173\u7cfb":5,"\u65b0\u673a\u623f\u53ea\u63d0\u4f9bssd\u8d44\u6e90":5,"\u65b0\u7684\u540d\u79f0":5,"\u65b0\u7684\u6a21\u677f\u5185\u5bb9":5,"\u65b0\u7684\u6a21\u677f\u540d\u79f0":5,"\u65b0\u7684\u77ed\u4fe1\u7b7e\u540d\u540d\u79f0":5,"\u65b0\u7684\u9879\u76ee\u540d\u79f0":5,"\u65b0\u914d\u7f6e\u53c2\u6570\u7ec4\u540d\u79f0":5,"\u65b0\u914d\u7f6e\u53c2\u6570\u7ec4id":5,"\u65b9\u821f\u662f\u5426\u5f00\u542f":5,"\u65b9\u821f\u673a\u578b":5,"\u65e0":5,"\u65e0\u4ee3\u8868\u6b63\u5e38\u521b\u5efa":5,"\u65e0\u5907\u4efd":5,"\u65e0\u70ed\u5907":5,"\u65e0\u9700\u586b\u5199":5,"\u65e0\u9700\u7b49\u5f85\u5b9e\u4f8b\u6b63\u5e38\u5173\u95ed":5,"\u65e0id":5,"\u65e5\u5fd7\u5305id":5,"\u65e5\u5fd7\u7c7b\u578b":5,"\u65e7":5,"\u65f6":5,"\u65f6\u6307\u5b9a\u5065\u5eb7\u68c0\u67e5\u53d1\u9001\u8bf7\u6c42\u65f6\u7684\u8def\u5f84":5,"\u65f6\u6307\u5b9a\u5065\u5eb7\u68c0\u67e5\u53d1\u9001\u8bf7\u6c42\u65f6http":5,"\u65f6\u65e0\u9700\u6b64\u53c2\u6570":5,"\u65f6\u95f4\u6233":5,"\u662f":5,"\u662f\u5426\u4e3a\u9ed8\u8ba4\u9879\u76ee":5,"\u662f\u5426\u4f7f\u7528\u5f3a\u5236\u624b\u6bb5\u5173\u95eddb":5,"\u662f\u5426\u4f7f\u7528\u9ed1\u540d\u5355\u5907\u4efd":5,"\u662f\u5426\u4f7f\u7528ssd":5,"\u662f\u5426\u4fdd\u7559\u6570\u636e\u76d8":5,"\u662f\u5426\u5141\u8bb8\u591a\u70b9\u6302\u8f7d":5,"\u662f\u5426\u5220\u9664\u6302\u8f7d\u7684\u6570\u636e\u76d8":5,"\u662f\u5426\u52a0\u5bc6":5,"\u662f\u5426\u53ef\u66f4\u6539":5,"\u662f\u5426\u5b50\u5e10\u6237":5,"\u662f\u5426\u5b89\u88c5uga":5,"\u662f\u5426\u5c5e\u4e8e\u5730\u57df\u7ea7\u522b":5,"\u662f\u5426\u5f00\u542f\u5f02\u6b65\u9ad8\u53ef\u7528":5,"\u662f\u5426\u5f00\u542f\u6570\u636e\u65b9\u821f":5,"\u662f\u5426\u5f00\u542f\u65b9\u821f\u7279\u6027":5,"\u662f\u5426\u5f00\u542f\u70ed\u5347\u7ea7\u7279\u6027":5,"\u662f\u5426\u5f00\u542f\u9ad8\u53ef\u7528":5,"\u662f\u5426\u5f3a\u5236":5,"\u662f\u5426\u5f3a\u5236\u5bfc\u51fa\u5176\u4ed6\u5269\u4f59\u6570\u636e\u9ed8\u8ba4\u662ffalse\u9700\u8981\u540c\u65f6\u8bbe\u7f6ebackupdate\u5b57\u6bb5":5,"\u662f\u5426\u6253\u5f00\u6570\u636e\u65b9\u821f":5,"\u662f\u5426\u6388\u6743":5,"\u662f\u5426\u652f\u6301\u514b\u9686":5,"\u662f\u5426\u652f\u6301\u5f00\u542f\u65b9\u821f":5,"\u662f\u5426\u652f\u6301\u5feb\u7167":5,"\u662f\u5426\u652f\u6301\u6570\u636e\u65b9\u821f":5,"\u662f\u5426\u652f\u6301\u7d27\u6025\u767b\u5f55":5,"\u662f\u5426\u652f\u6301raid":5,"\u662f\u5426\u662f\u4ef2\u88c1\u8282\u70b9":5,"\u662f\u5426\u662f\u52a0\u5bc6\u76d8":5,"\u662f\u5426\u662f\u52a0\u5bc6\u76d8\u5feb\u7167":5,"\u662f\u5426\u662f\u5730\u57df\u7ea7\u522b\u7684\u914d\u7f6e\u6587\u4ef6":5,"\u662f\u5426\u662f\u7cfb\u7edf\u76d8":5,"\u662f\u5426\u662f\u8d22\u52a1\u8d26\u53f7":5,"\u662f\u5426\u662f\u8de8\u673a\u623furedi":5,"\u662f\u5426\u6709\u8d22\u52a1\u6743\u9650":5,"\u662f\u5426\u6709natgw":5,"\u662f\u5426\u67e5\u770b\u4e13\u533a\u91cc\u9762db":5,"\u662f\u5426\u7528\u6237\u5f53\u524d\u9ed8\u8ba4\u6570\u636e\u4e2d\u5fc3":5,"\u662f\u5426\u76f4\u63a5\u5220\u9664":5,"\u662f\u5426\u81ea\u52a8\u5907\u4efd":5,"\u662f\u5426\u81ea\u52a8\u7eed\u8d39":5,"\u662f\u5426\u8d85\u7ea7\u7ba1\u7406\u5458":5,"\u662f\u5426\u8fd4\u56de\u4ef7\u683c":5,"\u662f\u5426\u9009\u53d6\u4e13\u533a\u4e2d\u914d\u7f6e":5,"\u662f\u5426\u91ca\u653e\u7ed1\u5b9a\u7684eip":5,"\u662f\u5426\u9501\u4e3b\u5e93":5,"\u662f\u5426\u9700\u8981\u81ea\u52a8\u5907\u4efd":5,"\u662f\u5426\u9ed8\u8ba4\u7684\u5f39\u6027\u7f51\u5361\u7684\u4fe1\u606f":5,"\u662f\u6570\u636e\u76d8":5,"\u662f\u7cfb\u7edf\u76d8":5,"\u662f\u9ed8\u8ba4\u5f39\u6027\u7f51\u5361":5,"\u663e\u793amemcach":5,"\u666e\u901a":5,"\u666e\u901a\u4e91\u4e3b\u673a":5,"\u666e\u901a\u4e91\u76d8\u7684\u7ec4\u5408\u652f\u6301\u5f00\u542f\u65b9\u821f":5,"\u666e\u901a\u5347\u7ea7\u4e3a\u65b9\u821f\u673a\u578b":5,"\u666e\u901a\u5355\u70b9\u5b9e\u4f8b":5,"\u666e\u901a\u5355\u70b9\u5b9e\u4f8bha":5,"\u666e\u901a\u5e26\u5bbd\u7c7b\u578b":5,"\u666e\u901a\u6570\u636e\u76d8":5,"\u666e\u901a\u672c\u5730\u76d8":5,"\u666e\u901a\u7248udb\u5b9e\u4f8b":5,"\u666e\u901a\u76d8":5,"\u666e\u901a\u7cfb\u7edf\u76d8":5,"\u666e\u901adb\u5347\u7ea7\u4e3a\u9ad8\u53ef\u7528":5,"\u666e\u901audb\u5207\u6362\u4e3a\u9ad8\u53ef\u7528":5,"\u6682\u4e0d\u652f\u6301":5,"\u6682\u65f6\u4e0d\u5bf9\u5916\u5f00\u653e":5,"\u6682\u65f6\u652f\u630120":5,"\u6682\u65f6\u652f\u630120g":5,"\u6682\u672a\u5bf9\u5916\u5f00\u653e":5,"\u66f4\u6539\u7269\u7406\u673a\u4fe1\u606f":5,"\u66f4\u65b0\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219":5,"\u66f4\u65b0\u5b50\u7f51\u4fe1\u606f":5,"\u66f4\u65b0\u5f39\u6027ip\u540d\u79f0":5,"\u66f4\u65b0\u8def\u7531\u8868\u57fa\u672c\u4fe1\u606f":5,"\u66f4\u65b0\u9632\u706b\u5899\u89c4\u5219":5,"\u66f4\u65b0udb\u914d\u7f6e\u53c2\u6570\u9879":5,"\u66f4\u65b0ulb\u540d\u5b57\u4e1a\u52a1\u7ec4\u5907\u6ce8\u7b49\u5c5e\u6027\u5b57\u6bb5":5,"\u66f4\u65b0ulb\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b":5,"\u66f4\u65b0vpc\u7f51\u6bb5":5,"\u66f4\u65b0vserver\u5b9e\u4f8b\u5c5e\u6027":5,"\u6700\u4f4ecpu\u5e73\u53f0":5,"\u6700\u53f3\u8fb9\u7684\u4e00\u4f4d":5,"\u6700\u53f3\u8fb9\u7684\u4e00\u4f4d\u4e3a\u661f\u671f\u5929\u7684\u5907\u4efd\u5f00\u5173":5,"\u6700\u5927100":5,"\u6700\u592710000000":5,"\u6700\u5927\u503c\u53d7\u5730\u57df\u9650\u5236":5,"\u6700\u5927\u503c\u8bf7\u53c2\u8003":5,"\u6700\u5927\u521b\u5efa\u4e3b\u673a\u6570\u91cf":5,"\u6700\u5927\u6570\u91cf\u4e3a10\u53f0":5,"\u6700\u5c0f\u8fde\u63a5\u6570":5,"\u6700\u8fd15\u5206\u949f\u5e26\u5bbd\u7528\u91cf":5,"\u6708\u4ed8\u65f6":5,"\u6709\u56de\u6536\u7ad9\u6743\u9650":5,"\u6709\u591a\u4e2a\u53c2\u6570\u65f6":5,"\u6709\u6b64\u9879\u4ee3\u8868\u4ece\u5907\u4efd\u4e2d\u521b\u5efa":5,"\u670d\u52a1\u8282\u70b9":5,"\u672a\u5206\u7ec4\u663e\u793a\u4e3a":5,"\u672a\u5f00\u542f\u65b9\u821f":5,"\u672a\u5f00\u542f\u70ed\u5347\u7ea7":5,"\u672a\u652f\u6301":5,"\u672a\u77e5":5,"\u672a\u7ed1\u5b9a":5,"\u672a\u8fc7\u671f":5,"\u672c\u5730\u666e\u901a\u76d8\u652f\u63010":5,"\u672c\u5730\u76d8":5,"\u672c\u5730\u78c1\u76d8":5,"\u672c\u5730ssd\u76d8":5,"\u672c\u6b21\u63d0\u4ea4\u53d1\u9001\u7684\u77ed\u4fe1\u7684\u552f\u4e00id":5,"\u673a\u5173\u4e8b\u4e1a\u5355\u4f4d":5,"\u673a\u623f\u5730\u57df\u4ee3\u53f7":5,"\u6743\u9650\u4f4d\u63a7\u5236\u53ef\u8fbe8000":5,"\u6743\u9650\u4f4d\u63a7\u5236\u53ef\u8fbe8t":5,"\u6765\u6e90\u4e8e":5,"\u679a\u4e3e\u4e3a":5,"\u679a\u4e3e\u503c":5,"\u679a\u4e3e\u503c\u4e3a":5,"\u67e5\u8be2\u4e3b\u5907redi":5,"\u67e5\u8be2\u4e3b\u5907redis\u5907\u4efd":5,"\u67e5\u8be2\u5230\u7684\u603b\u6570\u91cf":5,"\u67e5\u8be2\u67d0\u4e00\u4e2a\u7c7b\u578bdb":5,"\u6807\u51c6\u4e3b\u5907\u7248":5,"\u6807\u51c6\u5927\u5bb9\u91cf\u673a\u578b":5,"\u6807\u51c6\u673a\u578b":5,"\u6807\u51c6\u955c\u50cf":5,"\u6838\u67e5\u5931\u8d25\u4e0d\u8fd4\u56de":5,"\u6838\u67e5\u6210\u529f\u8fd4\u56de\u503c\u4e3a\u53ef\u4ee5\u56de\u6863\u5230\u7684\u6700\u8fd1\u65f6\u523b":5,"\u6838\u67e5db\u662f\u5426\u53ef\u4ee5\u4f7f\u7528\u56de\u6863\u529f\u80fd":5,"\u6838\u67e5db\u662f\u5426\u53ef\u4ee5\u5347\u7ea7\u4e3a\u9ad8\u53ef\u7528":5,"\u6839\u636e\u4e00\u5f20\u73b0\u6709\u8def\u7531\u8868\u590d\u5236\u4e00\u5f20\u65b0\u7684\u8def\u7531\u8868":5,"\u6839\u636e\u53c2\u6570\u7c7b\u578b":5,"\u6839\u636e\u63d0\u4f9b\u4fe1\u606f":5,"\u6839\u636e\u8d44\u6e90\u4f7f\u7528\u91cf\u521b\u5efa\u6307\u5b9a\u6570\u91cf\u7684uphost\u7269\u7406\u4e91\u4e3b\u673a\u5b9e\u4f8b":5,"\u6839\u636e\u8fc7\u6ee4\u6761\u4ef6\u5f97\u5230\u7684\u603b\u6570":5,"\u6839\u636emonitortype\u786e\u8ba4":5,"\u6839\u636epersistencetype\u786e\u5b9a":5,"\u6839\u636epersistencetype\u786e\u8ba4":5,"\u6839\u636euhost\u5b9e\u4f8b\u914d\u7f6e":5,"\u683c\u5f0f":5,"\u683c\u5f0f\u4e3a":5,"\u683c\u5f0f\u4e3aunix":5,"\u683c\u5f0f\u4e3aunix\u65f6\u95f4\u6233":5,"\u6a21\u578b\u5b9a\u4e49":5,"\u6a21\u677f\u4e2d\u7684\u53d8\u91cf\u586b\u5199\u683c\u5f0f":5,"\u6a21\u677f\u53c2\u6570\u4e2a\u6570\u4e0e\u6a21\u677f\u4e0d\u5339\u914d":5,"\u6a21\u677f\u53c2\u6570\u6570\u7ec4":5,"\u6a21\u677f\u540d\u79f0\u548c\u6a21\u677f\u5185\u5bb9\u5fc5\u987b\u63d0\u4f9b\u4e00\u4e2a":5,"\u6a21\u677f\u7c7b\u578b":5,"\u6a21\u677f\u8bf4\u660e":5,"\u6a21\u677fid":5,"\u6b63\u5e38":5,"\u6b64\u53c2\u6570\u4f200":5,"\u6b64\u5904\u586b\u5199\u8f6c\u6362\u540e\u7684\u5b57\u7b26\u4e32":5,"\u6b64\u5904\u8fd4\u56de\u548cbasicimagename\u4e00\u81f4":5,"\u6b64\u5b57\u6bb5\u4e3a\u7a7a":5,"\u6b64\u5b57\u6bb5\u4f20\u5165\u81ea\u5b9a\u4e49\u4f1a\u8bdd\u4fdd\u6301string":5,"\u6b64\u5b57\u6bb5\u5c55\u793a\u7528\u6237\u81ea\u5b9a\u4e49\u4f1a\u8bddstring":5,"\u6b64\u5b57\u6bb5\u65e0\u610f\u4e49":5,"\u6b65\u957f":5,"\u6b65\u957f\u4e3a10":5,"\u6bcf\u4e00\u4f4d\u4e3a\u4e00\u5468\u4e2d\u4e00\u5929\u7684\u5907\u4efd\u60c5\u51b5":5,"\u6bcf\u4e2a\u4e2d\u6587":5,"\u6bcf\u4e2a\u6c49\u5b57":5,"\u6bcf\u4e2a\u8282\u70b9\u7684\u5185\u5b58\u5927\u5c0f":5,"\u6bcf\u5468\u5907\u4efd\u6570\u91cf":5,"\u6bcf\u5468\u5fc5\u987b\u81f3\u5c11\u8bbe\u7f6e\u4e24\u5929\u5907\u4efd":5,"\u6bcf\u79cd\u6587\u4ef6\u7684\u503c\u5982\u4e0b":5,"\u6bd4\u5982":5,"\u6bd4\u598210":5,"\u6bd4\u5982cento":5,"\u6bd4\u5982local":5,"\u6bd4\u5982uvnet":5,"\u6ca1\u6709slave":5,"\u6cc9\u5dde\u4e3a\u79fb\u52a8\u5355\u7ebfcn":5,"\u6cd5\u5170\u514b\u798f":5,"\u6ce8\u610f":5,"\u6ce8\u610f\u53ea\u6709ssd\u7248\u672c\u7684mysql\u5b9e\u4f8b\u652f\u6301\u8bbe\u7f6e\u4e3asnapshot":5,"\u6ce8\u610f\u73b0\u5728\u53ea\u6709ssd":5,"\u6d1b\u6749\u77f6":5,"\u6d1b\u6749\u77f6\u7b49":5,"\u6d41\u91cf\u8ba1\u8d39":5,"\u6d41\u91cf\u8ba1\u8d39\u6a21\u5f0f":5,"\u6d77\u5916\u673a\u623f":5,"\u6d88\u8017\u77ed\u4fe1\u6761\u6570":5,"\u6dfb\u52a0":5,"\u6dfb\u52a0\u7684routeruleid\u586b\u4efb\u610f\u975e\u7a7a\u5b57\u7b26\u4e32":5,"\u6dfb\u52a0\u7f51\u6bb5\u8bf7\u53c2\u8003":5,"\u6dfb\u52a0ulb\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b":5,"\u6dfb\u52a0vpc\u7f51\u6bb5":5,"\u6e05\u9664udb\u5b9e\u4f8b\u7684log":5,"\u6e90\u53c2\u6570\u7ec4id":5,"\u6e90\u5730\u5740":5,"\u6e90\u5b9e\u4f8b\u7684id":5,"\u6e90\u955c\u50cfid":5,"\u6e90vpc\u6240\u5728\u5730\u57df":5,"\u6e90vpc\u6240\u5728\u9879\u76eeid":5,"\u6e90vpc\u77edid":5,"\u6ee1\u8db3\u6761\u4ef6\u5907\u4efd\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u5e26\u5bbd\u5305\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u5f39\u6027ip\u5e26\u5bbd\u603b\u548c":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u5f39\u6027ip\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u955c\u50cf\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684phost\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684ssl\u8bc1\u4e66\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684ulb\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684vserver\u603b\u6570":5,"\u70ed\u5907":5,"\u7236\u9879\u76ee\u540d\u79f0":5,"\u7236\u9879\u76eeid":5,"\u7248\u672c\u7684":5,"\u7269\u7406\u4e91\u4e3b\u673a":5,"\u7269\u7406\u4e91\u4e3b\u673a\u72b6\u6001":5,"\u7269\u7406\u5907\u4efd":5,"\u7269\u7406\u5907\u4efd\u6b64\u53c2\u6570\u65e0\u6548":5,"\u7269\u7406\u673a":5,"\u7269\u7406\u673a\u540d\u79f0":5,"\u7269\u7406\u673a\u5907\u6ce8":5,"\u7269\u7406\u673a\u5e8f\u5217\u53f7":5,"\u7269\u7406\u673a\u7c7b\u578b":5,"\u7269\u7406\u673a\u8d44\u6e90id":5,"\u7279\u6b8a\u72b6\u6001\u6807\u8bc6":5,"\u72b6\u6001":5,"\u72b6\u6001\u6807\u8bb0":5,"\u72b6\u6001\u8bf4\u660e":5,"\u73b0\u4ef7":5,"\u751f\u6210\u81ea\u5b9a\u4e49\u955c\u50cf":5,"\u751f\u6548\u65f6\u95f4":5,"\u7528":5,"\u7528\u4e8e\u63a7\u5236\u663e\u793a\u54ea\u4e9b\u673a\u623f\u5730\u57df\u53ef\u4ee5\u4f7f\u7528ssh\u7279\u6027":5,"\u7528\u5206\u9694\u7b26\u8868\u793a":5,"\u7528\u5355\u5f15\u53f7\u5305\u542b":5,"\u7528\u6237\u521d\u59cb\u5316\u811a\u672c":5,"\u7528\u6237\u53ef\u901a\u8fc7\u6307\u5b9a\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b":5,"\u7528\u6237\u540d\u4e0b\u603b\u7684\u5907\u4efd\u4e2a\u6570":5,"\u7528\u6237\u5728\u6b64\u6570\u636e\u4e2d\u5fc3\u7684\u6743\u9650\u4f4d":5,"\u7528\u6237\u624b\u673a":5,"\u7528\u6237\u6298\u540e\u4ef7":5,"\u7528\u6237\u7684\u8bc1\u4e66":5,"\u7528\u6237\u81ea\u5b9a\u4e49":5,"\u7528\u6237\u81ea\u5b9a\u4e49\u9632\u706b\u5899":5,"\u7528\u6237\u81ea\u5b9a\u4e49kei":5,"\u7528\u6237\u90ae\u7bb1":5,"\u7528\u6237db\u7ec4\u7684\u6570\u91cf":5,"\u7528\u6237id":5,"\u7533\u8bf7\u5185\u7f51vip":5,"\u7533\u8bf7\u5230\u7684":5,"\u7533\u8bf7\u5230\u7684eip\u8d44\u6e90id":5,"\u7533\u8bf7\u5230\u7684vip\u5730\u5740":5,"\u7533\u8bf7\u5f39\u6027ip":5,"\u7533\u8bf7\u6570\u91cf":5,"\u7535\u4fe1":5,"\u7535\u6e90\u72b6\u6001":5,"\u7535\u8bdd\u53f7\u7801\u6570\u7ec4":5,"\u7535\u8bdd\u53f7\u7801\u683c\u5f0f\u4e3a":5,"\u7559\u7a7a\u8fd4\u56de\u5168\u90e8":5,"\u767b\u5f55\u5bc6\u7801":5,"\u7684\u4e3b\u673a1":5,"\u7684\u6574\u6570":5,"\u7684\u7c7b\u578b":5,"\u7684\u8d44\u6e90id":5,"\u76d1\u542c\u5668\u7c7b\u578b":5,"\u76ee\u524d\u4e3b\u8981\u53ef\u7528\u533a":5,"\u76ee\u524d\u4ec5\u652f\u63011":5,"\u76ee\u524d\u4ec5\u652f\u6301\u9ed8\u8ba4\u914d\u7f6eid":5,"\u76ee\u524d\u4ec5\u652f\u6301normal":5,"\u76ee\u524d\u4ec5\u9009\u62e9\u666e\u901a\u672c\u5730\u76d8":5,"\u76ee\u524d\u5305\u542bnetenhnc":5,"\u76ee\u524d\u53ea\u652f\u6301pem\u683c\u5f0f":5,"\u76ee\u524d\u652f\u6301":5,"\u76ee\u524d\u652f\u6301\u4ee5\u4e0b\u51e0\u6863":5,"\u76ee\u524d\u652f\u6301n1":5,"\u76ee\u524did\u7684\u53d6\u503c\u8303\u56f4\u4e3a":5,"\u76ee\u6807\u5730\u57df":5,"\u76ee\u6807\u7aef\u53e3":5,"\u76ee\u6807\u955c\u50cf\u540d\u79f0":5,"\u76ee\u6807\u955c\u50cf\u63cf\u8ff0":5,"\u76ee\u6807\u955c\u50cfid":5,"\u76ee\u6807\u9879\u76eeid":5,"\u76ee\u7684\u5730\u5740":5,"\u76ee\u7684\u7f51\u6bb5":5,"\u76ee\u7684\u9879\u76eeid":5,"\u76ee\u7684vpc\u6240\u5728\u5730\u57df":5,"\u76ee\u7684vpc\u6240\u5728\u9879\u76eeid":5,"\u76ee\u7684vpc\u77edid":5,"\u76ee\u7684vpc\u9879\u76eeid":5,"\u76f4\u63a5\u5173\u95eduhost\u5b9e\u4f8b\u7535\u6e90":5,"\u7701\u4efd":5,"\u771f\u5b9e\u4e3b\u673aip":5,"\u77ed\u4fe1\u5b57\u6570\u8d85\u8fc770\u4e2a\u540e":5,"\u77ed\u4fe1\u6700\u5927\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7600\u4e2a\u5b57":5,"\u77ed\u4fe1\u6a21\u677f\u5185\u5bb9":5,"\u77ed\u4fe1\u6a21\u677f\u540d\u79f0":5,"\u77ed\u4fe1\u6a21\u677f\u72b6\u6001":5,"\u77ed\u4fe1\u6a21\u677f\u7528\u9014\u7c7b\u578b":5,"\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u539f\u56e0\u8bf4\u660e":5,"\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u77ed\u4fe1\u6a21\u677f\u7981\u6b62\u4ec5\u5305\u62ec\u53d8\u91cf\u7684\u60c5\u51b5":5,"\u77ed\u4fe1\u6a21\u677fid":5,"\u77ed\u4fe1\u7b7e\u540d\u540d\u79f0":5,"\u77ed\u4fe1\u7b7e\u540d\u6388\u6743\u59d4\u6258\u6587\u4ef6":5,"\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u539f\u56e0":5,"\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u77ed\u4fe1\u7b7e\u540d\u7684\u8d44\u8d28\u8bc1\u660e\u6587\u4ef6":5,"\u77ed\u4fe1\u7b7e\u540did":5,"\u786c\u4ef6\u9694\u79bb\u7ec4id":5,"\u78c1\u76d8\u540d\u79f0":5,"\u78c1\u76d8\u5907\u4efd\u65b9\u6848":5,"\u78c1\u76d8\u5927\u5c0f":5,"\u78c1\u76d8\u5c5e\u6027":5,"\u78c1\u76d8\u6570\u91cf":5,"\u78c1\u76d8\u662f\u5426\u52a0\u5bc6":5,"\u78c1\u76d8\u76d8\u7b26":5,"\u78c1\u76d8\u7a7a\u95f4":5,"\u78c1\u76d8\u7c7b\u578b":5,"\u78c1\u76d8id":5,"\u78c1\u76d8io\u6027\u80fd":5,"\u793a\u4f8b":5,"\u793e\u4f1a\u4fe1\u7528\u4ee3\u7801\u8bc1\u4e66":5,"\u7981\u7528":5,"\u7981\u752822\u7aef\u53e3":5,"\u79c1\u6709\u4e13\u533a\u4e3b\u673a":5,"\u79c1\u94a5":5,"\u79d2":5,"\u79f0\u547c":5,"\u79fb\u51fa\u5171\u4eab\u5e26\u5bbd\u540e":5,"\u7a7a\u95f2\u8fde\u63a5\u7684\u56de\u6536\u65f6\u95f4":5,"\u7a7a\u95f4\u540d\u79f0":5,"\u7a7a\u95f4\u7c7b\u578b":5,"\u7aef\u53e3":5,"\u7aef\u53e3\u53f7":5,"\u7aef\u53e3\u68c0\u67e5":5,"\u7b26\u53f7":5,"\u7b26\u5408\u6761\u4ef6\u7684\u5171\u4eab\u5e26\u5bbd\u603b\u6570":5,"\u7b26\u5408\u90fd\u8ba1\u4e3a\u4e00\u4e2a\u5b57":5,"\u7b2c\u4e00\u4e2a\u53c2\u6570\u4ee3\u8868\u534f\u8bae":5,"\u7b2c\u4e09\u4e2a\u53c2\u6570\u4e3aip":5,"\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4ee3\u8868\u7aef\u53e3\u53f7":5,"\u7b2c\u4e94\u4e2a\u53c2\u6570\u4f18\u5148\u7ea7":5,"\u7b2c\u516d\u4e2a\u53c2\u6570\u4e3a\u8be5\u6761\u89c4\u5219\u7684\u81ea\u5b9a\u4e49\u5907\u6ce8":5,"\u7b2c\u56db\u4e2a\u53c2\u6570\u4e3aaccept":5,"\u7b49":5,"\u7b49\u5b57\u6837":5,"\u7b7e\u540d\u5185\u5bb9":5,"\u7b7e\u540d\u5ba1\u6838\u5931\u8d25\u539f\u56e0":5,"\u7b7e\u540d\u72b6\u6001":5,"\u7b7e\u540d\u7528\u9014":5,"\u7b7e\u540d\u7684\u8d44\u8d28\u8bc1\u660e\u6587\u4ef6\u7c7b\u578b":5,"\u7b7e\u540d\u7c7b\u578b":5,"\u7b7e\u540did":5,"\u7b7e\u540did\u548c\u7b7e\u540d\u81f3\u5c11\u9700\u586b\u51991\u9879":5,"\u7ba1\u7406\u5458":5,"\u7ba1\u7406\u5458\u5bc6\u7801":5,"\u7ba1\u7406\u5458\u5e10\u6237\u540d":5,"\u7c7b\u578b":5,"\u7cbe\u786e\u5230\u5c0f\u6570\u70b9\u540e2\u4f4d":5,"\u7cfb\u7edf\u4f1a\u81ea\u52a8\u6dfb\u52a0":5,"\u7cfb\u7edf\u5927\u5c0f":5,"\u7cfb\u7edf\u76d8":5,"\u7cfb\u7edf\u76d8\u4e0d\u652f\u6301\u7f29\u5bb9":5,"\u7cfb\u7edf\u76d8\u5927\u5c0f":5,"\u7cfb\u7edf\u76d8\u72b6\u6001":5,"\u7cfb\u7edf\u901a\u77e5\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u7ebf\u8def\u5e26\u5bbd\u4e0a\u9650":5,"\u7ec4\u4ef6\u4fe1\u606f":5,"\u7ec4\u540d\u79f0":5,"\u7ec4\u7684\u603b\u7684\u8282\u70b9\u4e2a\u6570":5,"\u7ec4\u7684id":5,"\u7ec4\u7ec7\u673a\u6784\u4ee3\u7801\u8bc1\u4e66":5,"\u7ec4\u81ea\u52a8\u5907\u4efd\u5f00\u59cb\u65f6\u95f4":5,"\u7ec4id":5,"\u7ed1\u5b9a\u4e86\u8be5\u8def\u7531\u8868\u7684\u5b50\u7f51\u6570\u91cf":5,"\u7ed1\u5b9a\u544a\u8b66\u6a21\u677f\u5931\u8d25\u53ea\u4f1a\u5728\u540e\u53f0\u6709\u65e5\u5fd7":5,"\u7ed1\u5b9a\u5b50\u7f51\u7684\u8def\u7531\u8868":5,"\u7ed1\u5b9a\u7684\u5171\u4eab\u5e26\u5bbdid":5,"\u7ed1\u5b9a\u8be5\u9632\u706b\u5899\u7684\u8d44\u6e90id":5,"\u7ed1\u5b9a\u8d44\u6e90\u603b\u6570":5,"\u7ed1\u5b9a\u8d44\u6e90\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u7ed1\u5b9a\u9632\u706b\u5899\u7ec4\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u7ed1\u5b9a\u9632\u706b\u5899\u7ec4\u7684\u8d44\u6e90id":5,"\u7ed3\u675f\u65f6\u95f4":5,"\u7f16\u7801":5,"\u7f16\u8f91udb\u5b9e\u4f8b\u7684\u5907\u4efd\u9ed1\u540d\u5355":5,"\u7f3a\u7701\u503c":5,"\u7f3a\u7701\u503c\u4e3a":5,"\u7f51\u5361\u5347\u964d\u7ea7":5,"\u7f51\u7ad9\u540d\u79f0":5,"\u7f51\u7edc\u589e\u5f3a":5,"\u7f51\u7edc\u589e\u5f3a1":5,"\u7f51\u7edc\u589e\u5f3a2":5,"\u7f51\u7edc\u589e\u5f3a\u7b49":5,"\u7f51\u7edc\u72b6\u6001":5,"\u7f51\u7edc\u73af\u5883":5,"\u7f51\u7edc\u76d8":5,"\u7f51\u7edcid":5,"\u8054\u901a":5,"\u81ea\u5236\u955c\u50cfid":5,"\u81ea\u52a8":5,"\u81ea\u52a8\u5907\u4efd\u5f00\u59cb\u65f6\u95f4":5,"\u81ea\u52a8\u751f\u6210":5,"\u81ea\u52a8\u751f\u6210kei":5,"\u81ea\u52a8\u7eed\u8d39":5,"\u81ea\u52a8\u9009\u62e9\u52a0\u5bc6\u76d8":5,"\u81ea\u5b9a\u4e49\u955c\u50cf":5,"\u81ea\u7528":5,"\u81f3\u5c116\u4f4d":5,"\u81f3\u5c11\u524d\u4e00\u5929":5,"\u8282\u70b9\u5206\u914d\u7684\u670d\u52a1\u7aef\u53e3":5,"\u8282\u70b9\u7684\u865a\u62dfip\u5730\u5740":5,"\u8282\u70b9\u7684\u914d\u7f6eid":5,"\u82e5\u4e0d\u4f20\u503c":5,"\u82e5\u4e0d\u4f20\u5165\u56fd\u9645\u533a\u53f7":5,"\u82e5\u4e0d\u586b\u5199":5,"\u82e5\u4e0d\u6307\u5b9a\u5219\u8fd4\u56de\u5f53\u524d\u6570\u636e\u4e2d\u5fc3\u4e2d\u6240\u6709\u7684\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u82e5\u4e0d\u6307\u5b9a\u5219\u8fd4\u56de\u5f53\u524d\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u4e0b\u6240\u6709vserver\u7684\u4fe1\u606f":5,"\u82e5\u4e3a\u7a7a":5,"\u82e5\u586b\u5199":5,"\u82e5\u5bfc\u5165\u63a7\u5236\u53f0\u4e0a\u6ca1\u6709\u7684\u64cd\u4f5c\u7cfb\u7edf":5,"\u82e5\u5f00\u901a\u4e86\u6570\u636e\u65b9\u821f":5,"\u82e5\u6307\u5b9a\u5219\u8fd4\u56de\u6307\u5b9a\u7684\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u82e5\u6307\u5b9a\u5219\u8fd4\u56de\u6307\u5b9a\u7684vserver\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u82e5\u6307\u5b9a\u7684\u6a21\u677fid\u5ba1\u6838\u672a\u901a\u8fc7":5,"\u82e5\u65e0\u6b64\u5b57\u6bb5\u5219\u4e0d\u505a\u4fee\u6539":5,"\u82e5\u6a21\u677fid\u6307\u5b9a\u7684\u6a21\u677f\u65e0\u53ef\u53d8\u53c2\u6570":5,"\u82e5\u6ca1\u6709\u7533\u8bf7\u9ed8\u8ba4\u7b7e\u540d\u4e0d\u5141\u8bb8\u53d1\u9001":5,"\u82e5\u76f4\u63a5\u901a\u8fc7\u57fa\u7840\u955c\u50cf\u521b\u5efa":5,"\u82e5\u8d85\u8fc712\u5c0f\u65f6\u672a\u8fd4\u56de":5,"\u82e5\u8f93\u5165\u6b64\u5b57\u6bb5":5,"\u82e5\u8f93\u5165\u7684\u7b7e\u540d\u6ca1\u6709\u7533\u8bf7":5,"\u82e5\u9700\u8981\u8bf7\u7533\u8bf7\u5f00\u901a\u76f8\u5173\u6743\u9650":5,"\u82f1\u6587":5,"\u8303\u56f4":5,"\u8303\u56f4\u662f":5,"\u83b7\u53d6":5,"\u83b7\u53d6\u4e13\u7ebf\u5347\u7ea7\u4ef7\u683c":5,"\u83b7\u53d6\u4e3b\u5907redis\u5907\u4efd\u4e0b\u8f7d\u94fe\u63a5":5,"\u83b7\u53d6\u4e3b\u673a\u6216\u4e3b\u673a\u5217\u8868\u4fe1\u606f":5,"\u83b7\u53d6\u5171\u4eab\u5e26\u5bbd\u4fe1\u606f":5,"\u83b7\u53d6\u5185\u7f51vip\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u53c2\u6570\u7ec4\u8be6\u7ec6\u53c2\u6570\u4fe1\u606f":5,"\u83b7\u53d6\u5b50\u7f51\u4fe1\u606f":5,"\u83b7\u53d6\u5e26\u5bbd\u7528\u91cf\u4fe1\u606f":5,"\u83b7\u53d6\u5f39\u6027ip\u4ef7\u683c":5,"\u83b7\u53d6\u5f39\u6027ip\u4fe1\u606f":5,"\u83b7\u53d6\u5f39\u6027ip\u5e26\u5bbd\u6539\u52a8\u4ef7\u683c":5,"\u83b7\u53d6\u5f39\u6027ip\u8ba1\u8d39\u6a21\u5f0f":5,"\u83b7\u53d6\u5f53\u524d\u652f\u6301\u7684\u4e13\u7ebf\u7ebf\u8def\u5217\u8868":5,"\u83b7\u53d6\u6240\u6709\u8ba1\u8d39\u6a21\u5f0f\u7684\u4ef7\u683c":5,"\u83b7\u53d6\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u7684\u4e1a\u52a1\u7ec4\u5217\u8868":5,"\u83b7\u53d6\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u955c\u50cf\u5217\u8868":5,"\u83b7\u53d6\u6307\u5b9auhost\u5b9e\u4f8b\u7684\u7ba1\u7406vnc\u914d\u7f6e\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u6700\u65e9\u53ef\u56de\u6863\u65f6\u95f4\u70b9":5,"\u83b7\u53d6\u67d0\u5730\u57df\u4e0b\u7684\u5e26\u5bbd\u5305\u4fe1\u606f":5,"\u83b7\u53d6\u7269\u7406\u4e91\u4e3b\u673a\u955c\u50cf\u5217\u8868":5,"\u83b7\u53d6\u7269\u7406\u673a\u4ef7\u683c\u5217\u8868":5,"\u83b7\u53d6\u7269\u7406\u673a\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u7269\u7406\u673atag\u5217\u8868":5,"\u83b7\u53d6\u7528\u6237\u4fe1\u606f":5,"\u83b7\u53d6\u7528\u6237\u5728\u5404\u6570\u636e\u4e2d\u5fc3\u7684\u6743\u9650\u7b49\u4fe1\u606f":5,"\u83b7\u53d6\u77ed\u4fe1\u53d1\u9001\u56de\u6267\u4fe1\u606f":5,"\u83b7\u53d6\u8d44\u6e90\u5176\u4ed6\u4fe1\u606f":5,"\u83b7\u53d6\u8def\u7531\u8868\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u955c\u50cfid":5,"\u83b7\u53d6\u9632\u706b\u5899\u7ec4\u4fe1\u606f":5,"\u83b7\u53d6\u9632\u706b\u5899\u7ec4\u6240\u7ed1\u5b9a\u8d44\u6e90\u7684\u5916\u7f51ip":5,"\u83b7\u53d6\u9879\u76ee\u5217\u8868":5,"\u83b7\u53d6globalssh\u5b9e\u4f8b\u5217\u8868":5,"\u83b7\u53d6globalssh\u8986\u76d6\u7684\u5730\u533a\u5217\u8868":5,"\u83b7\u53d6ssl\u8bc1\u4e66\u4fe1\u606f":5,"\u83b7\u53d6udb\u5907\u4efd\u4e0b\u8f7d\u5730\u5740":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u4fe1\u606f":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u5347\u964d\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u5907\u4efd\u72b6\u6001":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u72b6\u6001":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u7684\u5907\u4efd\u9ed1\u540d\u5355":5,"\u83b7\u53d6udb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684binlog\u5217\u8868":5,"\u83b7\u53d6udb\u652f\u6301\u7684\u7c7b\u578b\u4fe1\u606f":5,"\u83b7\u53d6udb\u6700\u65e9\u53ef\u56de\u6863\u7684\u65f6\u95f4\u70b9":5,"\u83b7\u53d6udb\u7684binlog\u5907\u4efd\u5730\u5740":5,"\u83b7\u53d6udb\u7684slowlog\u5907\u4efd\u5730\u5740":5,"\u83b7\u53d6udisk\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udisk\u5b9e\u4f8b":5,"\u83b7\u53d6udisk\u5b9e\u4f8b\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udisk\u5feb\u7167":5,"\u83b7\u53d6uhost\u5b9e\u4f8b\u5347\u7ea7\u914d\u7f6e\u7684\u4ef7\u683c":5,"\u83b7\u53d6uhost\u5b9e\u4f8b\u7684\u4ef7\u683c":5,"\u83b7\u53d6ulb\u4e0b\u7684vserver\u7684\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6ulb\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6umem\u5185\u5b58\u7a7a\u95f4\u5217\u8868":5,"\u83b7\u53d6umem\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6umem\u5b9e\u4f8b\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6umemcache\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6umemcache\u7ec4\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6uredis\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6vpc\u4e92\u901a\u4fe1\u606f":5,"\u83b7\u53d6vpc\u4fe1\u606f":5,"\u865a\u62df\u7f51\u5361":5,"\u865a\u62dfcpu\u6838\u6570":5,"\u865a\u62dfip":5,"\u884c\u4e1a\u955c\u50cf":5,"\u884c\u4e1a\u955c\u50cf\u7c7b\u578b":5,"\u8868\u793a":5,"\u8868\u793a\u4ece\u5e93\u5907\u4efd\u5f00\u5173\u6253\u5f00":5,"\u8868\u793a\u4f7f\u7528\u5feb\u7167":5,"\u8868\u793a\u4f7f\u7528\u903b\u8f91\u5907\u4efd":5,"\u8868\u793a\u5177\u4f53\u9519\u8bef\u63cf\u8ff0":5,"\u8868\u793a\u5347\u7ea7":5,"\u8868\u793a\u53ea\u62c9\u53d6\u8de8\u53ef\u7528\u533a\u7684\u76f8\u5173\u914d\u7f6e\u6587\u4ef6":5,"\u8868\u793a\u6253\u5f00\u661f\u671f\u516d\u548c\u661f\u671f\u4e94\u7684\u81ea\u52a8\u5907\u4efd\u529f\u80fd":5,"\u8868\u793a\u662f\u5171\u4eab\u5e26\u5bbd":5,"\u8868\u793a\u7981\u7528\u8fde\u63a5\u4fdd\u6301":5,"\u8868\u793a\u7cfb\u52171":5,"\u8868\u793a\u7cfb\u52172":5,"\u88ab\u514b\u9686\u7684\u8def\u7531\u8868id":5,"\u88ab\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684\u7248\u672c\u53f7":5,"\u88ab\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684id":5,"\u88ab\u7981\u7528":5,"\u88abssh\u8bbf\u95ee\u7684eip":5,"\u88abssh\u8bbf\u95ee\u7684ip":5,"\u88abssh\u8bbf\u95ee\u7684ip\u6240\u5728\u5730\u533a":5,"\u8981\u5220\u9664\u7684udisk\u7684id":5,"\u8981\u52a0\u5165\u5171\u4eab\u5e26\u5bbd\u7684eip\u7684\u8d44\u6e90id":5,"\u8981\u5347\u7ea7\u7684\u7a7a\u95f4\u7684groupid":5,"\u8981\u67e5\u8be2\u7684\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u89c1":5,"\u89c4\u5219id":5,"\u89c4\u683c\u8c03\u6574\u5dee\u4ef7":5,"\u89c4\u8303\u793a\u4f8b":5,"\u89e3\u7ed1eip":5,"\u89e3\u7ed1eip\u540e":5,"\u8ba1\u7b97\u7aef\u53e3":5,"\u8ba1\u8d39\u65f6\u957f":5,"\u8ba1\u8d39\u65f6\u95f4\u5355\u4f4d":5,"\u8ba1\u8d39\u6a21\u5f0f":5,"\u8ba1\u8d39\u6a21\u5f0f\u4e3adynamic\u65f6":5,"\u8ba1\u8d39\u7c7b\u578b":5,"\u8bbe\u5b9a\u4e1a\u52a1\u7ec4":5,"\u8bbe\u5b9a\u5b9e\u4f8b\u540d\u79f0":5,"\u8bbe\u5b9a\u5bc6\u7801":5,"\u8bbe\u7f6e\u5f39\u6027ip\u8ba1\u8d39\u6a21\u5f0f":5,"\u8bbe\u7f6e\u89c4\u5219\u8bf7\u53c2\u7167disktyp":5,"\u8bbe\u7f6eudisk\u6570\u636e\u65b9\u821f\u7684\u72b6\u6001":5,"\u8bbf\u95ee\u8be5\u57df\u540d\u53ef\u5c31\u8fd1\u63a5\u5165":5,"\u8bc1\u4e66\u5185\u5bb9\u4f20\u8fc7\u6765":5,"\u8bd5\u7528":5,"\u8be5\u4e1a\u52a1\u7ec4\u4e2d\u5305\u542b\u7684\u4e3b\u673a\u4e2a\u6570":5,"\u8be5\u503c\u4e3a\u7a7a":5,"\u8be5\u503c\u53ef\u4ee5\u901a\u8fc7describeudbbackup\u83b7\u53d6":5,"\u8be5\u503c\u53ef\u4ee5\u901a\u8fc7describeudbinstance\u83b7\u53d6":5,"\u8be5\u503c\u53ef\u901a\u8fc7describeudbinstance\u83b7\u53d6":5,"\u8be5\u5904\u663e\u793a\u4e3a\u5171\u4eab\u5e26\u5bbd\u503c":5,"\u8be5\u5904\u663e\u793a\u8fd9\u4e2a\u5f39\u6027ip\u7684\u5e26\u5bbd":5,"\u8be5\u5b57\u6bb5\u65e0\u6548":5,"\u8be5\u5f39\u6027ip\u4e0d\u4f1a\u88ab\u4f7f\u7528":5,"\u8be5\u5feb\u7167\u7684\u5bc6\u6587\u5bc6\u94a5":5,"\u8be5\u5feb\u7167\u7684cmk":5,"\u8be5\u5feb\u7167cmk\u7684\u72b6\u6001":5,"\u8be5\u76d8\u5feb\u7167\u4e0a\u9650":5,"\u8be5\u76d8\u5feb\u7167\u4e2a\u6570":5,"\u8be5\u76d8\u7684\u5bc6\u6587\u5bc6\u94a5":5,"\u8be5\u76d8\u7684cmk":5,"\u8be5\u76d8cmk\u7684\u72b6\u6001":5,"\u8be5\u914d\u7f6e\u6587\u4ef6\u662f\u5426\u662f\u5730\u57df\u7ea7\u522b\u914d\u7f6e\u6587\u4ef6":5,"\u8be5\u9879\u4e3a\u5fc5\u586b\u9879":5,"\u8be5\u9879\u5fc5\u586b":5,"\u8be6\u89c1describeuredisversion\u8fd4\u56de\u7ed3\u679c":5,"\u8be6\u89c1param":5,"\u8be6\u8be2\u6280\u672f\u652f\u6301":5,"\u8bf4\u660e\u5982\u4e0b":5,"\u8bf4\u660e\u67e5\u770b\u6574\u4e2a\u53ef\u7528\u533a\u7684\u4e13\u533a\u7684db":5,"\u8bf7\u52ff\u5c06\u591a\u4e2a\u7ed1\u5b9a\u5728\u540c\u4e00\u8d44\u6e90\u7684\u5f39\u6027ip\u8bbe\u7f6e\u4e3a\u76f8\u540c\u6743\u91cd":5,"\u8bf7\u53c2\u8003":5,"\u8bf7\u53c2\u8003\u63a7\u5236\u53f0":5,"\u8bf7\u53c2\u8003\u63a7\u5236\u53f0\u7684\u955c\u50cf\u7248\u672c":5,"\u8bf7\u53c2\u8003describecoupon\u63a5\u53e3":5,"\u8bf7\u53c2\u8003describeumemcachegroup\u63a5\u53e3":5,"\u8bf7\u53c2\u8003describeuredisgroup\u63a5\u53e3":5,"\u8bf7\u6c42\u4e2d\u7684protocolversion\u5b57\u6bb5\u4e3a0\u6216\u6ca1\u6709\u8be5\u5b57\u6bb5\u65f6":5,"\u8bf7\u6c42\u4e2d\u7684protocolversion\u5b57\u6bb5\u4e3a1\u65f6":5,"\u8bf7\u6c42\u4ee3\u7406":5,"\u8bf7\u6c42\u4ee3\u7406\u53ea\u652f\u6301\u4fee\u6539\u4e3a":5,"\u8bf7\u6c42\u4ee3\u7406\u6a21\u5f0f\u4e0b\u6709":5,"\u8bf7\u6c42\u4ee3\u7406\u7684vserver\u4e0b\u8868\u793a\u7a7a\u95f2\u8fde\u63a5\u7684\u56de\u6536\u65f6\u95f4":5,"\u8bf7\u6c42\u521b\u5efa\u7ec4\u7684\u540d\u79f0":5,"\u8bf7\u6c42\u534f\u8bae\u7248\u672c":5,"\u8bf7\u901a\u8fc7":5,"\u8bf7\u901a\u8fc7describecoupon\u63a5\u53e3\u67e5\u8be2":5,"\u8bf7\u9075\u7167":5,"\u8c03\u6574\u4e3b\u5907redis\u5bb9\u91cf":5,"\u8c03\u6574\u5171\u4eab\u5e26\u5bbd\u7684\u5e26\u5bbd\u503c":5,"\u8c03\u6574\u5185\u5b58\u7a7a\u95f4\u5bb9\u91cf":5,"\u8c03\u6574\u540e\u4e13\u7ebf\u5e26\u5bbd":5,"\u8c03\u6574\u540e\u5927\u5c0f":5,"\u8c03\u6574\u540e\u7684ssh\u767b\u9646\u7aef\u53e3":5,"\u8c03\u6574\u5e26\u5bbd\u540e\u7684eip\u4ef7\u683c":5,"\u8c03\u6574\u5f39\u6027ip\u7684\u5916\u7f51\u5e26\u5bbd":5,"\u8c03\u6574\u7684\u76ee\u6807\u5e26\u5bbd\u503c":5,"\u8c03\u6574udisk\u5bb9\u91cf":5,"\u8c03\u7528\u63a5\u53e3createusmssignature\u7533\u8bf7\u77ed\u4fe1\u7b7e\u540d":5,"\u8c03\u7528\u63a5\u53e3createusmstemplate\u7533\u8bf7\u77ed\u4fe1\u6a21\u677f":5,"\u8c03\u7528\u63a5\u53e3deleteusmssignature\u5220\u9664\u77ed\u4fe1\u7b7e\u540d":5,"\u8c03\u7528\u63a5\u53e3deleteusmstemplate\u5220\u9664\u77ed\u4fe1\u6a21\u677f":5,"\u8c03\u7528\u63a5\u53e3queryusmssignature\u67e5\u8be2\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u72b6\u6001":5,"\u8c03\u7528\u63a5\u53e3queryusmstemplate\u67e5\u8be2\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u72b6\u6001":5,"\u8c03\u7528\u63a5\u53e3updateusmssignature\u4fee\u6539\u672a\u901a\u8fc7\u5ba1\u6838\u7684\u77ed\u4fe1\u7b7e\u540d":5,"\u8c03\u7528\u63a5\u53e3updateusmstemplate\u4fee\u6539\u672a\u901a\u8fc7\u5ba1\u6838\u7684\u77ed\u4fe1\u6a21\u677f":5,"\u8c03\u7528\u65b9\u5f0f\u4e3e\u4f8b":5,"\u8c03\u7528\u8be5api":5,"\u8d1f\u8f7d\u5747\u8861":5,"\u8d1f\u8f7d\u5747\u8861\u5668":5,"\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684id":5,"\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8bid":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u540d\u5b57":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u5907\u6ce8":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u8d44\u6e90\u540d\u79f0":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u8d44\u6e90id":5,"\u8d1f\u8f7d\u5747\u8861\u8d44\u6e90id":5,"\u8d2d\u4e70\u5230\u6708\u5e95":5,"\u8d2d\u4e70\u53f0\u6570":5,"\u8d2d\u4e70\u6570\u91cf":5,"\u8d2d\u4e70\u65f6\u957f":5,"\u8d2d\u4e70\u7684\u65f6\u957f":5,"\u8d2d\u4e70db\u5b9e\u4f8b\u6570\u91cf":5,"\u8d2d\u4e70udisk\u5927\u5c0f":5,"\u8d2d\u4e70udisk\u7684\u65f6\u957f":5,"\u8d2d\u4e70umem\u5927\u5c0f":5,"\u8d2d\u4e70umem\u7684\u65f6\u957f":5,"\u8d2d\u4e70umemcache\u5927\u5c0f":5,"\u8d2d\u4e70umemcache\u7684\u65f6\u957f":5,"\u8d2d\u4e70uredis\u5927\u5c0f":5,"\u8d44\u6e90":5,"\u8d44\u6e90\u521b\u5efa\u65f6\u95f4\u6233":5,"\u8d44\u6e90\u540d\u79f0":5,"\u8d44\u6e90\u552f\u4e00\u6807\u8bc6":5,"\u8d44\u6e90\u5b9e\u4f8b\u7684\u7c7b\u578b":5,"\u8d44\u6e90\u5b9e\u4f8b\u7684\u8d44\u6e90\u540d\u79f0":5,"\u8d44\u6e90\u5b9e\u4f8b\u7684\u8d44\u6e90id":5,"\u8d44\u6e90\u662f\u5426\u8fc7\u671f":5,"\u8d44\u6e90\u6709\u6548\u671f":5,"\u8d44\u6e90\u7684\u552f\u4e00\u6807\u8bc6":5,"\u8d44\u6e90\u7684ipv6\u5730\u5740":5,"\u8d44\u6e90\u77ed":5,"\u8d44\u6e90\u7c7b\u578b":5,"\u8d44\u6e90\u7cfb\u7edf\u4e2d":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u5b9e\u4f8b\u7684\u7c7b\u578b":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u5b9e\u4f8b\u7684\u8d44\u6e90\u540d\u79f0":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u5b9e\u4f8b\u7684\u8d44\u6e90id":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u540d\u79f0":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u5b9e\u4f8b\u540d\u79f0":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u5b9e\u4f8bid":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u7c7b\u578b":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684id":5,"\u8d44\u6e90\u8fc7\u671f\u65f6\u95f4\u6233":5,"\u8d44\u6e90id":5,"\u8d44\u6e90ip":5,"\u8d77\u59cb\u65f6\u95f4":5,"\u8d85\u8fc7\u6700\u5927\u7248\u672c\u4f1a\u8fd4\u56de\u9519\u8bef":5,"\u8de8\u53ef\u7528\u533a\u9ad8\u53ef\u7528\u5907\u5e93\u6240\u5728\u53ef\u7528\u533a":5,"\u8de8\u53ef\u7528\u533a\u9ad8\u53ef\u7528db\u7684\u5907\u5e93\u6240\u5728\u533a\u57df":5,"\u8de8\u673a\u623f\u9ad8\u53ef\u7528\u5907\u5e93\u6240\u5728\u53ef\u7528\u533a":5,"\u8de8\u673a\u623furedi":5,"\u8def\u5f84":5,"\u8def\u5f84\u68c0\u67e5":5,"\u8def\u7531\u4e0b\u4e00\u8df3id":5,"\u8def\u7531\u7b56\u7565\u589e":5,"\u8def\u7531\u8868\u540d\u79f0":5,"\u8def\u7531\u8868\u5907\u6ce8":5,"\u8def\u7531\u8868\u6240\u5c5evpc":5,"\u8def\u7531\u8868\u7c7b\u578b":5,"\u8def\u7531\u8868id":5,"\u8def\u7531\u89c4\u5219\u5907\u6ce8":5,"\u8def\u7531\u89c4\u5219\u7c7b\u578b":5,"\u8def\u7531id":5,"\u8f6c\u53d1\u89c4\u5219\u7684id":5,"\u8f6c\u6d41\u91cf\u8ba1\u8d39":5,"\u8f6e\u8be2":5,"\u8f93\u5165\u4e0d\u5e26\u5355\u4f4d":5,"\u8f93\u5165\u53c2\u6570\u4e3aother":5,"\u8fc7\u671f":5,"\u8fc7\u671f\u65f6\u95f4":5,"\u8fc7\u6ee4\u6761\u4ef6":5,"\u8fd0\u7ef4\u65f6\u95f40":5,"\u8fd0\u8425\u5546\u4fe1\u606f":5,"\u8fd0\u8425\u5546\u4fe1\u606f\u5982":5,"\u8fd0\u884c":5,"\u8fd0\u884c\u4e2d":5,"\u8fd4\u56de":5,"\u8fd4\u56de\u503c\u4e2d\u7684diskset":5,"\u8fd4\u56de\u6240\u6709\u652f\u6301\u5730\u533a":5,"\u8fd4\u56de\u652f\u6301\u67d0\u79cd\u5b9e\u4f8b\u7c7b\u578b\u7684db\u7c7b\u578b":5,"\u8fd4\u56de\u652f\u6301\u67d0\u79cd\u78c1\u76d8\u7c7b\u578b\u7684db\u7c7b\u578b":5,"\u8fd4\u56de\u6570\u636e\u504f\u79fb\u91cf":5,"\u8fd4\u56de\u6570\u636e\u5206\u9875\u503c":5,"\u8fd4\u56de\u6570\u636e\u957f\u5ea6":5,"\u8fd4\u56de\u6d88\u606f":5,"\u8fd4\u56de\u72b6\u6001\u7801\u63cf\u8ff0":5,"\u8fd4\u56de\u7684":5,"\u8fd4\u56de\u7801":5,"\u8fd4\u56de\u8be5\u5b9e\u4f8b\u6240\u5728\u96c6\u7fa4\u4e2d\u7684\u89d2\u8272":5,"\u8fd4\u56de\u8be5\u76d8\u6240\u505a\u5feb\u7167":5,"\u8fd4\u56de\u8fd0\u7ef4\u65f6\u95f4":5,"\u8fd8\u9700\u8981\u5728\u4e3b\u673a\u5185\u90e8\u8fdb\u884c\u6587\u4ef6\u7cfb\u7edf\u64cd\u4f5c":5,"\u8fd9\u4e24\u5957\u7b2c\u4e8c\u5957\u53c2\u6570\u7684\u4f18\u5148\u7ea7\u66f4\u9ad8":5,"\u8fde\u63a5":5,"\u9000\u8ba2\u4fe1\u606f":5,"\u9000\u8ba2\u56de\u590dd":5,"\u9000\u8ba2\u56de\u590dn":5,"\u9000\u8ba2\u56de\u590dt":5,"\u9000\u8ba2\u56de\u590dtd":5,"\u9000\u8ba2\u56ded":5,"\u9000\u8ba2\u56det":5,"\u9000\u8ba2\u56detd":5,"\u9000\u8d39":5,"\u9002\u7528\u4e8e\u4e00\u6b21\u67e5\u8be2\u4e00\u4e2a\u5b50\u7f51\u4fe1\u606f":5,"\u9002\u7528\u4e8e\u4e00\u6b21\u67e5\u8be2\u591a\u4e2a\u5b50\u7f51\u4fe1\u606f":5,"\u9009\u62e9\u52a0\u5bc6\u76d8\u65f6\u5fc5\u586b":5,"\u9009\u62e9\u9ed8\u8ba4\u7684\u5907\u4efd\u65b9\u5f0f":5,"\u9009\u9879":5,"\u901a\u77e5\u7c7b":5,"\u901a\u8fc7\u5b50\u7f51\u7b5b\u9009\u4e3b\u673a":5,"\u901a\u8fc7\u786c\u4ef6\u9694\u79bb\u7ec4\u7b5b\u9009\u4e3b\u673a":5,"\u901a\u8fc7describeroutetable\u62ff\u5230":5,"\u901a\u8fc7vpc\u7b5b\u9009\u4e3b\u673a":5,"\u90a3\u4e48\u53ea\u62c9\u53d6\u8fd9\u4e2a\u5907\u4efd\u7684\u8bb0\u5f55":5,"\u90a3\u4e48\u628a\u8fd9\u4e2adbid\u5b9e\u4f8b\u7684\u6240\u6709\u4ece\u5e93\u4fe1\u606f\u4e00\u8d77\u62c9\u53d6\u5e76\u8fd4\u56de":5,"\u914d\u7f6e\u4e2d":5,"\u914d\u7f6e\u5185\u5bb9":5,"\u914d\u7f6e\u53c2\u6570\u7ec4\u540d\u79f0":5,"\u914d\u7f6e\u53c2\u6570\u7ec4id":5,"\u914d\u7f6e\u5931\u8d25":5,"\u914d\u7f6e\u5931\u8d25restart":5,"\u914d\u7f6e\u6587\u4ef6\u5b50\u7c7b\u578b":5,"\u914d\u7f6e\u6587\u4ef6\u7684\u540d\u5b57":5,"\u914d\u7f6e\u6587\u4ef6\u7684\u63cf\u8ff0":5,"\u914d\u7f6e\u670d\u52a1\u5668\u7684dbid":5,"\u914d\u7f6e\u8282\u70b9":5,"\u914d\u7f6eid":5,"\u914d\u7f6einstancetyp":5,"\u914d\u7f6eusessd\u548cssdtyp":5,"\u91c7\u7528\u65f6\u95f4\u6233":5,"\u91c7\u7528utc\u8ba1\u65f6\u65f6\u95f4\u6233":5,"\u91ca\u653e":5,"\u91ca\u653e\u5f39\u6027ip\u8d44\u6e90":5,"\u91ca\u653evip\u8d44\u6e90":5,"\u91cc\u7684\u57df\u540d":5,"\u91cd\u542f\u4e2d":5,"\u91cd\u542f\u5355\u673amemcach":5,"\u91cd\u542f\u7269\u7406\u673a":5,"\u91cd\u542fudb\u5b9e\u4f8b":5,"\u91cd\u547d\u540d\u7684udisk\u7684id":5,"\u91cd\u547d\u540dudb\u5b9e\u4f8b":5,"\u91cd\u547d\u540dudisk":5,"\u91cd\u547d\u540dudisk\u7684nam":5,"\u91cd\u65b0\u542f\u52a8uhost\u5b9e\u4f8b":5,"\u91cd\u65b0\u5b89\u88c5\u6307\u5b9auhost\u5b9e\u4f8b\u7684\u64cd\u4f5c\u7cfb\u7edf":5,"\u91cd\u7f6euhost\u5b9e\u4f8b\u7684\u7ba1\u7406\u5458\u5bc6\u7801":5,"\u91cd\u88c5\u7269\u7406\u673a\u64cd\u4f5c\u7cfb\u7edf":5,"\u91cf\u5927\u5c0f":5,"\u9488\u5bf9\u975e\u79c1\u6709\u5b50\u7f51\u4e3b\u673a":5,"\u9519\u8bef\u4fe1\u606f":5,"\u9519\u8bef\u63cf\u8ff0":5,"\u955c\u50cf\u540d\u79f0":5,"\u955c\u50cf\u5927\u5c0f":5,"\u955c\u50cf\u5e02\u573a":5,"\u955c\u50cf\u63cf\u8ff0":5,"\u955c\u50cf\u683c\u5f0f":5,"\u955c\u50cf\u72b6\u6001":5,"\u955c\u50cf\u7c7b\u522b":5,"\u955c\u50cf\u7c7b\u578b":5,"\u955c\u50cfid":5,"\u955c\u50cfid\u8fdb\u884c\u8fc7\u6ee4":5,"\u957f\u5ea6":5,"\u957f\u5ea6\u4e3a2":5,"\u957f\u5ea6\u8981\u6c42\u4e3a6":5,"\u9632\u706b\u5899\u4e1a\u52a1\u7ec4":5,"\u9632\u706b\u5899\u52a8\u4f5c":5,"\u9632\u706b\u5899\u540d\u79f0":5,"\u9632\u706b\u5899\u5907\u6ce8":5,"\u9632\u706b\u5899\u63cf\u8ff0":5,"\u9632\u706b\u5899\u7ec4\u521b\u5efa\u65f6\u95f4":5,"\u9632\u706b\u5899\u7ec4\u7c7b\u578b":5,"\u9632\u706b\u5899\u7ed1\u5b9a\u8d44\u6e90\u6570\u91cf":5,"\u9632\u706b\u5899\u89c4\u5219":5,"\u9632\u706b\u5899\u89c4\u5219\u5907\u6ce8":5,"\u9632\u706b\u5899\u8d44\u6e90id":5,"\u9632\u706b\u5899id":5,"\u9694\u79bb\u7ec4id":5,"\u96c6\u6210\u8f6f\u4ef6\u540d\u79f0":5,"\u9700\u4e0e\u7b7e\u540d\u7c7b\u578b\u4fdd\u6301\u4e00\u81f4":5,"\u9700\u5148\u8fdb\u884cbase64\u7f16\u7801\u683c\u5f0f\u8f6c\u6362":5,"\u9700\u586b\u5199projectid":5,"\u9700\u5f00\u542f\u6743\u9650":5,"\u9700\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u53cauhostid":5,"\u9700\u6307\u5b9aoffset":5,"\u9700\u7ed3\u5408isboot\u786e\u5b9a\u5177\u4f53\u78c1\u76d8\u7c7b\u578b":5,"\u9700\u8981":5,"\u9700\u8981\u4fdd\u7559\u7684vpc\u7f51\u6bb5":5,"\u9700\u8981\u5217\u51fa\u7684\u5907\u4efd\u6587\u4ef6\u7c7b\u578b":5,"\u9700\u8981\u521b\u5efa\u7684\u5de5\u4f5c\u6d41\u540d\u79f0":5,"\u9700\u8981\u521b\u5efa\u7684\u5de5\u4f5c\u6d41namespac":5,"\u9700\u8981\u5347\u7ea7\u7684\u7a7a\u95f4\u7684groupid":5,"\u9700\u8981\u5347\u7ea7\u7684\u7a7a\u95f4\u7684spaceid":5,"\u9700\u8981\u5378\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u9700\u8981\u540c\u65f6\u8bbe\u7f6ebackupdate\u5b57\u6bb5":5,"\u9700\u8981\u548c":5,"\u9700\u8981\u5907\u4efd\u6587\u4ef6":5,"\u9700\u8981\u5927\u4e8e\u539fsize":5,"\u9700\u8981\u6062\u590d\u7684\u76d8id":5,"\u9700\u8981\u6302\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u9700\u8981\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u53cauhostid\u4e24\u4e2a\u53c2\u6570\u7684\u503c":5,"\u9700\u8981\u6307\u5b9amongo\u7684\u89d2\u8272":5,"\u9700\u8981\u6dfb\u52a0\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u7684\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8bid":5,"\u9700\u8981\u6dfb\u52a0\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u7684vserver\u5b9e\u4f8bid":5,"\u9700\u8981\u7ed9\u51fa\u6570\u636e\u4e2d\u5fc3":5,"\u9700\u8981\u8bbe\u7f6e\u6570\u636e\u65b9\u821f\u7684udisk\u7684id":5,"\u9700\u8981\u8fd4\u56de\u7684\u5171\u4eab\u5e26\u5bbdid":5,"\u975e\u5171\u4eab\u5e26\u5bbd":5,"\u975e\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f":5,"\u975e\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f\u5fc5\u987b\u6307\u5b9a\u975e0mbps\u5e26\u5bbd":5,"\u975e\u52a0\u5bc6\u76d8":5,"\u975e\u8d44\u6e90\u81ea\u8eabid":5,"\u975e\u9ed8\u8ba4\u9879\u76ee\u8d44\u6e90":5,"\u975essd\u8d44\u6e90\u4e0d\u518d\u63d0\u4f9b":5,"\u9879\u76ee\u4e0b\u6210\u5458\u6570\u91cf":5,"\u9879\u76ee\u4e0b\u8d44\u6e90\u6570\u91cf":5,"\u9879\u76ee\u540d\u79f0":5,"\u9879\u76ee\u603b\u6570":5,"\u9879\u76eeid":5,"\u9884\u4ed8\u8d39":5,"\u9999\u6e2f":5,"\u9a8c\u8bc1\u7801\u7c7b":5,"\u9a8c\u8bc1\u7801\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u9ad8":5,"\u9ad8\u53ef\u7528":5,"\u9ad8\u53ef\u7528\u67b6\u6784":5,"\u9ad8\u53ef\u7528\u7248udb\u5b9e\u4f8b":5,"\u9ad8\u53ef\u7528\u90e8\u7f72\u5b9e\u4f8b":5,"\u9ad8\u6027\u80fdumem":5,"\u9ed1\u540d\u5355":5,"\u9ed8\u8ba4":5,"\u9ed8\u8ba41\u70b9":5,"\u9ed8\u8ba41g":5,"\u9ed8\u8ba41gb":5,"\u9ed8\u8ba424\u5c0f\u65f6":5,"\u9ed8\u8ba427017":5,"\u9ed8\u8ba43\u70b9":5,"\u9ed8\u8ba47\u6b21":5,"\u9ed8\u8ba480":5,"\u9ed8\u8ba4\u4e0d\u4f7f\u7528":5,"\u9ed8\u8ba4\u4e0d\u586b":5,"\u9ed8\u8ba4\u4e0d\u66f4\u6539":5,"\u9ed8\u8ba4\u4e0d\u8fd4\u56de":5,"\u9ed8\u8ba4\u4e0e\u6e90vpc\u540c\u5730\u57df":5,"\u9ed8\u8ba4\u4e0e\u6e90vpc\u540c\u9879\u76ee":5,"\u9ed8\u8ba4\u4e3a":5,"\u9ed8\u8ba4\u4e3a0":5,"\u9ed8\u8ba4\u4e3a1":5,"\u9ed8\u8ba4\u4e3a1\u53f0":5,"\u9ed8\u8ba4\u4e3a20":5,"\u9ed8\u8ba4\u4e3a24":5,"\u9ed8\u8ba4\u4e3a50":5,"\u9ed8\u8ba4\u4e3a\u4e0d\u66f4\u6539":5,"\u9ed8\u8ba4\u4e3a\u5168\u90e8\u5730\u57df":5,"\u9ed8\u8ba4\u4e3a\u5168\u90e8\u8d44\u6e90\u7c7b\u578b":5,"\u9ed8\u8ba4\u4e3a\u5168\u90e8\u9879\u76ee":5,"\u9ed8\u8ba4\u4e3a\u542f\u7528":5,"\u9ed8\u8ba4\u4e3a\u5f53\u524d\u5730\u57df\u7684\u9ed8\u8ba4\u5b50\u7f51":5,"\u9ed8\u8ba4\u4e3a\u5f53\u524d\u5730\u57df\u7684\u9ed8\u8ba4vpc":5,"\u9ed8\u8ba4\u4e3a\u6309\u6708\u4ed8\u8d39":5,"\u9ed8\u8ba4\u4e3a\u6708\u4ed8":5,"\u9ed8\u8ba4\u4e3a\u6807\u51c6\u955c\u50cf":5,"\u9ed8\u8ba4\u4e3a\u6e90vpc\u6240\u5728\u5730\u57df":5,"\u9ed8\u8ba4\u4e3a\u6e90vpc\u6240\u5728\u9879\u76eeid":5,"\u9ed8\u8ba4\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u4e3a\u7acb\u5373\u5f00\u901a":5,"\u9ed8\u8ba4\u4e3a\u83b7\u53d6\u4e09\u79cd\u4ef7\u683c":5,"\u9ed8\u8ba4\u4e3a\u8fd4\u56de\u6240\u6709\u9632\u706b\u5899":5,"\u9ed8\u8ba4\u4e3abandwidth":5,"\u9ed8\u8ba4\u4e3adatadisk":5,"\u9ed8\u8ba4\u4e3adefault":5,"\u9ed8\u8ba4\u4e3afals":5,"\u9ed8\u8ba4\u4e3alocaldisk":5,"\u9ed8\u8ba4\u4e3ams_redi":5,"\u9ed8\u8ba4\u4e3aphost":5,"\u9ed8\u8ba4\u4e3asubnet":5,"\u9ed8\u8ba4\u4e3atrue":5,"\u9ed8\u8ba4\u4e3avip":5,"\u9ed8\u8ba4\u4f1a\u83b7\u53d6\u53d1\u5e03\u7248\u672c\u5bf9\u5e94\u7684workflow":5,"\u9ed8\u8ba4\u4f7f\u7528\u4e3b\u5e93\u7684\u914d\u7f6e":5,"\u9ed8\u8ba4\u4f7f\u7528\u539f\u955c\u50cf":5,"\u9ed8\u8ba4\u503c":5,"\u9ed8\u8ba4\u503c1":5,"\u9ed8\u8ba4\u503c\u4e3a":5,"\u9ed8\u8ba4\u503c\u4e3a0":5,"\u9ed8\u8ba4\u503c\u4e3a1":5,"\u9ed8\u8ba4\u503c\u4e3a10":5,"\u9ed8\u8ba4\u503c\u4e3a20":5,"\u9ed8\u8ba4\u503c\u4e3a60":5,"\u9ed8\u8ba4\u503c\u4e3a80":5,"\u9ed8\u8ba4\u503c\u4e3a\u5f53\u524d\u5b9e\u4f8b\u7684\u5185\u5b58\u5927\u5c0f":5,"\u9ed8\u8ba4\u503c\u4e3a\u5f53\u524d\u5b9e\u4f8b\u7684\u6570\u636e\u76d8\u5927\u5c0f":5,"\u9ed8\u8ba4\u503c\u4e3a\u5f53\u524d\u5b9e\u4f8b\u7684cpu\u6838\u6570":5,"\u9ed8\u8ba4\u503c\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u503c\u4e3anormal":5,"\u9ed8\u8ba4\u503c\u662f\u8be5\u4e3b\u673a\u5f53\u524d\u6570\u636e\u76d8\u5927\u5c0f":5,"\u9ed8\u8ba4\u5168\u90e8\u83b7\u53d6":5,"\u9ed8\u8ba4\u5173\u95ed":5,"\u9ed8\u8ba4\u5173\u95ed\u4f1a\u8bdd\u4fdd\u6301":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1\u7c7b\u578b\u4e0b\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1\u7c7b\u578b\u4e0b\u8fd4\u56de\u5f53\u524drs\u603b\u6570":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u4e0b\u4e3a0":5,"\u9ed8\u8ba4\u5355\u4f4d\u79d2":5,"\u9ed8\u8ba4\u5373\u4e3a\u5916\u7f51\u6a21\u5f0f":5,"\u9ed8\u8ba4\u5f53":5,"\u9ed8\u8ba4\u662f":5,"\u9ed8\u8ba4\u662ffals":5,"\u9ed8\u8ba4\u662fno":5,"\u9ed8\u8ba4\u662fnormal":5,"\u9ed8\u8ba4\u666e\u901a":5,"\u9ed8\u8ba4\u6839\u636e\u914d\u7f6e\u673a\u578b":5,"\u9ed8\u8ba4\u7248\u672c3":5,"\u9ed8\u8ba4\u79fb\u51fa\u8be5\u5171\u4eab\u5e26\u5bbd\u4e0b\u6240\u6709\u7684eip":5,"\u9ed8\u8ba4\u8fd4\u56de\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u8fd4\u56de\u6240\u6709\u7c7b\u578b":5,"\u9ed8\u8ba4\u9009\u9879":5,"\u9ed8\u8ba4\u914d\u7f6eid":5,"\u9ed8\u8ba4\u975eweb\u9632\u706b\u5899":5,"\u9ed8\u8ba4disabl":5,"\u9ed8\u8ba4dynam":5,"\u9ed8\u8ba4fals":5,"\u9ed8\u8ba4raid10":5,"\u9ed8\u8ba4redi":5,"\u9ed8\u8ba4root":5,"\u9ed8\u8ba4web\u9632\u706b\u5899":5,"activity\u7684\u540d\u5b57":5,"activity\u7684\u7c7b\u578b":5,"activity\u7684\u8d85\u65f6\u65f6\u95f4":5,"activity\u7684\u8f93\u5165":5,"activity\u7684\u8f93\u51fa":5,"activity\u7684\u91cd\u8bd5\u6b21\u6570":5,"api\u652f\u6301":5,"app\u5e94\u7528\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"area\u548careacode\u4e24\u8005\u5fc5\u586b\u4e00\u4e2a":5,"bd\u5b9e\u4f8bid":5,"binlog\u5907\u4efd":5,"binlog\u6587\u4ef6\u540d":5,"binlog\u6587\u4ef6\u5927\u5c0f":5,"binlog\u6587\u4ef6\u751f\u6210\u65f6\u95f4":5,"binlog\u6587\u4ef6\u7ed3\u675f\u65f6\u95f4":5,"ca\u8bc1\u4e66":5,"ca\u8bc1\u4e66\u5206\u522b\u4f20\u8fc7\u6765":5,"class":[1,5],"cloudinit\u65b9\u5f0f\u4e0b":5,"configsvr\u8282\u70b9\u548c\u4ece\u5907\u4efd\u6062\u590d\u5b9e\u4f8b":5,"cpu\u4e2a\u6570":5,"cpu\u4e3b\u9891":5,"cpu\u578b\u53f7":5,"cpu\u6838\u6570":5,"dataset\u4e2d\u7684\u5143\u7d20\u4e2a\u6570":5,"db\u5173\u95ed\u72b6\u6001\u4e0b\u5347\u964d\u7ea7":5,"db\u5907\u4efd\u6587\u4ef6\u540d\u79f0":5,"db\u5b9e\u4f8b\u4f7f\u7528\u7684\u914d\u7f6e\u53c2\u6570\u7ec4id":5,"db\u5b9e\u4f8b\u4fee\u6539\u65f6\u95f4":5,"db\u5b9e\u4f8b\u521b\u5efa\u65f6\u95f4":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u516c\u7f51\u7684\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u5185\u7f51\u7684\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u7684\u516c\u7f51\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u7684\u5185\u7f51\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efdid":5,"db\u5b9e\u4f8b\u6240\u5728\u53ef\u7528\u533a":5,"db\u5b9e\u4f8b\u6570\u636e\u6587\u4ef6\u5927\u5c0f":5,"db\u5b9e\u4f8b\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f":5,"db\u5b9e\u4f8b\u7684id":5,"db\u5b9e\u4f8b\u78c1\u76d8\u5df2\u4f7f\u7528\u7a7a\u95f4":5,"db\u5b9e\u4f8b\u7c7b\u578b":5,"db\u5b9e\u4f8b\u7cfb\u7edf\u6587\u4ef6\u5927\u5c0f":5,"db\u5b9e\u4f8b\u865aip":5,"db\u5b9e\u4f8b\u865aip\u7684mac\u5730\u5740":5,"db\u5b9e\u4f8b\u89d2\u8272":5,"db\u5b9e\u4f8b\u8fc7\u671f\u65f6\u95f4":5,"db\u5b9e\u4f8bbinlog\u5907\u4efdid":5,"db\u5b9e\u4f8bid":5,"db\u72b6\u6001\u6807\u8bb0":5,"db\u7684\u9ed1\u540d\u5355\u5217\u8868":5,"db\u79cd\u7c7b":5,"db\u7c7b\u578bid":5,"db\u8d2d\u4e70\u591a\u5c11\u4e2a":5,"default":[1,5,6],"default\u5373\u4e3a\u672a\u5206\u7ec4":5,"disk\u6ce8\u91ca":5,"disks\u6570\u7ec4\u4e2d\u6709\u4e14\u53ea\u80fd\u6709\u4e00\u5757\u76d8\u662f\u7cfb\u7edf\u76d8":5,"eip\u5e26\u5bbd\u503c":5,"eip\u7684\u5916\u7f51\u5e26\u5bbd":5,"eip\u7684\u8ba1\u8d39\u6a21\u5f0f":5,"eip\u7684\u8d44\u6e90id":5,"eip\u8d44\u6e90id":5,"eipset\u4e2d\u7684\u5143\u7d20\u4e2a\u6570":5,"enable\u6216dis":5,"false\u4e3a\u672a\u5f00\u542f":5,"false\u52a0\u5bc6\u5fc5\u987b\u4f20\u5165\u5bf9\u5e94\u7684\u7684kmskeyid":5,"false\u6807\u8bc6\u53ea\u89e3\u7ed1eip":5,"false\u8868\u793a\u4e0d\u4f7f\u7528":5,"float":[1,5],"function":[1,2],"getprojectlist\u63a5\u53e3":5,"globalssh\u7684":5,"globalssh\u8986\u76d6\u7684\u5730\u533a":5,"gpu\u4e2a\u6570":5,"gpu\u5361\u6838\u5fc3\u6570":5,"gpu\u7c7b\u578b":5,"group\u7684id":5,"hadoop\u8282\u70b9":5,"import":[3,4,6],"initializing\u8868\u793a\u5728\u521d\u59cb\u5316":5,"int":[1,2,5],"ip\u4fe1\u606f":5,"ip\u5730\u5740":5,"ip\u5730\u5740\u5bf9\u5e94\u7684\u5b50\u7f51":5,"ip\u5730\u5740\u5bf9\u5e94\u7684vpc":5,"ip\u5bf9\u5e94\u5e26\u5bbd":5,"ip\u5bf9\u5e94\u7684\u5e26\u5bbd":5,"ip\u7c7b\u578b":5,"ip\u8d44\u6e90id":5,"ipv4\u6216\u8005ipv6":5,"isinudbc\u4e3atru":5,"kafka\u6d88\u606f\u961f\u5217":5,"keypair\u516c\u94a5":5,"leastconn\u53ea\u5728\u8bf7\u6c42\u4ee3\u7406\u4e2d\u4f7f\u7528":5,"limit\u7528\u4e8e\u5217\u8868\u64cd\u4f5c":5,"listentype\u4e3apacketstransmit\u65f6\u8868\u793a\u8fde\u63a5\u4fdd\u6301\u7684\u65f6\u95f4":5,"listentype\u4e3arequestproxy\u65f6\u8868\u793a\u7a7a\u95f2\u8fde\u63a5\u7684\u56de\u6536\u65f6\u95f4":5,"loginmode\u4e0d\u53ef\u53d8\u66f4":5,"loginmode\u4e3akeypair\u65f6\u6b64\u9879\u5fc5\u987b":5,"mac\u5730\u5740":5,"master\u5b9e\u4f8b\u7684dbid":5,"master\u8282\u70b9":5,"memcache\u7248\u672c\u4fe1\u606f":5,"message\u4e2d\u663e\u793a\u5177\u4f53\u9519\u8bef\u63cf\u8ff0":5,"mongodb\u5219\u4e0d\u9002\u7528":5,"mongodb\u591a\u79cd\u89d2\u8272":5,"mongodb\u6309\u7248\u672c\u7ec6\u5206\u5404\u6709\u4e00\u4e2aid":5,"mongodb\u6309\u7248\u672c\u7ec6\u5206\u67091":5,"mongodb\u9ed8\u8ba427017":5,"mysql\u533a\u5206mast":5,"mysql\u5b9e\u4f8b\u652f\u6301\u7269\u7406\u5907\u4efd":5,"mysql\u9ed8\u8ba43306":5,"n\u4e3a\u81ea\u7136\u6570":5,"n\u53ef\u4e3a0":5,"n\u65b9\u5f0f\u4f20\u5165":5,"name\u5fc5\u987b\u586b\u5199":5,"nat\u7f51\u5173":5,"new":[1,3,4],"no\u4e3a\u4e0d\u53ef\u4ee5\u5347\u7ea7":5,"no\u4e3a\u5173\u95ed\u65b9\u821f":5,"none\u548cserverinsert":5,"none\u6216serverinsert":5,"normal\u548csata_ssd":5,"normal\u8868\u793a\u521d\u59cb\u5316\u5b8c\u6210":5,"ostype\u4e3aother\u65f6":5,"phost\u7684\u8d44\u6e90id\u6570\u7ec4":5,"phost\u8d44\u6e90id":5,"postgesql\u6309\u7248\u672c\u7ec6\u5206":5,"postgresql\u9ed8\u8ba45432":5,"primary\u8282\u70b9\u7684dbid":5,"protocolversion\u5b57\u6bb5\u4e3a0\u6216\u6ca1\u6709\u8be5\u5b57\u6bb5\u65f6":5,"protocolversion\u5b57\u6bb5\u4e3a1\u4e14disktype\u4e0d\u4e3a\u7a7a\u65f6":5,"protocolversion\u5b57\u6bb5\u4e3a1\u4e14disktype\u4e3a\u7a7a\u65f6":5,"protocolversion\u5b57\u6bb5\u4e3a1\u65f6":5,"public":[3,4],"quantity\u5c31\u662f2":5,"raid\u914d\u7f6e":5,"redhat\u7b49":5,"redis\u6240\u5728\u53ef\u7528\u533a":5,"redis\u65e0single\u7c7b\u578b":5,"redis\u7248\u672c\u4fe1\u606f":5,"redis\u7ec4\u540d\u79f0":5,"region\u4e2d\u7b26\u5408\u6761\u4ef6\u7684\u6240\u6709eip\u7684\u5e26\u5bbd\u7528\u91cf":5,"region\u4e2d\u7b26\u5408\u6761\u4ef6\u7684\u7684\u6240\u6709eip":5,"remark\u5fc5\u987b\u586b\u51991\u4e2a\u53ca\u4ee5\u4e0a":5,"remark\u90fd\u4e3a\u7a7a\u5219\u62a5\u9519":5,"return":[1,2,6],"routeruleid\u6765\u81eadescriberoutetable\u4e2d":5,"routetables\u5b57\u6bb5\u7684\u6570\u91cf":5,"rs\u5168\u90e8\u8fd0\u884c\u5f02\u5e38":5,"rs\u5168\u90e8\u8fd0\u884c\u6b63\u5e38":5,"rs\u5bf9\u5e94\u7684uhost":5,"rs\u7684\u8d44\u6e90id":5,"rs\u90e8\u5206\u8fd0\u884c\u5f02\u5e38":5,"rssd\u6570\u636e\u76d8":5,"shardsrv\u5206\u4e3adatanode\u548carbiter\u4e24\u79cd\u6a21\u5f0f":5,"slave\u6240\u5728\u53ef\u7528\u533a":5,"slowlog\u5907\u4efd":5,"source\u548cweightroundrobin\u5728\u8bf7\u6c42\u4ee3\u7406\u548c\u62a5\u6587\u8f6c\u53d1\u4e2d\u4f7f\u7528":5,"sqlserver\u5e10\u53f7":5,"ssd\u4e91\u76d8":5,"ssd\u5927\u5bb9\u91cf\u673a\u578b":5,"ssd\u6570\u636e\u76d8":5,"ssd\u673a\u578b":5,"ssd\u76d8":5,"ssd\u7c7b\u578b":5,"ssd\u7cfb\u7edf\u76d8":5,"ssd\u9ad8\u6027\u80fd\u5927\u5bb9\u91cf\u673a\u578b":5,"ssd\u9ad8\u6027\u80fd\u673a\u578b":5,"ssh\u767b\u9646\u7aef\u53e3":5,"ssh\u7aef\u53e3":5,"ssl\u8bc1\u4e66\u7684\u540d\u5b57":5,"ssl\u8bc1\u4e66\u7684\u5b8c\u6574\u5185\u5bb9":5,"ssl\u8bc1\u4e66\u7684id":5,"static":5,"status\u4e0d\u7b49\u4e8e2":5,"super":5,"tablename\u4e3a\u6307\u5b9a\u8868":5,"tag\u5fc5\u987b\u586b\u5199":5,"tag\u7684\u4e2a\u6570":5,"td\u9000\u8ba2":5,"timerange\u65f6\u95f4\u6bb5\u5185\u751f\u6548":5,"timestamp\u8868\u793a":5,"true":5,"true\u4e3a\u5f00\u542f":5,"true\u5220\u9664":5,"true\u8868\u793a\u4f1a\u91ca\u653e\u7ed1\u5b9a\u7684eip":5,"true\u8868\u793a\u903b\u8f91\u5907\u4efd\u65f6\u662f\u4f7f\u7528":5,"try":[3,4],"types\u4f5c\u4e3atype\u7684\u8865\u5145":5,"ucloud\u673a\u623f\u4ee3\u53f7\u6784\u6210\u7684\u6570\u7ec4":5,"udb\u5b9e\u4f8b\u6a21\u5f0f\u7c7b\u578b":5,"udb\u5b9e\u4f8b\u7684\u914d\u7f6e":5,"udb\u5b9e\u4f8b\u7684db\u7248\u672c\u5b57\u7b26\u4e32":5,"udb\u5b9e\u4f8b\u7c7b\u578b":5,"udb\u5b9e\u4f8b\u90e8\u7f72\u6a21\u5f0f":5,"udb\u6570\u636e\u5e93\u673a\u578b":5,"udb\u6570\u636e\u5e93\u673a\u578bid":5,"udbcid\u4e3a\u7a7a":5,"udisk\u540d\u5b57":5,"udisk\u5b9e\u4f8bid":5,"ufile\u79c1\u6709\u7a7a\u95f4\u5730\u5740":5,"uhost\u4e3b\u673a\u7684\u8d44\u6e90id":5,"uhost\u4e3b\u673a\u7684\u8d44\u6e90id\u6570\u7ec4":5,"uhost\u5b9e\u4f8b\u540d\u79f0":5,"uhost\u5b9e\u4f8b\u8d44\u6e90id":5,"uhost\u5b9e\u4f8bid":5,"uhost\u5b9e\u4f8bid\u96c6\u5408":5,"uhost\u5bc6\u7801":5,"uhost\u65b0\u5bc6\u7801":5,"uhost\u8d44\u6e90id":5,"uhostinstance\u603b\u6570":5,"ukmsmode\u4e3ayes\u65f6":5,"ulb\u540e\u7aefid":5,"ulb\u6240\u5728\u7684vpc\u7684id":5,"ulb\u6240\u5c5e\u7684\u4e1a\u52a1\u7ec4id":5,"ulb\u6240\u5c5e\u7684\u5b50\u7f51id":5,"ulb\u6240\u5c5e\u7684vpc":5,"ulb\u7684\u5185\u7f51ip":5,"ulb\u7684\u521b\u5efa\u65f6\u95f4":5,"ulb\u7684\u5230\u671f\u65f6\u95f4":5,"ulb\u7684\u8be6\u7ec6\u4fe1\u606f\u5217\u8868":5,"ulb\u8d44\u6e90id":5,"umem\u5185\u5b58\u7a7a\u95f4id":5,"umem\u5b9e\u4f8b\u8bbf\u95eeip":5,"umem\u5b9e\u4f8b\u8bbf\u95eeport":5,"unix\u65f6\u95f4\u6233":5,"uredis\u5bc6\u7801":5,"utc\u65f6\u95f4\u683c\u5f0f":5,"v1\u7248\u672c\u6982\u5ff5":5,"v2\u7248\u672c\u6982\u5ff5":5,"vip\u540d":5,"vip\u6570\u91cf":5,"vnc\u767b\u5f55\u7aef\u53e3":5,"vnc\u767b\u5f55ip":5,"vpc\u5173\u8054\u7684ipv6\u7f51\u6bb5":5,"vpc\u5173\u8054\u7684ipv6\u7f51\u6bb5\u6240\u5c5e\u8fd0\u8425\u5546":5,"vpc\u540d\u5b57":5,"vpc\u540d\u79f0":5,"vpc\u5730\u5740\u7a7a\u95f4":5,"vpc\u7684\u5730\u5740\u7a7a\u95f4":5,"vpc\u7684id":5,"vpc\u77edid":5,"vpc\u7c7b\u578b":5,"vpc\u7f51\u6bb5":5,"vpc\u8d44\u6e90id":5,"vserver\u4f1a\u8bdd\u4fdd\u6301\u65b9\u5f0f":5,"vserver\u4f1a\u8bdd\u4fdd\u6301\u6a21\u5f0f":5,"vserver\u534f\u8bae\u7c7b\u578b":5,"vserver\u540e\u7aef\u7aef\u53e3":5,"vserver\u5b9e\u4f8b\u540d\u79f0":5,"vserver\u5b9e\u4f8b\u7684\u534f\u8bae":5,"vserver\u5b9e\u4f8b\u7684\u540d\u5b57":5,"vserver\u5b9e\u4f8b\u7684id":5,"vserver\u5b9e\u4f8bid":5,"vserver\u670d\u52a1\u7aef\u53e3":5,"vserver\u7684\u8fd0\u884c\u72b6\u6001":5,"vserver\u8d1f\u8f7d\u5747\u8861\u6a21\u5f0f":5,"vserver\u8d1f\u8f7d\u5747\u8861\u7684\u6a21\u5f0f":5,"web\u63a8\u8350\u9632\u706b\u5899":5,"ws\u7b49":5,"year\u7b49":5,"yes\u4e3a\u5f00\u542f\u65b9\u821f":5,"yes\u5373\u53ef\u4ee5\u5347\u7ea7":5,"zone\u4e0d\u586b\u8868\u793a\u591a\u53ef\u7528\u533a":5,For:6,IPs:5,SAS:5,Yes:5,a9q2:5,abc7:5,abcdefghijklmnopqrstuvwxyz:2,abov:[3,4],acceleratingdomain:5,access:[3,4],account:1,accountnam:5,achiev:[2,6],action:[1,5],activit:5,activitytempl:5,add:[1,5,6],add_vpc_network:5,address:5,addvpcnetwork:5,admin:5,administr:5,adminpassword:5,adminus:5,after:2,agent:1,alarmtemplateid:5,all:[2,6],allocate_backend:5,allocate_backend_batch:5,allocate_eip:5,allocate_share_bandwidth:5,allocate_udpn:5,allocate_vip:5,allocatebackend:5,allocatebackendbatch:5,allocateeip:5,allocatesharebandwidth:5,allocateudpn:5,allocatevip:5,allow:[5,6],allowedv:5,also:[1,6],ani:2,apach:3,api:[1,4],apikei:1,apivers:5,append:1,applytyp:5,area:5,areacod:5,areaset:5,arg:1,argument:[1,2],arkswitchen:5,associate_eip_with_share_bandwidth:5,associate_route_t:5,associateeipwithsharebandwidth:5,associateroutet:5,attach:5,attach_udisk:5,attachudisk:5,attribut:1,auth:[1,5],authent:[3,4],authstat:5,auto:[1,5],autobackup:5,autorenew:5,avail:[1,5],b1d0:5,b64d:5,b64decod:2,b64encod:[2,3,4],back:6,backend:[1,5],backendid:5,backendset:5,backoff:[1,2],backoff_factor:1,backup:5,backup_udb_inst:5,backup_udb_instance_binlog:5,backup_udb_instance_error_log:5,backup_udb_instance_slow_log:5,backupbegintim:5,backupblacklist:5,backupcount:5,backupd:5,backupdur:5,backupendtim:5,backupfil:5,backupid:5,backupmethod:5,backupnam:5,backuppath:5,backups:5,backupswitch:5,backuptim:5,backuptyp:5,backupudbinst:5,backupudbinstancebinlog:5,backupudbinstanceerrorlog:5,backupudbinstanceslowlog:5,backupurl:5,backupzon:5,bandwidth:5,bandwidthguarante:5,bandwidthpackageid:5,bandwidthtyp:5,bandwidthupperlimit:5,bar:1,base64:[2,5],base64ugfzc3dvcmqx:5,base:5,base_url:1,baseurl:1,basicimageid:5,basicimagenam:5,bce8:5,befor:2,beforetim:5,begintim:5,belong:1,between:6,bgp:5,bind:[3,4],bind_eip:5,bind_ssl:5,bindeip:5,bindssl:5,binlog:5,binlog_backup:5,bitmap:5,bj1:5,bj2:[1,3,4,5,6],bkk:5,blacklist:5,bool:5,boot:5,bootdiskspac:5,bootdiskst:5,broadwel:5,builtin:1,busi:5,businessid:5,bwtype:5,c245:5,c6b9a46fd801:5,cacert:5,calcul:1,call:2,can:[1,3,4,6],cannot:[3,4],cascadelak:5,certificatetyp:5,chang:3,chargenam:5,chargetyp:5,check:6,check_recover_udb_inst:5,check_udb_instance_to_ha_allow:5,checkrecoverudbinst:5,checkudbinstancetohaallow:5,chinamobil:5,citi:5,cjksa2:5,classtyp:5,clear_udb_log:5,clearudblog:5,client:[3,4,5],clienttimeout:5,clone:[3,4,5],clone_route_t:5,clone_udisk:5,clone_udisk_snapshot:5,cloneen:5,cloneroutet:5,cloneudisk:5,cloneudisksnapshot:5,cloud:2,cloud_norm:5,cloud_rssd:5,cloud_ssd:[3,4,5],cluserrol:5,cluster:5,clusterrol:5,cmk:5,cmkid:5,cmkidalia:5,cmkidstatu:5,code:[1,3,4,5],com:[3,4],comment:5,companynam:5,complet:6,compon:5,config:[3,5],configfail:5,configid:5,configsrv_csr:5,configsrv_sccc:5,configsvr:5,configsvrid:5,connect:5,consistenthash:5,consistenthashport:5,content:5,copy_custom_imag:5,copycustomimag:5,core:[3,4,6],corecount:5,costcount:5,could:[1,3,4],count:5,couponid:5,cpu:[3,4,5,6],cpuset:5,creat:[2,3,4,5,6],create_bandwidth_packag:5,create_custom_imag:5,create_firewal:5,create_global_ssh_inst:5,create_phost:5,create_polici:5,create_project:5,create_route_t:5,create_sf_workflow_from_templ:5,create_ssl:5,create_subnet:5,create_udb_inst:5,create_udb_instance_by_recoveri:5,create_udb_param_group:5,create_udb_replication_inst:5,create_udb_route_inst:5,create_udb_slav:5,create_udisk:5,create_udisk_snapshot:5,create_uhost_inst:[3,4,5,6],create_ulb:5,create_umem_cache_group:5,create_umem_spac:5,create_uredis_group:5,create_usms_signatur:5,create_usms_templ:5,create_vpc:5,create_vpc_intercom:5,create_vserv:5,createbandwidthpackag:5,createcustomimag:5,createfail:5,createfirewal:5,createglobalsshinst:5,createphost:5,createpolici:5,createproject:5,createroutet:5,createsfworkflowfromtempl:5,createssl:5,createsubnet:5,createtim:5,createudbinst:5,createudbinstancebyrecoveri:5,createudbparamgroup:5,createudbreplicationinst:5,createudbrouteinst:5,createudbslav:5,createudisk:5,createudisksnapshot:5,createuhostinst:[1,5],createuhostinstanceparamdisk:5,createuhostinstanceparamnetworkinterfac:5,createuhostinstanceparamnetworkinterfaceeip:5,createuhostinstanceparamnetworkinterfaceeipglobalssh:5,createulb:5,createumemcachegroup:5,createumemspac:5,createuredisgroup:5,createusmssignatur:5,createusmstempl:5,createvpc:5,createvpcintercom:5,createvserv:5,cred:1,credenti:1,curbandwidth:5,current:[3,4],custom:[2,5,6],custompric:5,d4411ab30953fb0bbcb1e7313081f05e4e91a394:1,data:[1,5],dataark:5,datadisk:5,datafiles:5,datakei:5,dataset:5,dbaudit:5,dbclustertyp:5,dbid:5,dbname:5,dbtypeid:5,decod:2,def:[1,6],defin:5,delai:[1,6],delet:5,delete_bandwidth_packag:5,delete_firewal:5,delete_global_ssh_inst:5,delete_polici:5,delete_route_t:5,delete_ssl:5,delete_subnet:5,delete_udb_backup:5,delete_udb_inst:5,delete_udb_log_packag:5,delete_udb_param_group:5,delete_udisk:5,delete_udisk_snapshot:5,delete_ulb:5,delete_umem_cache_group:5,delete_umem_spac:5,delete_uredis_group:5,delete_usms_signatur:5,delete_usms_templ:5,delete_vpc:5,delete_vpc_intercom:5,delete_vserv:5,deletebandwidthpackag:5,deletefail:5,deletefirewal:5,deleteglobalsshinst:5,deletepolici:5,deleteroutet:5,deletessl:5,deletesubnet:5,deleteudbbackup:5,deleteudbinst:5,deleteudblogpackag:5,deleteudbparamgroup:5,deleteudisk:5,deleteudisksnapshot:5,deleteulb:5,deleteumemcachegroup:5,deleteumemspac:5,deleteuredisgroup:5,deleteusmssignatur:5,deleteusmstempl:5,deletevpc:5,deletevpcintercom:5,deletevserv:5,describe_bandwidth_packag:5,describe_bandwidth_usag:5,describe_eip:5,describe_firewal:5,describe_firewall_resourc:5,describe_global_ssh_area:5,describe_global_ssh_inst:5,describe_imag:5,describe_phost:5,describe_phost_imag:5,describe_phost_tag:5,describe_route_t:5,describe_share_bandwidth:5,describe_ssl:5,describe_subnet:5,describe_subnet_resourc:5,describe_udb_backup:5,describe_udb_backup_blacklist:5,describe_udb_binlog_backup_url:5,describe_udb_inst:5,describe_udb_instance_backup_st:5,describe_udb_instance_backup_url:5,describe_udb_instance_binlog:5,describe_udb_instance_binlog_backup_st:5,describe_udb_instance_pric:5,describe_udb_instance_st:5,describe_udb_instance_upgrade_pric:5,describe_udb_log_backup_url:5,describe_udb_log_packag:5,describe_udb_param_group:5,describe_udb_typ:5,describe_udisk:5,describe_udisk_pric:5,describe_udisk_snapshot:5,describe_udisk_upgrade_pric:5,describe_udpn:5,describe_uhost_inst:[5,6],describe_uhost_tag:5,describe_ulb:5,describe_umem_cache_group:5,describe_umem_cache_pric:5,describe_umem_cache_upgrade_pric:5,describe_umem_pric:5,describe_umem_spac:5,describe_umem_upgrade_pric:5,describe_uredis_backup:5,describe_uredis_backup_url:5,describe_uredis_group:5,describe_uredis_pric:5,describe_uredis_upgrade_pric:5,describe_vip:5,describe_vpc:5,describe_vpc_intercom:5,describe_vserv:5,describebandwidthpackag:5,describebandwidthusag:5,describeeip:5,describefirewal:5,describefirewallresourc:5,describeglobalssharea:5,describeglobalsshinst:5,describeimag:5,describephost:5,describephostimag:5,describephosttag:5,describeroutet:5,describesecuritygroup:5,describesharebandwidth:5,describessl:5,describesubnet:5,describesubnetresourc:5,describeudbbackup:5,describeudbbackupblacklist:5,describeudbbinlogbackupurl:5,describeudbinst:5,describeudbinstancebackupst:5,describeudbinstancebackupurl:5,describeudbinstancebinlog:5,describeudbinstancebinlogbackupst:5,describeudbinstancepric:5,describeudbinstancest:5,describeudbinstanceupgradepric:5,describeudblogbackupurl:5,describeudblogpackag:5,describeudbparamgroup:5,describeudbtyp:5,describeudisk:5,describeudiskpric:5,describeudisksnapshot:5,describeudiskupgradepric:5,describeudpn:5,describeuhostinst:5,describeuhosttag:5,describeulb:5,describeumemcachegroup:5,describeumemcachepric:5,describeumemcacheupgradepric:5,describeumempric:5,describeumemspac:5,describeumemupgradepric:5,describeuredisbackup:5,describeuredisbackupurl:5,describeuredisgroup:5,describeuredispric:5,describeuredisupgradepric:5,describevip:5,describevpc:5,describevpcintercom:5,describevserv:5,descript:5,descriptor:1,destroi:5,detach:5,detach_udisk:5,detachudisk:5,detail:1,devicenam:5,dict:[1,5],disabl:5,disablesemisync:5,disabletim:5,disassociate_eip_with_share_bandwidth:5,disassociateeipwithsharebandwidth:5,disk:[3,4,5],diskid:5,diskpassword:5,diskset:5,diskspac:5,disktyp:5,diskuseds:5,distinguish:1,dnsserver:5,doc:1,docker:5,document:[1,3],domain:5,doubl:5,drive:5,drop:5,dstaddr:5,dstport:5,dstprojectid:5,dstregion:5,dstvpcid:5,duplet:5,dure:1,dynam:5,e87ab3b8a1ea:5,earliesttim:5,echo:5,edit_udb_backup_blacklist:5,editudbbackupblacklist:5,eip:[3,4,5],eipaddr:5,eipaddrset:5,eipbandwidth:5,eipid:5,eippaymod:5,eippaymodeset:5,eippricedetailset:5,eipset:5,eipsetdata:5,els:[3,4,6],enabl:[1,5],enabletim:5,encod:2,encrypt:5,end:1,endtim:5,equal:1,errdesc:5,error:[1,5],errorinfo:5,errorlog_backup:5,everi:1,exampl:6,exc:[3,4],except:[3,4],expect:2,experi:6,expir:5,expiredtim:5,expiretim:5,exponenti:[1,6],f8a2:5,factor:1,fail:[2,5],fals:5,featur:[5,6],fetch_udb_instance_earliest_recover_tim:5,fetchudbinstanceearliestrecovertim:5,field:6,file:5,financ:5,finish:6,firewalldataset:5,firewallruleset:5,first:2,foo:1,forc:5,forcebackup:5,forcedump:5,forcetokil:5,format:5,formattyp:5,fortresshost:5,found:1,fra:5,free:[3,5],freez:5,frequenc:5,from:[3,4,6],frontendport:5,full:1,functyp:5,fwid:5,gatewai:5,gen_password:[2,3,4],gener:[2,3,4],get:[3,4,6],get_eip_pay_mod:5,get_eip_pric:5,get_eip_upgrade_pric:5,get_phost_pric:5,get_project_list:5,get_region:5,get_sf_workflow_templ:5,get_udpn_line_list:5,get_udpn_pric:5,get_udpn_upgrade_pric:5,get_uhost_instance_pric:5,get_uhost_instance_vnc_info:5,get_uhost_upgrade_pric:5,get_umem_space_st:5,get_user_info:5,get_usms_send_receipt:5,geteippaymod:5,geteippric:5,geteipupgradepric:5,getphostpric:5,getprojectlist:5,getregion:5,getsfworkflowtempl:5,getudpnlinelist:5,getudpnpric:5,getudpnupgradepric:5,getuhostinstancepric:5,getuhostinstancepriceparamdisk:5,getuhostinstancevncinfo:5,getuhostupgradepric:5,getumemspacest:5,getuserinfo:5,getusmssendreceipt:5,git:[3,4],github:[3,4],globalssh:5,globalssharea:5,globalsshinfo:5,gpu:5,gputyp:5,grant_firewal:5,grantfirewal:5,groupid:5,groupnam:5,haarch:5,hadoophost:5,handler:1,haproxi:5,has:6,hashvalu:5,hasnatgw:5,haswel:5,have:1,header:5,helper:[3,6],here:[3,4],high:5,highavail:5,hosttyp:5,hotplugfeatur:5,http:[1,3,4,5],identifi:1,imag:[3,4],image_id:[3,4],imagedescript:5,imageid:[3,4,5],imagenam:5,images:5,imageset:5,imagetyp:5,implement:1,import_custom_imag:5,importcustomimag:5,improv:6,includeslav:5,index:[1,3],industrytyp:5,info:1,inform:1,init:5,initi:5,initializ:5,innerbackuppath:5,innermod:5,input:[2,5],inrecycl:5,inst:6,instal:5,installag:5,installfail:5,instanc:[5,6],instanceid:5,instancemod:5,instanceset:5,instancetyp:5,instancetypeid:5,integ:6,integratedsoftwar:5,intel:5,intern:5,internet:[3,4],interv:2,inus:5,invalid:6,invok:[1,6],iocap:5,ipaddr:5,ipid:5,ipsec:5,ipset:5,ipv4:5,ipv6:5,ipv6address:5,ipv6network:5,ipvers:5,isarbit:5,isboot:5,isdefault:5,isexpir:5,isfin:5,isforc:5,isinudbc:5,islock:5,isolationgroup:5,issu:3,issupportkvm:5,isudiskavail:5,ivybridg:5,jpn:5,k80:5,kei:[1,3,4,5],keypair:5,kms:5,kmskeyid:5,kwarg:[1,5],l342dab130gf:5,lambda:[2,6],lastesttim:5,leastconn:5,len:[1,2],length:2,letter:2,level:[1,6],librari:3,licens:3,lifecycl:[5,6],like:1,limit:5,link:5,linux:[3,5],list:[1,2,5],listentyp:5,liunx:5,localdisk:5,localregion:5,log:1,log_level:1,log_param:6,log_request:6,log_respons:6,logfiles:5,logger:[1,5],logic:[5,6],loginmod:[3,4,5],loglevel:1,logpackagedataset:5,logtyp:5,low:5,lower_lett:2,lowercas:2,macaddr:5,machinetyp:5,maco:3,make:5,manual:5,mariadb:5,master:5,masterdbid:5,mastergroupid:5,match:[5,6],max:[1,2],max_backoff_interv:2,max_retri:1,maxcount:5,maxretri:1,medium:5,membercount:5,memcach:5,memori:[3,4,5],memorylimit:5,memorys:5,messag:5,method:[3,4,5],mget_uhost_st:6,middlewar:[3,5],min_backoff_interv:2,min_low:2,min_numb:2,min_speci:2,min_upp:2,minim:2,minimalcpu:5,minimalcpuplatform:5,miss:6,mmapv1:5,mod:1,model:5,modifi:5,modify_eip_bandwidth:5,modify_eip_weight:5,modify_global_ssh_port:5,modify_global_ssh_remark:5,modify_phost_info:5,modify_project:5,modify_route_rul:5,modify_udb_instance_nam:5,modify_udb_instance_password:5,modify_udpn_bandwidth:5,modify_uhost_instance_nam:5,modify_uhost_instance_remark:5,modify_uhost_instance_tag:5,modify_umem_space_nam:5,modify_uredis_group_nam:5,modifyeipbandwidth:5,modifyeipweight:5,modifyglobalsshport:5,modifyglobalsshremark:5,modifyphostinfo:5,modifyproject:5,modifyrouterul:5,modifytim:5,modifyudbinstancenam:5,modifyudbinstancepassword:5,modifyudpnbandwidth:5,modifyuhostinstancenam:5,modifyuhostinstanceremark:5,modifyuhostinstancetag:5,modifyumemspacenam:5,modifyuredisgroupnam:5,mongo:5,mongodb:5,monitortyp:5,month:5,more:1,most:1,ms_redi:5,multiattach:5,must:1,my_private_kei:1,my_public_kei:1,myapp:1,mysql:5,name:[3,4,5],namespac:5,natgw:5,netcap:5,netcapvalu:5,netenhanced_ultra:5,netmask:5,network:[1,5],networkid:5,networkinfo:5,networkinterfac:5,networkst:5,next:5,nexthopid:5,nexthoptyp:5,nocmkid:5,non:5,none:[1,5],noraid:5,normal:5,normal_volum:5,nosql:5,notconnect:5,number:[1,2],number_lett:2,object:1,objectid:5,occur:1,off:[5,6],offset:5,onli:[3,4],openapi:1,operatornam:5,option:1,organ:1,originalpric:5,osnam:5,ostyp:5,outermod:5,output:[2,5],outsignatur:5,outtempl:5,p40:5,packetstransmit:5,page:3,param:5,paramet:[1,2],paramgroupid:5,paramgrouptypeid:5,parammemb:5,parentid:5,parentnam:5,password1:5,password:[2,3,4,5],path:5,pathx:3,pathxclient:5,paymod:5,pci:5,pcie_ssd:5,pcie_ssd_volum:5,peer1:5,peer2:5,pem:5,pend:[2,6],percona:5,persistenceinfo:5,persistencetyp:5,phone:5,phonenumb:5,phoneprefix:5,phost:5,phostcpuset:5,phostdiskset:5,phostid:5,phostimageset:5,phostipset:5,phostpriceset:5,phostset:5,phosttagset:5,phosttyp:5,pip:[3,4],pmstatu:5,polici:[1,6],policybackendset:5,policyid:5,policyprior:5,policyset:5,policytyp:5,port:5,posit:1,postgresql:5,postpai:5,postpaystarttim:5,poweroff_phost:5,poweroff_uhost_inst:5,poweroffphost:5,poweroffuhostinst:5,powerst:5,prepar:1,price:5,pricedataset:5,priceset:5,primari:5,print:[1,3,4,6],prioriti:5,privat:[3,4,5],private_kei:[1,3,4],privateip:5,privatekei:5,privatemac:5,problem:1,producttyp:5,project:1,project_id:[1,3,4],projectcount:5,projectid:[1,5],projectlistinfo:5,projectnam:5,projectset:5,promot:5,promote_udb_instance_to_ha:5,promote_udb_slav:5,promoteudbinstancetoha:5,promoteudbslav:5,protocol:5,protocoltyp:5,protocolvers:5,provid:6,provinc:5,proxyfil:5,public_kei:[1,3,4],pull:3,purchasevalu:5,purpos:5,pvft_enum:5,pvft_rang:5,python2:[3,4],python:[1,4,6],qcow2:5,quantiti:5,query_usms_signatur:5,query_usms_templ:5,queryusmssignatur:5,queryusmstempl:5,raid0:5,raid10:5,raid1:5,raid5:5,raid:5,raidsupport:5,rais:6,reach:6,readi:2,realip:5,reboot:5,reboot_phost:5,reboot_uhost_inst:5,rebootphost:5,rebootuhostinst:5,receiptdesc:5,receiptperphon:5,receiptpersess:5,receiptresult:5,receiptset:5,receipttim:5,receiv:1,recommend:5,recov:5,recoverytim:5,redi:5,refresh:[2,6],region:[1,3,4,5,6],regionflag:5,regionid:5,regioninfo:5,regionnam:5,regionset:5,regist:1,reinstall_phost:5,reinstall_uhost_inst:5,reinstallphost:5,reinstalluhostinst:5,release_backend:5,release_eip:5,release_share_bandwidth:5,release_udpn:5,release_vip:5,releasebackend:5,releaseeip:5,releasesharebandwidth:5,releaseudisk:5,releaseudpn:5,releasevip:5,remark:5,remot:6,remoteregion:5,remov:6,rename_udisk:5,renameudisk:5,req:[1,5,6],request:[1,3,5,6],request_handl:1,requestproxi:5,requeststransport:[1,6],requir:[5,6],reservedisk:5,reset_uhost_instance_password:5,resetuhostinstancepassword:5,resiz:5,resize_attached_disk:5,resize_share_bandwidth:5,resize_udb_inst:5,resize_udisk:5,resize_udredis_spac:5,resize_uhost_inst:5,resize_umem_spac:5,resize_uredis_group:5,resizeattacheddisk:5,resizefail:5,resizesharebandwidth:5,resizeudbinst:5,resizeudisk:5,resizeudredisspac:5,resizeuhostinst:5,resizeumemspac:5,resizeuredisgroup:5,resourc:[1,3,5,6],resourcecount:5,resourceid:5,resourcenam:5,resourceset:5,resourcetyp:5,resp:[1,3,4,6],respons:[1,5,6],response_handl:1,restart_udb_inst:5,restart_umem_cache_group:5,restartudbinst:5,restartumemcachegroup:5,restor:5,restore_udisk:5,restorefail:5,restoreudisk:5,retcod:5,retri:[1,6],retrytim:5,rewritetim:5,role:5,roundrobin:5,rout:5,routerul:5,routeruleid:5,routeruleinfo:5,routet:5,routetableid:5,routetableinfo:5,routetabletyp:5,rssddatadisk:5,rule:5,ruleact:5,ruletyp:5,run:[2,3,5],runtim:6,s_redi:5,sata:5,sata_ssd:5,sata_ssd_volum:5,sdk:[1,4,6],search:3,securitygroupid:5,see:1,send:1,send_usms_messag:5,sendusmsmessag:5,sentinel:5,seoul:5,serverinsert:5,servic:[1,3,4],sessionno:5,sessionnoset:5,set:1,set_eip_pay_mod:5,set_udisk__udataark_mod:5,seteippaymod:5,setid:5,setudiskudataarkmod:5,setup:[3,4],sh1:5,sh2:5,sharded_clust:5,shardsrv:5,shardsrv_arbit:5,shardsrv_datanod:5,shardsvr:5,sharebandwidth:5,sharebandwidthguarante:5,sharebandwidthid:5,sharebandwidthnam:5,sharebandwidthset:5,should:1,shutdown:5,shutoff:5,sigcont:5,sigid:5,signatur:1,sigpurpos:5,sigtyp:5,singl:5,size:[3,4,5],skylak:5,slave:5,slavedbid:5,slavezon:5,slow:5,slow_query_backup:5,snapen:5,snapshot:5,snapshotcount:5,snapshotid:5,snapshotlimit:5,snapshottim:5,softwar:3,some:6,sourc:[1,2,3,4,5],sourceid:5,sourceimageid:5,sourceport:5,space:5,spaceid:5,special:2,special_lett:2,specif:2,sql:5,sqlserver:5,srcdbid:5,srcgroupid:5,srcid:5,srcip:5,ssddatadisk:5,ssdsystemdisk:5,ssdtype:5,sslcontent:5,sslid:5,sslname:5,sslset:5,ssltype:5,start:[5,6],start_phost:5,start_udb_inst:5,start_uhost_inst:5,startafterupgrad:5,startphost:5,startudbinst:5,startuhostinst:5,startup_delai:2,state:[3,5],statu:[1,5],status_forcelist:1,stepflow:3,stepflowcli:5,stop:[5,6],stop_udb_inst:5,stop_uhost_inst:[5,6],stopudbinst:5,stopuhostinst:5,storagetyp:5,store:1,str:[1,2,5],string:[2,5],sub:1,subnet:5,subnetcount:5,subnetid:5,subnetinfo:5,subnetnam:5,subnetresourc:5,subnettyp:5,subresourceid:5,subresourcenam:5,subresourcetyp:5,success:5,switch_udb_instance_to_ha:5,switchudbinstancetoha:5,sys:5,system:3,systemdisk:5,systemfiles:5,tag:5,tagset:5,target:[2,6],targetimagedescript:5,targetimageid:5,targetimagenam:5,targetip:5,targetprojectid:5,targetregion:5,tcp:5,telecom:5,tempalteparam:5,templat:5,templateid:5,templatenam:5,templateparam:5,termin:2,terminate_custom_imag:5,terminate_phost:5,terminate_project:5,terminate_uhost_inst:[5,6],terminatecustomimag:5,terminatephost:5,terminateproject:5,terminateuhostinst:5,test:[3,5],test_id:5,than:1,thi:3,time:[1,2],timemachinefeatur:5,timeout:[1,2,5,6],timerang:5,timestamp:5,tky:5,total:[1,2],totalbandwidth:5,totalcount:5,totaldiskspac:5,totalpric:5,traffic:5,transport:[3,5],trial:5,tupl:1,twice:6,type:[3,4,5],uaccount:3,uaccountcli:5,ubuntu:5,ucdr:5,ucloud:[1,2,4,6],ucloudexcept:[3,4],udataark:5,udataarkmod:5,udb:[2,3],udbbackupset:5,udbcid:5,udbclient:5,udbinstancebinlogset:5,udbinstancepriceset:5,udbinstanceset:5,udbparamgroupset:5,udbparammemberset:5,udbslaveinstanceset:5,udbtypeset:5,udhost:5,udisk:3,udiskcli:5,udiskdataset:5,udiskid:5,udisknam:5,udiskpricedataset:5,udisksnapshotset:5,udock:5,udockhost:5,udp:5,udpn:3,udpnclient:5,udpndata:5,udpnid:5,udpnlineset:5,udw:5,ufileurl:5,ufortress:5,ufortress_host:5,uhadoop:5,uhadoop_host:5,uhiv:5,uhost:[2,3,4,6],uhost_id:6,uhostcli:5,uhostdiskset:5,uhostid:[5,6],uhostimageset:5,uhostinstanceset:5,uhostip:5,uhostipset:5,uhostnam:5,uhostpriceset:5,uhostset:[5,6],uhosttagset:5,uhosttyp:5,ukafka:5,ukmsmod:5,ulb:3,ulbbackendset:5,ulbclient:5,ulbid:5,ulbipset:5,ulbnam:5,ulbpolicyset:5,ulbset:5,ulbsslset:5,ulbtyp:5,ulbvserverset:5,ultra:5,umem:3,umemcach:5,umemcachegroupset:5,umemcachepriceset:5,umemcli:5,umempriceset:5,umemspaceaddressset:5,umemspaceset:5,un_bind_eip:5,unatgw:5,unavail:5,unbind_ssl:5,unbindeip:5,unbindssl:5,unet:3,unetallocateeipset:5,unetbandwidthpackageset:5,unetbandwidthusageeipset:5,unetcli:5,uneteipaddrset:5,uneteipresourceset:5,uneteipset:5,unetsharebandwidthset:5,uni:5,unicom:5,uniqu:1,unix:5,unknown:5,unless:[3,4],unsubscribeinfo:5,updat:5,update_backend_attribut:5,update_eip_attribut:5,update_firewal:5,update_firewall_attribut:5,update_polici:5,update_route_table_attribut:5,update_subnet_attribut:5,update_udb_instance_backup_strategi:5,update_udb_instance_slave_backup_switch:5,update_udb_param_group:5,update_ulb_attribut:5,update_usms_signatur:5,update_usms_templ:5,update_vpc_network:5,update_vserver_attribut:5,updatebackendattribut:5,updatebackendattributebatch:5,updateeipattribut:5,updatefirewal:5,updatefirewallattribut:5,updatepolici:5,updateroutetableattribut:5,updatesubnetattribut:5,updatetim:5,updateudbinstancebackupstrategi:5,updateudbinstanceslavebackupswitch:5,updateudbparamgroup:5,updateulbattribut:5,updateusmssignatur:5,updateusmstempl:5,updatevpcnetwork:5,updatevserverattribut:5,upgrad:5,upgrade_to_ark_uhost_inst:5,upgradetoarkuhostinst:5,uphost:3,uphostcli:5,upload_udb_param_group:5,uploadudbparamgroup:5,upm:5,upper_lett:2,uppercas:2,uredi:5,uredisbackupset:5,uredisgroupset:5,uredispriceset:5,url:1,usag:[2,3],use:[1,3,4,6],useblacklist:5,used:[1,5],useds:5,user:[1,3,4,5],user_ag:1,useraddress:5,userag:1,usercert:5,userdatascript:5,userdefin:5,useremail:5,userid:5,userinfo:5,usernam:5,usernetpath:5,userphon:5,usertyp:5,uservers:5,usessd:5,using:[1,6],usm:3,usmsclient:5,usual:2,util:[1,3,4],uvip:5,v100:5,validationexcept:6,valu:5,valuetyp:5,vendor:5,verify_ac:1,version:5,vhd:5,via:[3,4],vip:5,vipdetailset:5,vipid:5,vipset:5,virtual:5,virtualip:5,virtualipmac:5,vmdk:5,vnc:5,vncip:5,vncpassword:5,vncport:5,vnet:5,vpc1:5,vpc2:5,vpc:3,vpcclient:5,vpcid:5,vpcinfo:5,vpcintercominfo:5,vpcname:5,vpcnetworkinfo:5,vpn:5,vpngw:5,vserver:5,vserverid:5,vservernam:5,vserverset:5,wait:3,wait_for_st:[2,6],waiter:6,waittimeoutexcept:6,web:5,websit:3,weight:5,weightroundrobin:5,when:[1,6],who:1,window:[3,5],wiredtig:5,workflow:5,workflowid:5,workflownam:5,workflowtempl:5,workflowvers:5,www:3,xd8ja:5,xk3jxa:5,xxxx:5,year:5,yes:5,you:[3,4],your:[3,4],zone:[3,4,5]},titles:["<no title>","Core","Helpers","UCloud SDK Python 2","QuickStart","UCloud SDK Services","Usage"],titleterms:{api:3,chang:6,client:[1,6],config:1,contribut:3,core:1,feedback:3,guid:3,helper:2,indic:3,instal:[3,4],middlewar:[1,6],pathx:5,python:3,quickstart:[3,4],refer:3,resourc:2,sdk:[3,5],servic:5,state:[2,6],stepflow:5,system:6,tabl:3,test:1,transport:[1,6],type:6,uaccount:5,ucloud:[3,5],udb:5,udisk:5,udpn:5,uhost:5,ulb:5,umem:5,unet:5,uphost:5,usag:6,usm:5,util:2,vpc:5,wait:[2,6]}}) \ No newline at end of file diff --git a/docs/build/html/services.html b/docs/build/html/services.html new file mode 100644 index 0000000..76551bf --- /dev/null +++ b/docs/build/html/services.html @@ -0,0 +1,5507 @@ + + + + + + + + UCloud SDK Services — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

UCloud SDK Services

+
+

PathX

+
+
+class ucloud.services.pathx.client.PathXClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_global_ssh_instance(req=None, **kwargs)[source]
+

CreateGlobalSSHInstance - 创建GlobalSSH实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • Area (str) - (Required) 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个
  • +
  • AreaCode (str) - (Required) AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个
  • +
  • Port (int) - (Required) SSH端口,1-65535且不能使用80,443端口
  • +
  • TargetIP (str) - (Required) 被SSH访问的IP
  • +
  • ChargeType (str) - 支付方式,如按月、按年、按时
  • +
  • CouponId (str) - 使用代金券可冲抵部分费用
  • +
  • Quantity (int) - 购买数量
  • +
  • Remark (str) - 备注信息
  • +
+

Response

+
    +
  • AcceleratingDomain (str) - 加速域名,访问该域名可就近接入
  • +
  • InstanceId (str) - 实例ID,资源唯一标识
  • +
  • Message (str) - 提示信息
  • +
+
+ +
+
+delete_global_ssh_instance(req=None, **kwargs)[source]
+

DeleteGlobalSSHInstance - 删除GlobalSSH实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - (Required) 实例Id,资源的唯一标识
  • +
+

Response

+
    +
  • Message (str) - 提示信息
  • +
+
+ +
+
+describe_global_ssh_area(req=None, **kwargs)[source]
+

DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 机房地域代号,如hk、 us-ca、 us-ws等。不填默认为空,返回所有支持地区。
  • +
+

Response

+
    +
  • AreaSet (list) - 见 GlobalSSHArea 模型定义
  • +
  • Message (str) - 提示信息
  • +
+

Response Model

+

GlobalSSHArea

+
    +
  • Area (str) - GlobalSSH覆盖的地区,如香港、东京、洛杉矶等
  • +
  • AreaCode (str) - 地区代号,以地区AirPort Code
  • +
  • RegionSet (list) - ucloud机房代号构成的数组,如[“hk”,”us-ca”]
  • +
+
+ +
+
+describe_global_ssh_instance(req=None, **kwargs)[source]
+

DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - 实例ID,资源唯一标识
  • +
+

Response

+
    +
  • InstanceSet (list) - 见 GlobalSSHInfo 模型定义
  • +
+

Response Model

+

GlobalSSHInfo

+
    +
  • AcceleratingDomain (str) - 加速域名
  • +
  • Area (str) - 被SSH访问的IP所在地区
  • +
  • ChargeType (str) - 支付周期,如Month,Year等
  • +
  • CreateTime (int) - 资源创建时间戳
  • +
  • ExpireTime (int) - 资源过期时间戳
  • +
  • InstanceId (str) - 实例ID,资源唯一标识
  • +
  • Port (int) - SSH登陆端口
  • +
  • Remark (str) - 备注信息
  • +
  • TargetIP (str) - 被SSH访问的EIP
  • +
+
+ +
+
+modify_global_ssh_port(req=None, **kwargs)[source]
+

ModifyGlobalSSHPort - 修改GlobalSSH端口

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - (Required) 实例ID,资源唯一标识
  • +
  • Port (int) - (Required) 调整后的SSH登陆端口
  • +
+

Response

+
    +
  • Message (str) - 提示信息
  • +
+
+ +
+
+modify_global_ssh_remark(req=None, **kwargs)[source]
+

ModifyGlobalSSHRemark - 修改GlobalSSH备注

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - (Required) 实例ID,资源唯一标识
  • +
  • Remark (str) - 备注信息,不填默认为空字符串
  • +
+

Response

+
    +
  • Message (str) - 接口返回消息
  • +
+
+ +
+ +
+
+

StepFlow

+
+
+class ucloud.services.stepflow.client.StepFlowClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_sf_workflow_from_template(req=None, **kwargs)[source]
+

CreateSFWorkflowFromTemplate - 导入工作流定义

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Namespace (str) - (Required) 需要创建的工作流namespace
  • +
  • Workflow (str) - (Required) 描述工作流定义的base64字符串
  • +
  • WorkflowName (str) - (Required) 需要创建的工作流名称
  • +
+

Response

+
    +
  • Message (str) - 返回消息
  • +
  • Version (int) - 创建的工作流版本号
  • +
+
+ +
+
+get_sf_workflow_template(req=None, **kwargs)[source]
+

GetSFWorkflowTemplate - 导出工作流定义

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • WorkflowId (str) - (Required) 被导出工作流的Id
  • +
  • WorkflowVersion (int) - 被导出工作流的版本号。取值范围:WorkflowVersion >= 1;默认会获取发布版本对应的workflow;超过最大版本会返回错误
  • +
+

Response

+
    +
  • Message (str) - 返回消息
  • +
  • Version (int) - 导出工作流的版本号
  • +
  • Workflow (dict) - 见 WorkflowTemplate 模型定义
  • +
  • WorkflowId (str) - 导出工作流的Id
  • +
+

Response Model

+

Param

+
    +
  • Name (str) - 参数名称
  • +
  • Type (str) - 参数类型
  • +
  • Value (str) - 参数值
  • +
+

ActivityTemplate

+
    +
  • Input (dict) - Activity的输入
  • +
  • Name (str) - Activity的名字
  • +
  • Next (str) - 下一个Activity的名字
  • +
  • Output (list) - Activity的输出,详见Param
  • +
  • RetryTimes (str) - Activity的重试次数
  • +
  • Timeout (str) - Activity的超时时间
  • +
  • Type (str) - Activity的类型
  • +
+

WorkflowTemplate

+
    +
  • Activites (list) - 见 ActivityTemplate 模型定义
  • +
  • Input (list) - 见 Param 模型定义
  • +
  • Output (list) - 见 Param 模型定义
  • +
+
+ +
+ +
+
+

UAccount

+
+
+class ucloud.services.uaccount.client.UAccountClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_project(req=None, **kwargs)[source]
+

CreateProject - 创建项目

+

Request

+
    +
  • ProjectName (str) - (Required) 项目名称
  • +
+

Response

+
    +
  • ProjectId (str) - 所创建项目的Id
  • +
+
+ +
+
+get_project_list(req=None, **kwargs)[source]
+

GetProjectList - 获取项目列表

+

Request

+
    +
  • IsFinance (str) - 是否是财务账号
  • +
+

Response

+
    +
  • ProjectCount (int) - 项目总数
  • +
  • ProjectSet (list) - 见 ProjectListInfo 模型定义
  • +
+

Response Model

+

ProjectListInfo

+
    +
  • CreateTime (int) - 创建时间(Unix时间戳)
  • +
  • IsDefault (bool) - 是否为默认项目
  • +
  • MemberCount (int) - 项目下成员数量
  • +
  • ParentId (str) - 父项目ID
  • +
  • ParentName (str) - 父项目名称
  • +
  • ProjectId (str) - 项目ID
  • +
  • ProjectName (str) - 项目名称
  • +
  • ResourceCount (int) - 项目下资源数量
  • +
+
+ +
+
+get_region(req=None, **kwargs)[source]
+

GetRegion - 获取用户在各数据中心的权限等信息

+

Request

+

Response

+
    +
  • Regions (list) - 见 RegionInfo 模型定义
  • +
+

Response Model

+

RegionInfo

+
    +
  • BitMaps (str) - 用户在此数据中心的权限位
  • +
  • IsDefault (bool) - 是否用户当前默认数据中心
  • +
  • Region (str) - 地域名字,如cn-bj
  • +
  • RegionId (int) - 数据中心ID
  • +
  • RegionName (str) - 数据中心名称
  • +
  • Zone (str) - 可用区名字,如cn-bj-01
  • +
+
+ +
+
+get_user_info(req=None, **kwargs)[source]
+

GetUserInfo - 获取用户信息

+

Request

+

Response

+
    +
  • DataSet (list) - 见 UserInfo 模型定义
  • +
+

Response Model

+

UserInfo

+
    +
  • Admin (int) - 是否超级管理员 0:否 1:是
  • +
  • Administrator (str) - 管理员
  • +
  • AuthState (str) - 实名认证状态
  • +
  • City (str) - 城市
  • +
  • CompanyName (str) - 公司名称
  • +
  • Finance (int) - 是否有财务权限 0:否 1:是
  • +
  • IndustryType (int) - 所属行业
  • +
  • PhonePrefix (str) - 国际号码前缀
  • +
  • Province (str) - 省份
  • +
  • UserAddress (str) - 公司地址
  • +
  • UserEmail (str) - 用户邮箱
  • +
  • UserId (int) - 用户Id
  • +
  • UserName (str) - 称呼
  • +
  • UserPhone (str) - 用户手机
  • +
  • UserType (int) - 会员类型
  • +
  • UserVersion (int) - 是否子帐户(大于100为子帐户)
  • +
+
+ +
+
+modify_project(req=None, **kwargs)[source]
+

ModifyProject - 修改项目

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • ProjectName (str) - (Required) 新的项目名称
  • +
+

Response

+
+ +
+
+terminate_project(req=None, **kwargs)[source]
+

TerminateProject - 删除项目

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。
  • +
+

Response

+
+ +
+ +
+
+

UDB

+
+
+class ucloud.services.udb.client.UDBClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+backup_udb_instance(req=None, **kwargs)[source]
+

BackupUDBInstance - 备份UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupName (str) - (Required) 备份名称
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • BackupMethod (str) - 使用的备份方式。(快照备份即物理备份。注意只有SSD版本的mysql实例支持设置为snapshot)
  • +
  • Blacklist (str) - 备份黑名单列表,以 ; 分隔。注意:只有逻辑备份下备份黑名单才生效,快照备份备份黑名单下无效
  • +
  • ForceBackup (bool) - true表示逻辑备份时是使用 –force 参数,false表示不使用 –force 参数。物理备份此参数无效。
  • +
  • UseBlacklist (bool) - 是否使用黑名单备份,默认false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+backup_udb_instance_binlog(req=None, **kwargs)[source]
+

BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupFile (str) - (Required) 需要备份文件,可通过DescribeUDBInstanceBinlog获得 如果要传入多个文件名,以空格键分割,用单引号包含.
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • BackupName (str) - DB备份文件名称
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+backup_udb_instance_error_log(req=None, **kwargs)[source]
+

BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupName (str) - (Required) 备份名称
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+backup_udb_instance_slow_log(req=None, **kwargs)[source]
+

BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupName (str) - (Required) 备份文件名称
  • +
  • BeginTime (int) - (Required) 过滤条件:起始时间(时间戳)
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • EndTime (int) - (Required) 过滤条件:结束时间(时间戳)
  • +
+

Response

+
+ +
+
+check_recover_udb_instance(req=None, **kwargs)[source]
+

CheckRecoverUDBInstance - 核查db是否可以使用回档功能

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SrcDBId (str) - (Required) 源实例的Id(只支持普通版DB不支持高可用)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • LastestTime (int) - 核查成功返回值为可以回档到的最近时刻,核查失败不返回
  • +
+
+ +
+
+check_udb_instance_to_ha_allowance(req=None, **kwargs)[source]
+

CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
+

Response

+
    +
  • Allowance (str) - Yes ,No ,Yes即可以升级,No为不可以升级
  • +
+
+ +
+
+clear_udb_log(req=None, **kwargs)[source]
+

ClearUDBLog - 清除UDB实例的log

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取
  • +
  • LogType (int) - (Required) 日志类型,10-error(暂不支持)、20-slow(暂不支持 )、30-binlog
  • +
  • BeforeTime (int) - 删除时间点(至少前一天)之前log,采用时间戳(秒),默认当 前时间点前一天
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+create_udb_instance(req=None, **kwargs)[source]
+

CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • AdminPassword (str) - (Required) 管理员密码
  • +
  • DBTypeId (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6,14:postgresql-10.4
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G - 3000G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • ParamGroupId (int) - (Required) DB实例使用的配置参数组id
  • +
  • Port (int) - (Required) 端口号,mysql默认3306,mongodb默认27017,postgresql默认5432
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • AdminUser (str) - 管理员帐户名,默认root
  • +
  • BackupCount (int) - 备份策略,每周备份数量,默认7次
  • +
  • BackupDuration (int) - 备份策略,备份时间间隔,单位小时计,默认24小时
  • +
  • BackupId (int) - 备份id,如果指定,则表明从备份恢复实例
  • +
  • BackupTime (int) - 备份策略,备份开始时间,单位小时计,默认1点
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区,参见 可用区列表
  • +
  • CPU (int) - cpu核数
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Month
  • +
  • ClusterRole (str) - 当DB类型(DBTypeId)为mongodb时,需要指定mongo的角色,可选值为configsrv (配置节点),shardsrv (数据节点)
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • DisableSemisync (bool) - 是否开启异步高可用,默认不填,可置为true
  • +
  • HAArch (str) - 高可用架构:1) haproxy(默认): 当前仅支持mysql。2) sentinel: 基于vip和哨兵节点的架构,当前支持mysql和pg。
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 默认是”Normal”
  • +
  • InstanceType (str) - UDB数据库机型
  • +
  • Quantity (int) - 购买时长,默认值1
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • SubnetId (str) - 子网ID
  • +
  • Tag (str) - 实例所在的业务组名称
  • +
  • UDBCId (str) - 专区ID信息(如果这个参数存在这说明是在专区中创建DB)
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false。目前主要可用区、海外机房、新机房只提供SSD资源,非SSD资源不再提供。
  • +
  • VPCId (str) - VPC的ID
  • +
+

Response

+
    +
  • DBId (str) - BD实例id
  • +
+
+ +
+
+create_udb_instance_by_recovery(req=None, **kwargs)[source]
+

CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • RecoveryTime (int) - (Required) 恢复到某个时间点的时间戳(UTC时间格式,默认单位秒)
  • +
  • SrcDBId (str) - (Required) 源实例的Id
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长,默认值1
  • +
  • SubnetId (str) - 子网ID
  • +
  • UDBCId (str) - 专区的Id
  • +
  • UseSSD (bool) - 指定是否是否使用SSD,默认使用主库的配置
  • +
  • VPCId (str) - VPC的ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - db实例id
  • +
+
+ +
+
+create_udb_param_group(req=None, **kwargs)[source]
+

CreateUDBParamGroup - 从已有配置文件创建新配置文件

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBTypeId (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6
  • +
  • Description (str) - (Required) 参数组描述
  • +
  • GroupName (str) - (Required) 新配置参数组名称
  • +
  • SrcGroupId (int) - (Required) 源参数组id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • RegionFlag (bool) - 是否是地域级别的配置文件,默认是false
  • +
+

Response

+
    +
  • GroupId (int) - 新配置参数组id
  • +
+
+ +
+
+create_udb_replication_instance(req=None, **kwargs)[source]
+

CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • SrcId (str) - (Required) primary节点的DBId,该值可以通过DescribeUDBInstance获取
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • IsArbiter (bool) - 是否是仲裁节点,默认false,仲裁节点按最小机型创建
  • +
  • Port (int) - 端口号,默认27017,取值范围3306至65535。
  • +
  • UseSSD (bool) - 是否使用SSD,默认不使用
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - 创建从节点的DBId
  • +
+
+ +
+
+create_udb_route_instance(req=None, **kwargs)[source]
+

CreateUDBRouteInstance - 创建mongos实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ConfigsvrId (list) - (Required) 配置服务器的dbid,允许一个或者三个。
  • +
  • DBTypeId (str) - (Required) DB类型id,mongodb按版本细分有1:mongodb-2.4,2:mongodb-2.6,3:mongodb-3.0,4:mongodb-3.2
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),目前支持以下几档 600M/1500M/3000M /6000M/15000M/30000M
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • ParamGroupId (int) - (Required) DB实例使用的配置参数组id
  • +
  • Port (int) - (Required) 端口号,mongodb默认27017
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Month
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长,默认值1
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - db实例id
  • +
+
+ +
+
+create_udb_slave(req=None, **kwargs)[source]
+

CreateUDBSlave - 创建UDB实例的slave

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • SrcId (str) - (Required) master实例的DBId,该值可以通过DescribeUDBInstance获取
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • DiskSpace (int) - 磁盘空间(GB), 暂时支持20G - 3000G(API支持,前端暂时只开放内存定制)
  • +
  • InstanceMode (str) - UDB实例部署模式,可选值如下:Normal: 普通单点实例HA: 高可用部署实例
  • +
  • InstanceType (str) - UDB实例类型:Normal和SATA_SSD
  • +
  • IsLock (bool) - 是否锁主库,默认为true
  • +
  • MemoryLimit (int) - 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M
  • +
  • Port (int) - 端口号,mysql默认3306
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - 创建slave的DBId
  • +
+
+ +
+
+delete_udb_backup(req=None, **kwargs)[source]
+

DeleteUDBBackup - 删除UDB实例备份

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 备份id,可通过DescribeUDBBackup获得
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区,参见[可用区列表]
  • +
+

Response

+
+ +
+
+delete_udb_instance(req=None, **kwargs)[source]
+

DeleteUDBInstance - 删除UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取
  • +
  • UDBCId (str) - 专区ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+delete_udb_log_package(req=None, **kwargs)[source]
+

DeleteUDBLogPackage - 删除UDB日志包

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 日志包id,可通过DescribeUDBLogPackage获得
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
+

Response

+
+ +
+
+delete_udb_param_group(req=None, **kwargs)[source]
+

DeleteUDBParamGroup - 删除配置参数组

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (int) - (Required) 参数组id,可通过DescribeUDBParamGroup获取
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • RegionFlag (bool) - 是否属于地域级别
  • +
+

Response

+
+ +
+
+describe_udb_backup(req=None, **kwargs)[source]
+

DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - (Required) 分页显示的条目数,列表操作则指定
  • +
  • Offset (int) - (Required) 分页显示的起始偏移,列表操作则指定
  • +
  • BackupId (int) - 如果填了BackupId, 那么只拉取这个备份的记录
  • +
  • BackupType (int) - 备份类型,取值为0或1,0表示自动,1表示手动
  • +
  • BeginTime (int) - 过滤条件:起始时间(Unix时间戳)
  • +
  • ClassType (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver)
  • +
  • DBId (str) - DB实例Id,如果指定,则只获取该db的备份信息 该值可以通过DescribeUDBInstance获取
  • +
  • EndTime (int) - 过滤条件:结束时间(Unix时间戳)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBBackupSet 模型定义
  • +
  • TotalCount (int) - 满足条件备份总数,如果指定dbid,则是该db备份总数
  • +
+

Response Model

+

UDBBackupSet

+
    +
  • BackupEndTime (int) - 备份完成时间(Unix时间戳)
  • +
  • BackupId (int) - 备份id
  • +
  • BackupName (str) - 备份名称
  • +
  • BackupSize (int) - 备份文件大小(字节)
  • +
  • BackupTime (int) - 备份时间(Unix时间戳)
  • +
  • BackupType (int) - 备份类型,取值为0或1,0表示自动,1表示手动
  • +
  • BackupZone (str) - 跨机房高可用备库所在可用区
  • +
  • DBId (str) - dbid
  • +
  • DBName (str) - 对应的db名称
  • +
  • ErrorInfo (str) - 备份错误信息
  • +
  • State (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期
  • +
  • Zone (str) - 备份所在可用区
  • +
+
+ +
+
+describe_udb_backup_blacklist(req=None, **kwargs)[source]
+

DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Blacklist (str) - DB的黑名单列表, db.%为指定库 dbname.tablename为指定表
  • +
+
+ +
+
+describe_udb_binlog_backup_url(req=None, **kwargs)[source]
+

DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) DB实例binlog备份ID,可以从DescribeUDBLogPackage结果当中获得
  • +
  • DBId (str) - (Required) DB实例Id
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - DB实例备份文件的公网地址
  • +
  • InnerBackupPath (str) - DB实例备份文件的内网地址
  • +
+
+ +
+
+describe_udb_instance(req=None, **kwargs)[source]
+

DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ClassType (str) - DB种类,如果是列表操作,则需要指定,不区分大小写,其取值如下:mysql: SQL;mongo: NOSQL;postgresql: postgresql
  • +
  • DBId (str) - DB实例id,如果指定则获取单个db实例的描述,否则为列表操作。 指定DBId时无需填写ClassType、Offset、Limit
  • +
  • IncludeSlaves (bool) - 当只获取这个特定DBId的信息时,如果有该选项,那么把这个DBId实例的所有从库信息一起拉取并返回
  • +
  • IsInUDBC (bool) - 是否查看专区里面DB
  • +
  • Limit (int) - 分页显示数量,列表操作时必填
  • +
  • Offset (int) - 分页显示起始偏移位置,列表操作时必填
  • +
  • UDBCId (str) - IsInUDBC为True,UDBCId为空,说明查看整个可用区的专区的db,如果UDBId不为空则只查看此专区下面的db
  • +
  • Zone (str) - 可用区,不填时默认全部可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBInstanceSet 模型定义
  • +
  • TotalCount (int) - 用户db组的数量,对于 mysql: 主从结对数量,没有slave,则只有master mongodb: 副本集数量
  • +
+

Response Model

+

UDBSlaveInstanceSet

+
    +
  • AdminUser (str) - 管理员帐户名,默认root
  • +
  • BackupBeginTime (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点
  • +
  • BackupBlacklist (str) - 备份策略,备份黑名单,mongodb则不适用
  • +
  • BackupCount (int) - 备份策略,不可修改,备份文件保留的数量,默认7次
  • +
  • BackupDate (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能
  • +
  • BackupDuration (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • ClusterRole (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式
  • +
  • CreateTime (int) - DB实例创建时间,采用UTC计时时间戳
  • +
  • DBId (str) - DB实例id
  • +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6
  • +
  • DataFileSize (float) - DB实例数据文件大小,单位GB
  • +
  • DiskSpace (int) - 磁盘空间(GB), 默认根据配置机型
  • +
  • DiskUsedSize (float) - DB实例磁盘已使用空间,单位GB
  • +
  • ExpiredTime (int) - DB实例过期时间,采用UTC计时时间戳
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例;”HA”: 高可用版UDB实例
  • +
  • InstanceType (str) - UDB数据库机型
  • +
  • InstanceTypeId (int) - UDB数据库机型ID
  • +
  • LogFileSize (float) - DB实例日志文件大小,单位GB
  • +
  • MemoryLimit (int) - 内存限制(MB),默认根据配置机型
  • +
  • ModifyTime (int) - DB实例修改时间,采用UTC计时时间戳
  • +
  • Name (str) - 实例名称,至少6位
  • +
  • ParamGroupId (int) - DB实例使用的配置参数组id
  • +
  • Port (int) - 端口号,mysql默认3306,mongodb默认27017
  • +
  • Role (str) - DB实例角色,mysql区分master/slave,mongodb多种角色
  • +
  • SSDType (str) - SSD类型,SATA/PCI-E
  • +
  • SrcDBId (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id
  • +
  • State (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败
  • +
  • SubnetId (str) - 子网ID
  • +
  • SystemFileSize (float) - DB实例系统文件大小,单位GB
  • +
  • Tag (str) - 获取资源其他信息
  • +
  • UseSSD (bool) - 是否使用SSD
  • +
  • VPCId (str) - VPC的ID
  • +
  • VirtualIP (str) - DB实例虚ip
  • +
  • VirtualIPMac (str) - DB实例虚ip的mac地址
  • +
  • Zone (str) - 可用区
  • +
+

UDBInstanceSet

+
    +
  • AdminUser (str) - 管理员帐户名,默认root
  • +
  • BackupBeginTime (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点
  • +
  • BackupBlacklist (str) - 备份策略,备份黑名单,mongodb则不适用
  • +
  • BackupCount (int) - 备份策略,不可修改,备份文件保留的数量,默认7次
  • +
  • BackupDate (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能
  • +
  • BackupDuration (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • CluserRole (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式
  • +
  • CreateTime (int) - DB实例创建时间,采用UTC计时时间戳
  • +
  • DBId (str) - DB实例id
  • +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6
  • +
  • DataFileSize (float) - DB实例数据文件大小,单位GB
  • +
  • DataSet (list) - 见 UDBSlaveInstanceSet 模型定义
  • +
  • DiskSpace (int) - 磁盘空间(GB), 默认根据配置机型
  • +
  • DiskUsedSize (float) - DB实例磁盘已使用空间,单位GB
  • +
  • ExpiredTime (int) - DB实例过期时间,采用UTC计时时间戳
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例
  • +
  • InstanceType (str) - UDB数据库机型
  • +
  • InstanceTypeId (int) - UDB数据库机型ID
  • +
  • LogFileSize (float) - DB实例日志文件大小,单位GB
  • +
  • MemoryLimit (int) - 内存限制(MB),默认根据配置机型
  • +
  • ModifyTime (int) - DB实例修改时间,采用UTC计时时间戳
  • +
  • Name (str) - 实例名称,至少6位
  • +
  • ParamGroupId (int) - DB实例使用的配置参数组id
  • +
  • Port (int) - 端口号,mysql默认3306,mongodb默认27017
  • +
  • Role (str) - DB实例角色,mysql区分master/slave,mongodb多种角色
  • +
  • SSDType (str) - SSD类型,SATA/PCI-E
  • +
  • SrcDBId (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id
  • +
  • State (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败
  • +
  • SubnetId (str) - 子网ID
  • +
  • SystemFileSize (float) - DB实例系统文件大小,单位GB
  • +
  • Tag (str) - 获取资源其他信息
  • +
  • UseSSD (bool) - 是否使用SSD
  • +
  • VPCId (str) - VPC的ID
  • +
  • VirtualIP (str) - DB实例虚ip
  • +
  • VirtualIPMac (str) - DB实例虚ip的mac地址
  • +
  • Zone (str) - DB实例所在可用区
  • +
+
+ +
+
+describe_udb_instance_backup_state(req=None, **kwargs)[source]
+

DescribeUDBInstanceBackupState - 获取UDB实例备份状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 备份记录ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区,参见[可用区列表]
  • +
+

Response

+
    +
  • BackupEndTime (int) -
  • +
  • BackupSize (int) -
  • +
  • State (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期
  • +
+
+ +
+
+describe_udb_instance_backup_url(req=None, **kwargs)[source]
+

DescribeUDBInstanceBackupURL - 获取UDB备份下载地址

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) DB实例备份ID,该值可以通过DescribeUDBBackup获取
  • +
  • DBId (str) - (Required) DB实例Id,该值可通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - DB实例备份文件公网的地址
  • +
  • InnerBackupPath (str) - DB实例备份文件内网的地址
  • +
+
+ +
+
+describe_udb_instance_binlog(req=None, **kwargs)[source]
+

DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BeginTime (int) - (Required) 过滤条件:起始时间(时间戳)
  • +
  • DBId (str) - (Required) DB实例Id
  • +
  • EndTime (int) - (Required) 过滤条件:结束时间(时间戳)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBInstanceBinlogSet 模型定义
  • +
+

Response Model

+

UDBInstanceBinlogSet

+
    +
  • BeginTime (int) - Binlog文件生成时间(时间戳)
  • +
  • EndTime (int) - Binlog文件结束时间(时间戳)
  • +
  • Name (str) - Binlog文件名
  • +
  • Size (int) - Binlog文件大小
  • +
+
+ +
+
+describe_udb_instance_binlog_backup_state(req=None, **kwargs)[source]
+

DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 备份记录ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
+

Response

+
    +
  • BackupSize (int) - 备份文件大小(字节)
  • +
  • State (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期
  • +
+
+ +
+
+describe_udb_instance_price(req=None, **kwargs)[source]
+

DescribeUDBInstancePrice - 获取UDB实例价格信息

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBTypeId (str) - (Required) UDB实例的DB版本字符串
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB),暂时支持20(GB) - 3000(GB), 输入不带单位
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),单位为MB.目前支持:1000-96000
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year,按年付费; Month,按月付费 Dynamic,按需付费(需开启权限) Trial,试用(需开启权限)默认为月付
  • +
  • Count (int) - 购买DB实例数量,最大数量为10台, 默认为1台
  • +
  • InstanceMode (str) - 实例的部署类型。可选值为:Normal: 普通单点实例,Slave: 从库实例,HA: 高可用部署实例,默认是Normal
  • +
  • Quantity (int) - DB购买多少个”计费时间单位”,默认值为1。比如:买2个月,Quantity就是2。如果计费单位是“按月”,并且Quantity为0,表示“购买到月底”
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必填
  • +
  • UseSSD (str) - 是否使用SSD,只能填true或false,默认为false
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBInstancePriceSet 模型定义
  • +
+

Response Model

+

UDBInstancePriceSet

+
    +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • Price (int) - 价格,单位为分
  • +
+
+ +
+
+describe_udb_instance_state(req=None, **kwargs)[source]
+

DescribeUDBInstanceState - 获取UDB实例状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • State (str) - DB状态标记 Init:初始化中;Fail:安装失败; Starting:启动中; Running : 运行 ;Shutdown:关闭中; Shutoff :已关闭; Delete:已删除; Upgrading:升级中; Promoting: 提升为独库进行中; Recovering: 恢复中; Recover fail:恢复失败。
  • +
+
+ +
+
+describe_udb_instance_upgrade_price(req=None, **kwargs)[source]
+

DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB)
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Price (int) - 价格,单位为分
  • +
+
+ +
+
+describe_udb_log_backup_url(req=None, **kwargs)[source]
+

DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) DB实例备份ID
  • +
  • DBId (str) - (Required) DB实例Id
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - 备份外网URL
  • +
  • UsernetPath (str) - 备份用户网URL
  • +
+
+ +
+
+describe_udb_log_package(req=None, **kwargs)[source]
+

DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - (Required) 分页显示的条目数,列表操作则指定
  • +
  • Offset (int) - (Required) 分页显示的起始偏移,列表操作则指定
  • +
  • BeginTime (int) - 过滤条件:起始时间(时间戳)
  • +
  • DBId (str) - DB实例Id,如果指定,则只获取该db的备份信息
  • +
  • EndTime (int) - 过滤条件:结束时间(时间戳)
  • +
  • Type (int) - 需要列出的备份文件类型,每种文件的值如下 2 : BINLOG_BACKUP 3 : SLOW_QUERY_BACKUP 4 : ERRORLOG_BACKUP
  • +
  • Types (list) - Types作为Type的补充,支持多值传入,可以获取多个类型的日志记录,如:Types.0=2&Types.1=3
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 LogPackageDataSet 模型定义
  • +
  • TotalCount (int) - 备份总数,如果指定dbid,则是该db备份总数
  • +
+

Response Model

+

LogPackageDataSet

+
    +
  • BackupId (int) - 备份id
  • +
  • BackupName (str) - 备份名称
  • +
  • BackupSize (int) - 备份文件大小
  • +
  • BackupTime (int) - 备份时间
  • +
  • BackupType (int) - 备份类型,包括2-binlog备份,3-slowlog备份
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
  • DBId (str) - dbid
  • +
  • DBName (str) - 对应的db名称
  • +
  • State (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期
  • +
  • Zone (str) - 所在可用区
  • +
+
+ +
+
+describe_udb_param_group(req=None, **kwargs)[source]
+

DescribeUDBParamGroup - 获取参数组详细参数信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - (Required) 分页显示的条目数,列表操作则指定
  • +
  • Offset (int) - (Required) 分页显示的起始偏移,列表操作则指定
  • +
  • ClassType (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver)
  • +
  • GroupId (int) - 参数组id,如果指定则获取描述,否则是列表操作,需要 指定Offset/Limit
  • +
  • IsInUDBC (bool) - 是否选取专区中配置
  • +
  • RegionFlag (bool) - 当请求没有填写Zone时,如果指定为true,表示只拉取跨可用区的相关配置文件,否则,拉取所有机房的配置文件(包括每个单可用区和跨可用区)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBParamGroupSet 模型定义
  • +
  • TotalCount (int) - 参数组总数,列表操作时才会有该参数
  • +
+

Response Model

+

UDBParamMemberSet

+
    +
  • AllowedVal (str) - 允许的值(根据参数类型,用分隔符表示)
  • +
  • ApplyType (int) - 参数值应用类型,取值范围为{0,10,20},各值代表 意义为0-unknown、10-static、20-dynamic
  • +
  • FormatType (int) - 允许值的格式类型,取值范围为{0,10,20},意义分 别为PVFT_UNKOWN=0,PVFT_RANGE=10, PVFT_ENUM=20
  • +
  • Key (str) - 参数名称
  • +
  • Modifiable (bool) - 是否可更改,默认为false
  • +
  • Value (str) - 参数值
  • +
  • ValueType (int) - 参数值应用类型,取值范围为{0,10,20,30},各值 代表意义为 0-unknown、10-int、20-string、 30-bool
  • +
+

UDBParamGroupSet

+
    +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6 7:percona-5.6
  • +
  • Description (str) - 参数组描述
  • +
  • GroupId (int) - 参数组id
  • +
  • GroupName (str) - 参数组名称
  • +
  • Modifiable (bool) - 参数组是否可修改
  • +
  • ParamMember (list) - 见 UDBParamMemberSet 模型定义
  • +
  • RegionFlag (bool) -
  • +
  • Zone (str) -
  • +
+
+ +
+
+describe_udb_type(req=None, **kwargs)[source]
+

DescribeUDBType - 获取UDB支持的类型信息

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用DB的备库所在区域,仅当该可用区支持跨可用区高可用时填入。参见 可用区列表
  • +
  • DBClusterType (str) - DB实例类型,如mysql,sqlserver,mongo,postgresql
  • +
  • DiskType (str) - 返回支持某种磁盘类型的DB类型。如果没传,则表示任何磁盘类型均可。
  • +
  • InstanceMode (str) - 返回支持某种实例类型的DB类型。如果没传,则表示任何实例类型均可。normal:单点,ha:高可用,sharded_cluster:分片集群
  • +
+

Response

+
    +
  • Action (str) - 操作名称
  • +
  • DataSet (list) - 见 UDBTypeSet 模型定义
  • +
  • RetCode (int) - 返回码
  • +
+

Response Model

+

UDBTypeSet

+
    +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id, 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6
  • +
+
+ +
+
+edit_udb_backup_blacklist(req=None, **kwargs)[source]
+

EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Blacklist (str) - (Required) 黑名单,规范示例,指定库mysql.%;test.%; 指定表city.address;
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+fetch_udb_instance_earliest_recover_time(req=None, **kwargs)[source]
+

FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点

+

Request

+ +

Response

+
    +
  • EarliestTime (int) - 获取最早可回档时间点
  • +
+
+ +
+
+modify_udb_instance_name(req=None, **kwargs)[source]
+

ModifyUDBInstanceName - 重命名UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Name (str) - (Required) 实例的新名字, 长度要求为6~63位
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+modify_udb_instance_password(req=None, **kwargs)[source]
+

ModifyUDBInstancePassword - 修改DB实例的管理员密码

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的ID,该值可以通过DescribeUDBInstance获取
  • +
  • Password (str) - (Required) 实例的新密码
  • +
  • AccountName (str) - sqlserver帐号,仅在sqlserver的情况下填该参数
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+promote_udb_instance_to_ha(req=None, **kwargs)[source]
+

PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
+

Response

+
+ +
+
+promote_udb_slave(req=None, **kwargs)[source]
+

PromoteUDBSlave - 从库提升为独立库

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • IsForce (bool) - 是否强制(如果从库落后可能会禁止提升),默认false 如果落后情况下,强制提升丢失数据
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_udb_instance(req=None, **kwargs)[source]
+

ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G-3000G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/ 12000M/16000M/ 24000M/32000M/ 48000M/64000M/96000M。
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 默认是”Normal”
  • +
  • InstanceType (str) - UDB数据库机型: “Normal”: “标准机型” , “SATA_SSD”: “SSD机型” , “PCIE_SSD”: “SSD高性能机型” , “Normal_Volume”: “标准大容量机型”, “SATA_SSD_Volume”: “SSD大容量机型” , “PCIE_SSD_Volume”: “SSD高性能大容量机型”
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • StartAfterUpgrade (bool) - DB关闭状态下升降级,升降级后是否启动DB,默认为false
  • +
  • UDBCId (str) - 专区的ID,如果有值表示专区中的DB配置升降级
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+restart_udb_instance(req=None, **kwargs)[source]
+

RestartUDBInstance - 重启UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+start_udb_instance(req=None, **kwargs)[source]
+

StartUDBInstance - 启动UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+stop_udb_instance(req=None, **kwargs)[source]
+

StopUDBInstance - 关闭UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • ForceToKill (bool) - 是否使用强制手段关闭DB,默认是false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+switch_udb_instance_to_ha(req=None, **kwargs)[source]
+

SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,不填则按现在单点计费执行
  • +
  • Quantity (str) - 购买时长,需要和 ChargeType 搭配使用,否则使用单点计费策略的值
  • +
  • Tag (str) - 业务组
  • +
+

Response

+
    +
  • DBId (str) - 切换后高可用db实例的Id
  • +
+
+ +
+
+update_udb_instance_backup_strategy(req=None, **kwargs)[source]
+

UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 主节点的Id
  • +
  • BackupDate (str) - 备份时期标记位。共7位,每一位为一周中一天的备份情况,0表示关闭当天备份,1表示打开当天备份。最右边的一位为星期天的备份开关,其余从右到左依次为星期一到星期六的备份配置开关,每周必须至少设置两天备份。例如:1100000表示打开星期六和星期五的备份功能
  • +
  • BackupMethod (str) - 选择默认的备份方式,可选 snapshot 表示使用快照/物理备份,填 logic 表示使用逻辑备份。需要同时设置BackupDate字段。(注意现在只有SSD 版本的 MySQL实例支持物理备份)
  • +
  • BackupTime (int) - 备份的整点时间,范围[0,23]
  • +
  • ForceDump (bool) - 当导出某些数据遇到问题后,是否强制导出其他剩余数据默认是false需要同时设置BackupDate字段
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+update_udb_instance_slave_backup_switch(req=None, **kwargs)[source]
+

UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupSwitch (int) - (Required) 从库的备份开关,范围[0,1],0表示从库备份功能关闭,1 表示从库备份开关打开。
  • +
  • MasterDBId (str) - (Required) 主库的Id
  • +
  • SlaveDBId (str) - 从库的Id,如果从库备份开关设定为打开,则必须赋值。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+update_udb_param_group(req=None, **kwargs)[source]
+

UpdateUDBParamGroup - 更新UDB配置参数项

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (int) - (Required) 配置参数组id,使用DescribeUDBParamGroup获得
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • Description (str) - 配置文件的描述,不传时认为不修改
  • +
  • Key (str) - 参数名称(与Value配合使用)
  • +
  • Name (str) - 配置文件的名字,不传时认为不修改名字,传了则不能为空
  • +
  • RegionFlag (bool) - 该配置文件是否是地域级别配置文件,默认是false
  • +
  • Value (str) - 参数值(与Key配合使用)
  • +
+

Response

+
+ +
+
+upload_udb_param_group(req=None, **kwargs)[source]
+

UploadUDBParamGroup - 导入UDB配置

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Content (str) - (Required) 配置内容,导入的配置内容采用base64编码
  • +
  • DBTypeId (str) - (Required) DB类型id,DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6
  • +
  • Description (str) - (Required) 参数组描述
  • +
  • GroupName (str) - (Required) 配置参数组名称
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ParamGroupTypeId (int) - 配置文件子类型 0-未知, 1-Shardsvr-MMAPv1, 2-Shardsvr-WiredTiger, 3-Configsvr-MMAPv1, 4-Configsvr-WiredTiger, 5-Mongos
  • +
  • RegionFlag (bool) - 该配置文件是否是地域级别配置文件,默认是false
  • +
+

Response

+
    +
  • GroupId (int) - 配置参数组id
  • +
+
+ +
+ +
+
+

UDPN

+
+
+class ucloud.services.udpn.client.UDPNClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_udpn(req=None, **kwargs)[source]
+

AllocateUDPN - 分配一条 UDPN 专线

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 带宽
  • +
  • Peer1 (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • Peer2 (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • ChargeType (str) - 计费类型,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费
  • +
  • CouponId (str) - 代金劵
  • +
  • Quantity (int) - 计费时长,默认 1
  • +
+

Response

+
    +
  • UDPNId (str) - 资源名称
  • +
+
+ +
+
+describe_udpn(req=None, **kwargs)[source]
+

DescribeUDPN - 描述 UDPN

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度,默认为 20
  • +
  • Offset (int) - 列表起始位置偏移量,默认为 0
  • +
  • UDPNId (str) - 申请到的 UDPN 资源 ID。若为空,则查询该用户在机房所有的专线信息。非默认项目资源,需填写ProjectId
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDPNData 模型定义
  • +
  • TotalCount (int) - 查询到的总数量
  • +
+

Response Model

+

UDPNData

+
    +
  • Bandwidth (int) - 带宽
  • +
  • ChargeType (str) - 计费类型
  • +
  • CreateTime (int) - unix 时间戳 创建时间
  • +
  • ExpireTime (int) - unix 时间戳 到期时间
  • +
  • Peer1 (str) - 可用区域 1
  • +
  • Peer2 (str) - 可用区域 2
  • +
  • UDPNId (str) - UDPN 资源短 ID
  • +
+
+ +
+
+get_udpn_line_list(req=None, **kwargs)[source]
+

GetUDPNLineList - 获取当前支持的专线线路列表

+

Request

+ +

Response

+
    +
  • DataSet (list) - 见 UDPNLineSet 模型定义
  • +
  • TotalCount (int) - DataSet中的元素个数
  • +
+

Response Model

+

UDPNLineSet

+
    +
  • BandwidthUpperLimit (int) - 线路带宽上限,单位 M
  • +
  • LocalRegion (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky
  • +
  • RemoteRegion (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky
  • +
+
+ +
+
+get_udpn_price(req=None, **kwargs)[source]
+

GetUDPNPrice - 获取 UDPN 价格

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 带宽信息
  • +
  • Peer1 (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • Peer2 (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • ChargeType (str) - 计费类型
  • +
  • Quantity (int) - 购买时长
  • +
+

Response

+
    +
  • Price (float) - 专线价格
  • +
  • PurchaseValue (int) - 资源有效期 unix 时间戳
  • +
+
+ +
+
+get_udpn_upgrade_price(req=None, **kwargs)[source]
+

GetUDPNUpgradePrice - 获取专线升级价格

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 带宽
  • +
  • UDPNId (str) - (Required) 专线带宽资源 Id
  • +
+

Response

+
    +
  • Price (float) - 升级后的价格
  • +
+
+ +
+
+modify_udpn_bandwidth(req=None, **kwargs)[source]
+

ModifyUDPNBandwidth - 修改带宽值

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 调整后专线带宽, 单位为Mbps,取值范围为大于等于2且小于等于1000([2-1000])的整数
  • +
  • UDPNId (str) - (Required) UDPN Id
  • +
  • CouponId (str) - 代金劵 ID
  • +
+

Response

+
+ +
+
+release_udpn(req=None, **kwargs)[source]
+

ReleaseUDPN - 释放 UDPN

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDPNId (str) - (Required) UDPN 资源 Id
  • +
+

Response

+
+ +
+ +
+
+

UDisk

+
+
+class ucloud.services.udisk.client.UDiskClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+attach_udisk(req=None, **kwargs)[source]
+

AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 需要挂载的UDisk实例ID.
  • +
  • UHostId (str) - (Required) UHost实例ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • MultiAttach (str) - 是否允许多点挂载(Yes: 允许多点挂载, No: 不允许多点挂载, 不填默认Yes )
  • +
+

Response

+
    +
  • UDiskId (str) - 挂载的UDisk实例ID
  • +
  • UHostId (str) - 挂载的UHost实例ID
  • +
+
+ +
+
+clone_udisk(req=None, **kwargs)[source]
+

CloneUDisk - 从UDisk创建UDisk克隆

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称
  • +
  • SourceId (str) - (Required) 克隆父Disk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic,Postpay 默认: Dynamic
  • +
  • Comment (str) - Disk注释
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • UDataArkMode (str) - 方舟是否开启,”Yes”:开启,”No”:关闭;默认为”No”
  • +
+

Response

+
    +
  • UDiskId (list) - 创建UDisk Id
  • +
+
+ +
+
+clone_udisk_snapshot(req=None, **kwargs)[source]
+

CloneUDiskSnapshot - 从快照创建UDisk克隆

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。
  • +
  • SourceId (str) - (Required) 克隆父Snapshot的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic,Postpay 默认: Dynamic
  • +
  • Comment (str) - Disk注释
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • UDataArkMode (str) - 是否开启数据方舟 默认:No
  • +
+

Response

+
    +
  • UDiskId (list) - 创建UDisk Id
  • +
+
+ +
+
+create_udisk(req=None, **kwargs)[source]
+

CreateUDisk - 创建UDisk磁盘

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,普通盘: 范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限;SSD盘: 范围[1~4000]。
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic, Postpay, Trial 默认: Dynamic
  • +
  • CmkId (str) - 加密需要的cmk id,UKmsMode为Yes时,必填
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • DiskType (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk)
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • Tag (str) - 业务组 默认:Default
  • +
  • UDataArkMode (str) - 是否开启数据方舟
  • +
  • UKmsMode (str) - 是否加密。Yes:加密,No:不加密,默认值(No)
  • +
+

Response

+
    +
  • UDiskId (list) - UDisk实例Id
  • +
+
+ +
+
+create_udisk_snapshot(req=None, **kwargs)[source]
+

CreateUDiskSnapshot - 创建snapshot快照

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 快照名称
  • +
  • UDiskId (str) - (Required) 快照的UDisk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic 默认: Dynamic
  • +
  • Comment (str) - 快照描述
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
+

Response

+
    +
  • SnapshotId (list) - 快照Id
  • +
+
+ +
+
+delete_udisk(req=None, **kwargs)[source]
+

DeleteUDisk - 删除UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 要删除的UDisk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+delete_udisk_snapshot(req=None, **kwargs)[source]
+

DeleteUDiskSnapshot - 删除Snapshot

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • SnapshotId (str) - 快照Id(填写后不能填写UDisk Id)
  • +
  • UDiskId (str) - UDisk Id,删除该盘所创建出来的所有快照(填写后不能填写SnapshotId)
  • +
+

Response

+
+ +
+
+describe_udisk(req=None, **kwargs)[source]
+

DescribeUDisk - 获取UDisk实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DiskType (str) - ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:”CLOUD_NORMAL”,IsBoot:”False”; 普通系统盘:DiskType:”CLOUD_NORMAL”,IsBoot:”True”;SSD数据盘:DiskType:”CLOUD_SSD”,IsBoot:”False”;SSD系统盘:DiskType:”CLOUD_SSD”,IsBoot:”True”;RSSD数据盘:DiskType:”CLOUD_RSSD”,IsBoot:”False”;为空拉取所有。ProtocolVersion字段为0或没有该字段时,可设为以下几个值:普通数据盘:DataDisk;普通系统盘;SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk;为空拉取所有。
  • +
  • IsBoot (str) - ProtocolVersion字段为1且DiskType不为空时,必须设置,设置规则请参照DiskType;ProtocolVersion字段为1且DiskType为空时,该字段无效。ProtocolVersion字段为0或没有该字段时,该字段无效。
  • +
  • Limit (int) - 返回数据长度, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • ProtocolVersion (int) - 请求协议版本,建议升级为1,为1时DiskType与UHost磁盘类型定义一致;默认为0
  • +
  • UDiskId (str) - UDisk Id(留空返回全部)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDiskDataSet 模型定义
  • +
  • TotalCount (int) - 根据过滤条件得到的总数
  • +
+

Response Model

+

UDiskDataSet

+
    +
  • ArkSwitchEnable (int) - 是否支持开启方舟,1支持 ,0不支持
  • +
  • ChargeType (str) - Year,Month,Dynamic,Trial,Postpay
  • +
  • CloneEnable (int) - 是否支持克隆,1支持 ,0不支持
  • +
  • CmkId (str) - 该盘的cmk id
  • +
  • CmkIdAlias (str) - cmk id 别名
  • +
  • CmkIdStatus (str) - 该盘cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘)
  • +
  • CreateTime (int) - 创建时间
  • +
  • DataKey (str) - 该盘的密文密钥
  • +
  • DeviceName (str) - 挂载的设备名称
  • +
  • DiskType (str) - 请求中的ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:”CLOUD_NORMAL”,IsBoot:”False”; 普通系统盘:DiskType:”CLOUD_NORMAL”,IsBoot:”True”;SSD数据盘:DiskType:”CLOUD_SSD”,IsBoot:”False”;SSD系统盘:DiskType:”CLOUD_SSD”,IsBoot:”True”;RSSD数据盘:DiskType:”CLOUD_RSSD”,IsBoot:”False”。请求中的ProtocolVersion字段为0或没有该字段时,云硬盘类型参照如下:普通数据盘:DataDisk;普通系统盘:SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk。
  • +
  • ExpiredTime (int) - 过期时间
  • +
  • IsBoot (str) - 是否是系统盘,是:”True”, 否:”False”
  • +
  • IsExpire (str) - 资源是否过期,过期:”Yes”, 未过期:”No”
  • +
  • Name (str) - 实例名称
  • +
  • Size (int) - 容量单位GB
  • +
  • SnapEnable (int) - 是否支持快照,1支持 ,0不支持
  • +
  • SnapshotCount (int) - 该盘快照个数
  • +
  • SnapshotLimit (int) - 该盘快照上限
  • +
  • Status (str) - 状态:Available(可用),Attaching(挂载中), InUse(已挂载), Detaching(卸载中), Initializating(分配中), Failed(创建失败),Cloning(克隆中),Restoring(恢复中),RestoreFailed(恢复失败),
  • +
  • Tag (str) - 业务组名称
  • +
  • UDataArkMode (str) - 是否开启数据方舟,开启:”Yes”, 不支持:”No”
  • +
  • UDiskId (str) - UDisk实例Id
  • +
  • UHostIP (str) - 挂载的UHost的IP
  • +
  • UHostId (str) - 挂载的UHost的Id
  • +
  • UHostName (str) - 挂载的UHost的Name
  • +
  • UKmsMode (str) - 是否是加密盘,是:”Yes”, 否:”No”
  • +
  • Version (str) - 是否支持数据方舟,支持:”2.0”, 不支持:”1.0”
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_udisk_price(req=None, **kwargs)[source]
+

DescribeUDiskPrice - 获取UDisk实例价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,范围[1~1000]
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • DiskType (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),SystemDisk(普通系统盘),SSDSystemDisk(SSD系统盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk)
  • +
  • Quantity (int) - 购买UDisk的时长,默认值为1
  • +
  • UDataArkMode (str) - 是否打开数据方舟, 打开”Yes”,关闭”No”, 默认关闭
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDiskPriceDataSet 模型定义
  • +
+

Response Model

+

UDiskPriceDataSet

+
    +
  • ChargeName (str) - “UDataArk”,”UDisk”
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • OriginalPrice (int) - 用户折后价
  • +
  • Price (int) - 价格 (单位: 分)
  • +
+
+ +
+
+describe_udisk_snapshot(req=None, **kwargs)[source]
+

DescribeUDiskSnapshot - 获取UDisk快照

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • SnapshotId (str) - 快照id,SnapshotId , UDiskId 同时传SnapshotId优先
  • +
  • UDiskId (str) - UDiskId,返回该盘所做快照.(必须同时传Zone)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDiskSnapshotSet 模型定义
  • +
  • TotalCount (int) - 根据过滤条件得到的总数
  • +
+

Response Model

+

UDiskSnapshotSet

+
    +
  • CmkId (str) - 该快照的cmk id
  • +
  • CmkIdAlias (str) - cmk id 别名
  • +
  • CmkIdStatus (str) - 该快照cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘)
  • +
  • Comment (str) - 快照描述
  • +
  • CreateTime (int) - 创建时间
  • +
  • DataKey (str) - 该快照的密文密钥
  • +
  • DiskType (int) - 磁盘类型,0:数据盘,1:系统盘
  • +
  • ExpiredTime (int) - 过期时间
  • +
  • IsUDiskAvailable (bool) - 对应磁盘是否处于可用状态
  • +
  • Name (str) - 快照名称
  • +
  • Size (int) - 容量单位GB
  • +
  • SnapshotId (str) - 快照Id
  • +
  • Status (str) - 快照状态,Normal:正常,Failed:失败,Creating:制作中
  • +
  • UDiskId (str) - 快照的源UDisk的Id
  • +
  • UDiskName (str) - 快照的源UDisk的Name
  • +
  • UHostId (str) - 对应磁盘制作快照时所挂载的主机
  • +
  • UKmsMode (str) - 是否是加密盘快照,是:”Yes”, 否:”No”
  • +
  • Version (str) - 快照版本
  • +
+
+ +
+
+describe_udisk_upgrade_price(req=None, **kwargs)[source]
+

DescribeUDiskUpgradePrice - 获取UDisk升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。
  • +
  • SourceId (str) - (Required) 升级目标UDisk ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • DiskType (str) - 磁盘类型,SSDDataDisk:ssd数据盘,DataDisk:普通数据盘,SystemDisk:普通系统盘,SSDSystemDisk:ssd系统盘。默认为DataDisk
  • +
  • UDataArkMode (str) - 是否打开数据方舟, 打开”Yes”,关闭”No”, 默认关闭
  • +
+

Response

+
    +
  • OriginalPrice (int) - 用户折后价
  • +
  • Price (int) - 价格
  • +
+
+ +
+
+detach_udisk(req=None, **kwargs)[source]
+

DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 需要卸载的UDisk实例ID
  • +
  • UHostId (str) - (Required) UHost实例ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UDiskId (str) - 卸载的UDisk实例ID
  • +
  • UHostId (str) - 卸载的UHost实例ID
  • +
+
+ +
+
+rename_udisk(req=None, **kwargs)[source]
+

RenameUDisk - 重命名UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 重命名的UDisk的Id
  • +
  • UDiskName (str) - (Required) 重命名UDisk的name
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_udisk(req=None, **kwargs)[source]
+

ResizeUDisk - 调整UDisk容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 调整后大小, 单位:GB, 范围[1~2000],权限位控制可达8000,若需要请申请开通相关权限。
  • +
  • UDiskId (str) - (Required) UDisk Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • CouponId (str) - 使用的代金券id
  • +
+

Response

+
+ +
+
+restore_udisk(req=None, **kwargs)[source]
+

RestoreUDisk - 从备份恢复数据至UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 需要恢复的盘id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • SnapshotId (str) - 从指定的快照恢复
  • +
  • SnapshotTime (int) - 指定从方舟恢复的备份时间点
  • +
+

Response

+
+ +
+
+set_udisk__udataark_mode(req=None, **kwargs)[source]
+

SetUDiskUDataArkMode - 设置UDisk数据方舟的状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDataArkMode (str) - (Required) 是否开启数据方舟,开启:”Yes”, 不支持:”No”
  • +
  • UDiskId (str) - (Required) 需要设置数据方舟的UDisk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+ +
+
+

UHost

+
+
+class ucloud.services.uhost.client.UHostClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+copy_custom_image(req=None, **kwargs)[source]
+

CopyCustomImage - 复制自制镜像

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SourceImageId (str) - (Required) 源镜像Id, 参见 DescribeImage
  • +
  • TargetProjectId (str) - (Required) 目标项目Id, 参见 GetProjectList
  • +
  • TargetImageDescription (str) - 目标镜像描述
  • +
  • TargetImageName (str) - 目标镜像名称
  • +
  • TargetRegion (str) - 目标地域,不跨地域不用填
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • TargetImageId (str) - 目标镜像Id
  • +
+
+ +
+
+create_custom_image(req=None, **kwargs)[source]
+

CreateCustomImage - 从指定UHost实例,生成自定义镜像。

+

Request

+ +

Response

+
    +
  • ImageId (str) - 镜像Id
  • +
+
+ +
+
+create_uhost_instance(req=None, **kwargs)[source]
+

CreateUHostInstance - 创建UHost实例。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ImageId (str) - (Required) 镜像ID。 请通过 DescribeImage 获取
  • +
  • LoginMode (str) - (Required) 主机登陆模式。密码(默认选项): Password。
  • +
  • Password (str) - (Required) UHost密码。请遵照 字段规范 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • AlarmTemplateId (int) - 告警模板id,如果传了告警模板id,且告警模板id正确,则绑定告警模板。绑定告警模板失败只会在后台有日志,不会影响创建主机流程,也不会在前端报错。
  • +
  • BootDiskSpace (int) - 【待废弃,不建议调用】系统盘大小。 单位:GB, 范围[20,100], 步长:10
  • +
  • CPU (int) - 虚拟CPU核数。可选参数:1-64(具体机型与CPU的对应关系参照控制台)。默认值: 4。
  • +
  • ChargeType (str) - 计费模式。枚举值为: > Year,按年付费; > Month,按月付费;> Dynamic,按小时付费 默认为月付
  • +
  • CouponId (str) - 主机代金券ID。请通过DescribeCoupon接口查询,或登录用户中心查看
  • +
  • DiskPassword (str) - 【待废弃,不建议调用】加密盘的密码。若输入此字段,自动选择加密盘。加密盘需要权限位。
  • +
  • DiskSpace (int) - 【待废弃,不建议调用】数据盘大小。 单位:GB, 范围[0,8000], 步长:10, 默认值:20,云盘支持0-8000;本地普通盘支持0-2000;本地SSD盘(包括所有GPU机型)支持100-1000
  • +
  • Disks (list) - 见 CreateUHostInstanceParamDisks 模型定义
  • +
  • GPU (int) - GPU卡核心数。仅GPU机型支持此字段(可选范围与UHostType相关)
  • +
  • GpuType (str) - GPU类型,枚举值[“K80”, “P40”, “V100”]
  • +
  • HostType (str) - 【已废弃】宿主机类型,N2,N1
  • +
  • HotplugFeature (bool) - 是否开启热升级特性。True为开启,False为未开启,默认False。
  • +
  • InstallAgent (str) - 【暂不支持】是否安装UGA。’yes’: 安装;其他或者不填:不安装。
  • +
  • IsolationGroup (str) - 硬件隔离组id。可通过DescribeIsolationGroup获取。
  • +
  • KeyPair (str) - 【暂不支持】Keypair公钥,LoginMode为KeyPair时此项必须
  • +
  • MachineType (str) - 云主机机型(V2.0),枚举值[“N”, “C”, “G”, “O”]。参考 云主机机型说明
  • +
  • MaxCount (int) - 【批量创建主机时必填】最大创建主机数量,取值范围是[1,100];
  • +
  • Memory (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值:8192
  • +
  • MinimalCpuPlatform (str) - 最低cpu平台,枚举值[“Intel/Auto”, “Intel/IvyBridge”, “Intel/Haswell”, “Intel/Broadwell”, “Intel/Skylake”, “Intel/Cascadelake”。
  • +
  • Name (str) - UHost实例名称。默认:UHost。请遵照 字段规范 设定实例名称。
  • +
  • NetCapability (str) - 网络增强。枚举值:Normal(默认),不开启; Super,开启网络增强1.0; Ultra,开启网络增强2.0(仅支持部分可用区,请参考控制台)
  • +
  • NetworkId (str) - 【已废弃】网络ID(VPC2.0情况下无需填写)。VPC1.0情况下,若不填写,代表优先选择基础网络; 若填写,代表选择子网。参见DescribeSubnet。
  • +
  • NetworkInterface (list) - 见 CreateUHostInstanceParamNetworkInterface 模型定义
  • +
  • PrivateIp (list) - 【数组】创建云主机时指定内网IP。若不传值,则随机分配当前子网下的IP。调用方式举例:PrivateIp.0=x.x.x.x。当前只支持一个内网IP。
  • +
  • PrivateMac (str) - 【批量创建该参数无效】【内部字段】创建云主机时指定Mac。调用方式举例:PrivateMac=”xx:xx:xx:xx:xx:xx”。
  • +
  • Quantity (int) - 购买时长。默认:值 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表购买至月末。
  • +
  • ResourceType (int) - 【内部参数】资源类型
  • +
  • SecurityGroupId (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 DescribeSecurityGroup
  • +
  • SetId (int) -
  • +
  • StorageType (str) - 【待废弃,不建议调用】磁盘类型,同时设定系统盘和数据盘的磁盘类型。枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘;默认为LocalDisk。仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。
  • +
  • SubnetId (str) - 子网 ID。默认为当前地域的默认子网。
  • +
  • Tag (str) - 业务组。默认:Default(Default即为未分组)。请遵照 字段规范 设定业务组。
  • +
  • TimemachineFeature (str) - 【待废弃,不建议调用】是否开启方舟特性。Yes为开启方舟,No为关闭方舟。目前仅选择普通本地盘+普通本地盘 或 SSD云盘+普通云盘的组合支持开启方舟。
  • +
  • UHostType (str) - 【建议后续不再使用】云主机机型V1.0。参考 云主机机型说明
  • +
  • UserDataScript (str) - 【暂不支持】cloudinit方式下,用户初始化脚本
  • +
  • VPCId (str) - VPC ID。默认为当前地域的默认VPC。
  • +
+

Response

+
    +
  • IPs (list) - 【批量创建不会返回】IP信息
  • +
  • UHostIds (list) - UHost实例Id集合
  • +
+

Request Model

+

CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH

+
    +
  • Area (str) - 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个
  • +
  • AreaCode (str) - GlobalSSH的。AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个
  • +
  • Port (int) - SSH端口,1-65535且不能使用80,443端口
  • +
+

CreateUHostInstanceParamNetworkInterfaceEIP

+
    +
  • Bandwidth (int) - 【如果绑定EIP这个参数必填】弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-300],带宽计费[1-800]
  • +
  • CouponId (str) - 当前EIP代金券id。请通过DescribeCoupon接口查询,或登录用户中心查看
  • +
  • GlobalSSH (dict) - 见 CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH 模型定义
  • +
  • OperatorName (str) - 【如果绑定EIP这个参数必填】弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International
  • +
  • PayMode (str) - 弹性IP的计费模式. 枚举值: “Traffic”, 流量计费; “Bandwidth”, 带宽计费; “ShareBandwidth”,共享带宽模式. “Free”:免费带宽模式.默认为 “Bandwidth”.
  • +
  • ShareBandwidthId (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效
  • +
+

CreateUHostInstanceParamDisks

+
    +
  • BackupType (str) - 磁盘备份方案。枚举值:> NONE,无备份 > DATAARK,数据方舟 当前磁盘支持的备份模式参考 磁盘类型
  • +
  • CouponId (str) - 云盘代金券id。不适用于系统盘/本地盘。请通过DescribeCoupon接口查询,或登录用户中心查看
  • +
  • Encrypted (bool) - 【功能仅部分可用区开放,详询技术支持】磁盘是否加密。加密:true, 不加密: false加密必须传入对应的的KmsKeyId
  • +
  • IsBoot (str) - 是否是系统盘。枚举值:> True,是系统盘 > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。
  • +
  • KmsKeyId (str) - 【功能仅部分可用区开放,详询技术支持】kms key id。选择加密盘时必填。
  • +
  • Size (int) - 磁盘大小,单位GB。请参考 磁盘类型
  • +
  • Type (str) - 磁盘类型。请参考 磁盘类型
  • +
+

CreateUHostInstanceParamNetworkInterface

+
    +
  • EIP (dict) - 见 CreateUHostInstanceParamNetworkInterfaceEIP 模型定义
  • +
+
+ +
+
+describe_image(req=None, **kwargs)[source]
+

DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ImageId (str) - 镜像Id
  • +
  • ImageType (str) - 镜像类型。标准镜像:Base,镜像市场:Business, 自定义镜像:Custom,默认返回所有类型
  • +
  • Limit (int) - 返回数据长度,默认为20
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • OsType (str) - 操作系统类型:Linux, Windows 默认返回所有类型
  • +
  • PriceSet (int) - 是否返回价格:1返回,0不返回;默认不返回
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • ImageSet (list) - 见 UHostImageSet 模型定义
  • +
  • TotalCount (int) - 满足条件的镜像总数
  • +
+

Response Model

+

UHostImageSet

+
    +
  • CreateTime (int) - 创建时间,格式为Unix时间戳
  • +
  • Features (list) - 特殊状态标识, 目前包含NetEnhnced(网络增强1.0), NetEnhanced_Ultra](网络增强2.0)
  • +
  • FuncType (str) - 行业镜像类型(仅行业镜像将返回这个值)
  • +
  • ImageDescription (str) - 镜像描述
  • +
  • ImageId (str) - 镜像ID
  • +
  • ImageName (str) - 镜像名称
  • +
  • ImageSize (int) - 镜像大小
  • +
  • ImageType (str) - 镜像类型 标准镜像:Base, 行业镜像:Business,自定义镜像:Custom
  • +
  • IntegratedSoftware (str) - 集成软件名称(仅行业镜像将返回这个值)
  • +
  • Links (str) - 介绍链接(仅行业镜像将返回这个值)
  • +
  • MinimalCPU (str) - 默认值为空’’’。当CentOS 7.3/7.4/7.5等镜像会标记为“Broadwell”
  • +
  • OsName (str) - 操作系统名称
  • +
  • OsType (str) - 操作系统类型:Liunx,Windows
  • +
  • State (str) - 镜像状态, 可用:Available,制作中:Making, 不可用:Unavailable
  • +
  • Vendor (str) - 供应商(仅行业镜像将返回这个值)
  • +
  • Zone (str) - 可用区,参见 可用区列表 |
  • +
+
+ +
+
+describe_uhost_instance(req=None, **kwargs)[source]
+

DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • IsolationGroup (str) - 硬件隔离组id。通过硬件隔离组筛选主机。
  • +
  • LifeCycle (int) - 1:普通云主机;2:抢占型云主机;如不传此参数,默认全部获取
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • SubnetId (str) - 子网id。通过子网筛选主机。北京一地域无效。
  • +
  • Tag (str) - 要查询的业务组名称
  • +
  • UHostIds (list) - 【数组】UHost主机的资源ID,例如UHostIds.0代表希望获取信息 的主机1,UHostIds.1代表主机2。 如果不传入,则返回当前Region 所有符合条件的UHost实例。
  • +
  • VPCId (str) - vpc id。通过VPC筛选主机。北京一地域无效。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • TotalCount (int) - UHostInstance总数
  • +
  • UHostSet (list) - 见 UHostInstanceSet 模型定义
  • +
+

Response Model

+

UHostDiskSet

+
    +
  • BackupType (str) - 备份方案。若开通了数据方舟,则为DataArk
  • +
  • DiskId (str) - 磁盘ID
  • +
  • DiskType (str) - 磁盘类型。请参考 磁盘类型
  • +
  • Drive (str) - 磁盘盘符
  • +
  • Encrypted (bool) - true: 加密盘 false:非加密盘
  • +
  • IsBoot (str) - 是否是系统盘。枚举值:> True,是系统盘 > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。
  • +
  • Name (str) - UDisk名字(仅当磁盘是UDisk时返回)
  • +
  • Size (int) - 磁盘大小,单位: GB
  • +
  • Type (str) - 【建议不再使用】磁盘类型。系统盘: Boot,数据盘: Data,网络盘:Udisk
  • +
+

UHostIPSet

+
    +
  • Bandwidth (int) - IP对应的带宽, 单位: Mb (内网IP不显示带宽信息)
  • +
  • Default (str) - 是否默认的弹性网卡的信息。true: 是默认弹性网卡;其他值:不是。
  • +
  • IP (str) - IP地址
  • +
  • IPId (str) - IP资源ID (内网IP无对应的资源ID)
  • +
  • SubnetId (str) - IP地址对应的子网 ID(北京一当前字段为空)
  • +
  • Type (str) - 国际: Internation,BGP: Bgp,内网: Private
  • +
  • VPCId (str) - IP地址对应的VPC ID(北京一当前字段为空)
  • +
+

UHostInstanceSet

+
    +
  • AutoRenew (str) - 是否自动续费,自动续费:“Yes”,不自动续费:“No”
  • +
  • BasicImageId (str) - 基础镜像ID(指当前自定义镜像的来源镜像)
  • +
  • BasicImageName (str) - 基础镜像名称(指当前自定义镜像的来源镜像)
  • +
  • BootDiskState (str) - 系统盘状态 Normal表示初始化完成;Initializing表示在初始化。仍在初始化的系统盘无法制作镜像。
  • +
  • CPU (int) - 虚拟CPU核数,单位: 个
  • +
  • ChargeType (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限);
  • +
  • CreateTime (int) - 创建时间,格式为Unix时间戳
  • +
  • DiskSet (list) - 见 UHostDiskSet 模型定义
  • +
  • ExpireTime (int) - 到期时间,格式为Unix时间戳
  • +
  • GPU (int) - GPU个数
  • +
  • HostType (str) - 【建议不再使用】主机系列:N2,表示系列2;N1,表示系列1
  • +
  • HotplugFeature (bool) - true: 开启热升级; false,未开启热升级
  • +
  • IPSet (list) - 见 UHostIPSet 模型定义
  • +
  • ImageId (str) - 【建议不再使用】主机的系统盘ID。
  • +
  • IsolationGroup (str) - 隔离组id,不在隔离组则返回””
  • +
  • LifeCycle (str) - 主机的生命周期类型。目前仅支持Normal:普通;
  • +
  • MachineType (str) - 云主机机型(新)。参考 云主机机型说明
  • +
  • Memory (int) - 内存大小,单位: MB
  • +
  • Name (str) - UHost实例名称
  • +
  • NetCapability (str) - 网络增强。Normal: 无;Super: 网络增强1.0; Ultra: 网络增强2.0
  • +
  • NetworkState (str) - 【建议不再使用】网络状态。 连接:Connected, 断开:NotConnected
  • +
  • OsName (str) - 创建主机的最初来源镜像的操作系统名称(若直接通过基础镜像创建,此处返回和BasicImageName一致)
  • +
  • OsType (str) - 操作系统类别。返回”Linux”或者”Windows”
  • +
  • Remark (str) - 备注
  • +
  • State (str) - 实例状态,枚举值:>初始化: Initializing; >启动中: Starting; > 运行中: Running; > 关机中: Stopping; >关机: Stopped >安装失败: Install Fail; >重启中: Rebooting
  • +
  • StorageType (str) - 【建议不再使用】主机磁盘类型。 枚举值为:> LocalDisk,本地磁盘; > UDisk 云盘。只要有一块磁盘为本地盘,即返回LocalDisk。
  • +
  • SubnetType (str) - 【建议不再使用】仅北京A的云主机会返回此字段。基础网络模式:Default;子网模式:Private
  • +
  • Tag (str) - 业务组名称
  • +
  • TimemachineFeature (str) - 【建议不再使用】数据方舟模式。枚举值:> Yes: 开启方舟; > no,未开启方舟
  • +
  • TotalDiskSpace (int) - 总的数据盘存储空间。
  • +
  • UHostId (str) - UHost实例ID
  • +
  • UHostType (str) - 【建议不再使用】云主机机型(旧)。参考 云主机机型说明
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+
+ +
+
+describe_uhost_tags(req=None, **kwargs)[source]
+

DescribeUHostTags - 获取指定数据中心的业务组列表。

+

Request

+ +

Response

+
    +
  • TagSet (list) - 见 UHostTagSet 模型定义
  • +
  • TotalCount (int) - 已有主机的业务组总个数
  • +
+

Response Model

+

UHostTagSet

+
    +
  • Tag (str) - 业务组名称
  • +
  • TotalCount (int) - 该业务组中包含的主机个数
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+get_uhost_instance_price(req=None, **kwargs)[source]
+

GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • CPU (int) - (Required) CPU核数。可选参数:1-64。可选范围参照控制台。默认值: 4
  • +
  • Count (int) - (Required) 购买台数,范围[1,5]
  • +
  • ImageId (str) - (Required) 镜像Id,可通过 DescribeImage 获取镜像ID
  • +
  • Memory (int) - (Required) 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参照好控制台)。默认值:8192
  • +
  • ChargeType (str) - 计费模式。枚举值为: > Year,按年付费; > Month,按月付费;> Dynamic,按小时付费 默认为月付。
  • +
  • DiskSpace (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10,默认值: 0
  • +
  • Disks (list) - 见 GetUHostInstancePriceParamDisks 模型定义
  • +
  • GPU (int) - GPU卡核心数。仅GPU机型支持此字段。
  • +
  • GpuType (str) - GPU类型,枚举值[“K80”, “P40”, “V100”]
  • +
  • LifeCycle (int) - 【未支持】1:普通云主机;2:抢占性云主机;默认普通
  • +
  • MachineType (str) - 云主机机型(V2版本概念)。枚举值[“N”, “C”, “G”, “O”]。参考 云主机机型说明
  • +
  • NetCapability (str) - 网络增强。枚举值:Normal,不开启; Super,开启网络增强1.0。 默认值为Normal。
  • +
  • Quantity (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末。
  • +
  • StorageType (str) - 【待废弃】磁盘类型,同时设定系统盘和数据盘, 枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘; 默认为LocalDisk 仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。
  • +
  • TimemachineFeature (str) - 【待废弃】方舟机型。No,Yes。默认是No。
  • +
  • UHostType (str) - 【待废弃】云主机机型(V1版本概念)。参考 云主机机型说明
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PriceSet (list) - 见 UHostPriceSet 模型定义
  • +
+

Request Model

+

GetUHostInstancePriceParamDisks

+
    +
  • BackupType (str) - 磁盘备份方案。枚举值:> NONE,无备份 > DATAARK,数据方舟 当前磁盘支持的备份模式参考 磁盘类型
  • +
  • IsBoot (str) - 是否是系统盘。枚举值:> True,是系统盘 > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。
  • +
  • Size (int) - 磁盘大小,单位GB。请参考 磁盘类型
  • +
  • Type (str) - 磁盘类型。请参考 磁盘类型
  • +
+

Response Model

+

UHostPriceSet

+
    +
  • ChargeType (str) - 计费类型。Year,Month,Dynamic
  • +
  • Price (float) - 价格,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+get_uhost_instance_vnc_info(req=None, **kwargs)[source]
+

GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
  • VncIP (str) - Vnc登录IP
  • +
  • VncPassword (str) - Vnc 登录密码
  • +
  • VncPort (int) - Vnc登录端口
  • +
+
+ +
+
+get_uhost_upgrade_price(req=None, **kwargs)[source]
+

GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考 云主机机型说明

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost实例ID。 参见 DescribeUHostInstance
  • +
  • BootDiskSpace (int) - 【待废弃】系统大小,单位: GB,范围[20,100],步长: 10。
  • +
  • CPU (int) - 虚拟CPU核数。可选参数:1-64(可选范围参考控制台)。默认值为当前实例的CPU核数。
  • +
  • DiskSpace (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10, 默认值是该主机当前数据盘大小。
  • +
  • HostType (str) - 【待废弃】主机系列,目前支持N1,N2
  • +
  • Memory (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值为当前实例的内存大小。
  • +
  • NetCapValue (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变)
  • +
  • TimemachineFeature (str) - 方舟机型。No,Yes。默认是No。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Price (float) - 规格调整差价。精确到小数点后2位。
  • +
+
+ +
+
+import_custom_image(req=None, **kwargs)[source]
+

ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Auth (bool) - (Required) 是否授权。必须填true
  • +
  • Format (str) - (Required) 镜像格式,可选RAW、VHD、VMDK、qcow2
  • +
  • ImageName (str) - (Required) 镜像名称
  • +
  • OsName (str) - (Required) 操作系统详细版本,请参考控制台的镜像版本;OsType为Other时,输入参数为Other
  • +
  • OsType (str) - (Required) 操作系统平台,比如CentOS、Ubuntu、Windows、RedHat等,请参考控制台的镜像版本;若导入控制台上没有的操作系统,参数为Other
  • +
  • UFileUrl (str) - (Required) UFile私有空间地址
  • +
  • ImageDescription (str) - 镜像描述
  • +
+

Response

+
    +
  • ImageId (str) - 镜像Id
  • +
+
+ +
+
+modify_uhost_instance_name(req=None, **kwargs)[source]
+

ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+modify_uhost_instance_remark(req=None, **kwargs)[source]
+

ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+modify_uhost_instance_tag(req=None, **kwargs)[source]
+

ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+poweroff_uhost_instance(req=None, **kwargs)[source]
+

PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+reboot_uhost_instance(req=None, **kwargs)[source]
+

RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+reinstall_uhost_instance(req=None, **kwargs)[source]
+

ReinstallUHostInstance - 重新安装指定UHost实例的操作系统

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost实例资源ID 参见 DescribeUHostInstance
  • +
  • BootDiskSpace (int) - 系统盘大小。 单位:GB, 范围[20,100], 步长:10
  • +
  • DNSServers (list) - 针对非私有子网主机,可自定义DNS。n可为0-2
  • +
  • ImageId (str) - 镜像Id,默认使用原镜像 参见 DescribeImage
  • +
  • Password (str) - 如果创建UHost实例时LoginMode为Password,则必须填写,如果LoginMode为KeyPair,不需要填写 (密码格式使用BASE64编码;LoginMode不可变更)
  • +
  • ReserveDisk (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes;如果是从Windows重装为Linux或反之,则无法保留数据盘
  • +
  • ResourceType (int) - 云灾备指明191
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UhostId (str) - UHost实例资源ID
  • +
+
+ +
+
+reset_uhost_instance_password(req=None, **kwargs)[source]
+

ResetUHostInstancePassword - 重置UHost实例的管理员密码。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Password (str) - (Required) UHost新密码(密码格式使用BASE64编码)
  • +
  • UHostId (str) - (Required) UHost实例ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+resize_attached_disk(req=None, **kwargs)[source]
+

ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DiskId (str) - (Required) 磁盘ID。参见 DescribeUHostInstance 返回值中的DiskSet。
  • +
  • DiskSpace (int) - (Required) 磁盘大小,单位GB,步长为10。取值范围需大于当前磁盘大小,最大值请参考 磁盘类型
  • +
  • UHostId (str) - (Required) UHost实例ID。 参见 DescribeUHostInstance
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DiskId (str) - 改配成功的磁盘id
  • +
+
+ +
+
+resize_uhost_instance(req=None, **kwargs)[source]
+

ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,网络增强等。可选配置范围请参考 云主机机型说明

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost实例ID 参见 DescribeUHostInstance
  • +
  • BootDiskSpace (int) - 【待废弃】系统盘大小,单位:GB,范围[20,100],步长:10,系统盘不支持缩容,因此不允许输入比当前实例系统盘小的值
  • +
  • CPU (int) - 虚拟CPU核数。可选参数:1-32(可选范围与UHostType相关)。默认值为当前实例的CPU核数
  • +
  • DiskSpace (int) - 【待废弃】数据盘大小,单位:GB,范围[10,1000]; SSD机型,单位:GB,范围[100,500];步长:10,默认值为当前实例的数据盘大小,数据盘不支持缩容,因此不允许输入比当前实例数据盘大小的值
  • +
  • Memory (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围与UHostType相关)。默认值为当前实例的内存大小。
  • +
  • NetCapValue (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+start_uhost_instance(req=None, **kwargs)[source]
+

StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+stop_uhost_instance(req=None, **kwargs)[source]
+

StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+terminate_custom_image(req=None, **kwargs)[source]
+

TerminateCustomImage - 删除用户自定义镜像

+

Request

+ +

Response

+
    +
  • ImageId (str) - 自制镜像Id
  • +
+
+ +
+
+terminate_uhost_instance(req=None, **kwargs)[source]
+

TerminateUHostInstance - 删除指定数据中心的UHost实例。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost资源Id 参见 DescribeUHostInstance
  • +
  • Destroy (int) - 是否直接删除,0表示按照原来的逻辑(有回收站权限,则进入回收站),1表示直接删除
  • +
  • ReleaseEIP (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。
  • +
  • ReleaseUDisk (bool) - 是否删除挂载的数据盘。true删除,其他不删除。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • InRecycle (str) - 放入回收站:”Yes”, 彻底删除:“No”
  • +
  • UHostId (str) - UHost 实例 Id
  • +
+
+ +
+
+upgrade_to_ark_uhost_instance(req=None, **kwargs)[source]
+

UpgradeToArkUHostInstance - 普通升级为方舟机型

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostIds (list) - (Required) UHost主机的资源ID,例如UHostIds.0代表希望升级的主机1,UHostIds.1代表主机2。
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • CouponId (str) - 代金券ID 请参考DescribeCoupon接口
  • +
+

Response

+
    +
  • UHostSet (list) - UHost主机的资源ID数组
  • +
+
+ +
+ +
+
+

ULB

+
+
+class ucloud.services.ulb.client.ULBClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_backend(req=None, **kwargs)[source]
+

AllocateBackend - 添加ULB后端资源实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ResourceId (str) - (Required) 所添加的后端资源的资源ID
  • +
  • ResourceType (str) - (Required) 所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • VServerId (str) - (Required) VServer实例的ID
  • +
  • Enabled (int) - 后端实例状态开关,枚举值: 1:启用; 0:禁用 默认为启用
  • +
  • Port (int) - 所添加的后端资源服务端口,取值范围[1-65535],默认80
  • +
  • Weight (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1
  • +
+

Response

+
    +
  • BackendId (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关),可用于 UpdateBackendAttribute/UpdateBackendAttributeBatch/ReleaseBackend
  • +
+
+ +
+
+allocate_backend_batch(req=None, **kwargs)[source]
+

AllocateBackendBatch - 批量添加VServer后端节点

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Backends (list) - (Required) 用| 分割字段,格式:ResourceId| ResourceType| Port| Enabled|IP| Weight。ResourceId:所添加的后端资源的资源ID;ResourceType:所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”;Port:所添加的后端资源服务端口,取值范围[1-65535];Enabled:后端实例状态开关,枚举值: 1:启用; 0:禁用;IP:后端资源内网ip;Weight:所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • VServerId (str) - (Required) VServer实例的ID
  • +
  • ApiVersion (int) -
  • +
+

Response

+
    +
  • BackendSet (list) - 见 BackendSet 模型定义
  • +
+

Response Model

+

BackendSet

+
    +
  • BackendId (str) - rs的资源ID
  • +
  • ResourceId (str) - rs对应的UHost ID
  • +
+
+ +
+
+bind_ssl(req=None, **kwargs)[source]
+

BindSSL - 将SSL证书绑定到VServer

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLId (str) - (Required) SSL证书的Id
  • +
  • ULBId (str) - (Required) 所绑定ULB实例ID
  • +
  • VServerId (str) - (Required) 所绑定VServer实例ID
  • +
+

Response

+
+ +
+
+create_policy(req=None, **kwargs)[source]
+

CreatePolicy - 创建VServer内容转发策略

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId
  • +
  • Match (str) - (Required) 内容转发匹配字段
  • +
  • ULBId (str) - (Required) 需要添加内容转发策略的负载均衡实例ID
  • +
  • VServerId (str) - (Required) 需要添加内容转发策略的VServer实例ID
  • +
  • Type (str) - 内容转发匹配字段的类型
  • +
+

Response

+
    +
  • PolicyId (str) - 内容转发策略ID
  • +
+
+ +
+
+create_ssl(req=None, **kwargs)[source]
+

CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLName (str) - (Required) SSL证书的名字,默认值为空
  • +
  • CaCert (str) - CA证书
  • +
  • PrivateKey (str) - 加密证书的私钥
  • +
  • SSLContent (str) - SSL证书的完整内容,包括用户证书、加密证书的私钥、CA证书
  • +
  • SSLType (str) - 所添加的SSL证书类型,目前只支持Pem格式
  • +
  • UserCert (str) - 用户的证书
  • +
+

Response

+
    +
  • SSLId (str) - SSL证书的Id
  • +
+
+ +
+
+create_ulb(req=None, **kwargs)[source]
+

CreateULB - 创建负载均衡实例,可以选择内网或者外网

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - ULB 所属的业务组ID,如果不传则使用默认的业务组
  • +
  • ChargeType (str) - 付费方式
  • +
  • IPVersion (str) - ULB ip类型,枚举值:IPv6 / IPv4 (内部测试,暂未对外开放)
  • +
  • InnerMode (str) - 创建的ULB是否为内网模式
  • +
  • ListenType (str) - ULB 监听器类型,枚举值:RequestProxy / PacketsTransmit (内部测试,暂未对外开放)
  • +
  • OuterMode (str) - 创建的ULB是否为外网模式,默认即为外网模式
  • +
  • PrivateIp (str) - 创建内网ULB时指定内网IP。若不传值,则随机分配当前子网下的IP(暂时不对外开放,创建外网ULB该字段会忽略)
  • +
  • Remark (str) - 备注
  • +
  • SubnetId (str) - 内网ULB 所属的子网ID,如果不传则使用默认的子网
  • +
  • Tag (str) - 业务组
  • +
  • ULBName (str) - 负载均衡的名字,默认值为“ULB”
  • +
  • VPCId (str) - ULB所在的VPC的ID, 如果不传则使用默认的VPC
  • +
+

Response

+
    +
  • ULBId (str) - 负载均衡实例的Id
  • +
+
+ +
+
+create_vserver(req=None, **kwargs)[source]
+

CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例ID
  • +
  • ClientTimeout (int) - ListenType为RequestProxy时表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;ListenType为PacketsTransmit时表示连接保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持
  • +
  • Domain (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名
  • +
  • FrontendPort (int) - VServer后端端口,取值范围[1-65535];默认值为80
  • +
  • ListenType (str) - 监听器类型,枚举值为:RequestProxy -> 请求代理;PacketsTransmit -> 报文转发;默认为”RequestProxy”
  • +
  • Method (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:”Roundrobin”
  • +
  • MonitorType (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查;
  • +
  • Path (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径
  • +
  • PersistenceInfo (str) - 根据PersistenceType确认; None和ServerInsert: 此字段无意义; UserDefined:此字段传入自定义会话保持String
  • +
  • PersistenceType (str) - VServer会话保持方式,默认关闭会话保持。枚举值:None -> 关闭;ServerInsert -> 自动生成KEY;UserDefined -> 用户自定义KEY。
  • +
  • Protocol (str) - VServer实例的协议,请求代理模式下有 HTTP、HTTPS、TCP,报文转发下有 TCP,UDP。默认为“HTTP”
  • +
  • VServerName (str) - VServer实例名称,默认为”VServer”
  • +
+

Response

+
    +
  • VServerId (str) - VServer实例的Id
  • +
+
+ +
+
+delete_policy(req=None, **kwargs)[source]
+

DeletePolicy - 删除内容转发策略

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PolicyId (str) - (Required) 内容转发策略ID
  • +
  • GroupId (str) - 内容转发策略组ID
  • +
  • VServerId (str) - VServer 资源ID
  • +
+

Response

+
+ +
+
+delete_ssl(req=None, **kwargs)[source]
+

DeleteSSL - 删除SSL证书

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLId (str) - (Required) SSL证书的ID
  • +
+

Response

+
+ +
+
+delete_ulb(req=None, **kwargs)[source]
+

DeleteULB - 删除负载均衡实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • ReleaseEip (bool) - 删除ulb时是否释放绑定的EIP,false标识只解绑EIP,true表示会释放绑定的EIP,默认是false
  • +
+

Response

+
+ +
+
+delete_vserver(req=None, **kwargs)[source]
+

DeleteVServer - 删除VServer实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • VServerId (str) - (Required) VServer实例的ID
  • +
+

Response

+
+ +
+
+describe_ssl(req=None, **kwargs)[source]
+

DescribeSSL - 获取SSL证书信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 数据分页值,默认为20
  • +
  • Offset (int) - 数据偏移量,默认值为0
  • +
  • SSLId (str) - SSL证书的Id
  • +
+

Response

+
    +
  • DataSet (list) - 见 ULBSSLSet 模型定义
  • +
  • TotalCount (int) - 满足条件的SSL证书总数
  • +
+

Response Model

+

ULBSSLSet

+
    +
  • HashValue (str) -
  • +
  • SSLId (str) - SSL证书的Id
  • +
  • SSLName (str) - SSL证书的名字
  • +
+
+ +
+
+describe_ulb(req=None, **kwargs)[source]
+

DescribeULB - 获取ULB详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - ULB所属的业务组ID
  • +
  • Limit (int) - 数据分页值,默认为20
  • +
  • Offset (int) - 数据偏移量,默认为0
  • +
  • SubnetId (str) - ULB所属的子网ID
  • +
  • ULBId (str) - 负载均衡实例的Id。 若指定则返回指定的负载均衡实例的信息; 若不指定则返回当前数据中心中所有的负载均衡实例的信息
  • +
  • VPCId (str) - ULB所属的VPC
  • +
+

Response

+
    +
  • DataSet (list) - 见 ULBSet 模型定义
  • +
  • TotalCount (int) - 满足条件的ULB总数
  • +
+

Response Model

+

PolicyBackendSet

+
    +
  • BackendId (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关
  • +
  • ObjectId (str) - 后端资源的对象ID
  • +
  • Port (int) - 所添加的后端资源服务端口
  • +
  • PrivateIP (str) - 后端资源的内网IP
  • +
  • ResourceName (str) - 后端资源的实例名称
  • +
+

ULBPolicySet

+
    +
  • BackendSet (list) - 见 PolicyBackendSet 模型定义
  • +
  • Match (str) - 内容转发匹配字段;默认内容转发类型下为空。
  • +
  • PolicyId (str) - 内容转发Id,默认内容转发类型下为空。
  • +
  • PolicyPriority (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。
  • +
  • PolicyType (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发
  • +
  • TotalCount (int) - 默认内容转发类型下返回当前rs总数
  • +
  • Type (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空
  • +
  • VServerId (str) - 所属VServerId
  • +
+

ULBBackendSet

+
    +
  • BackendId (str) - 后端资源实例的Id
  • +
  • Enabled (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用
  • +
  • Port (int) - 后端提供服务的端口
  • +
  • PrivateIP (str) - 后端提供服务的内网IP
  • +
  • ResourceId (str) - 资源实例的资源Id
  • +
  • ResourceName (str) - 资源实例的资源名称
  • +
  • ResourceType (str) - 资源实例的类型
  • +
  • Status (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡实例的资源Id
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡实例的资源名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡实例的类型
  • +
  • SubnetId (str) - 后端提供服务的资源所在的子网的ID
  • +
  • Weight (int) -
  • +
+

ULBSSLSet

+
    +
  • HashValue (str) -
  • +
  • SSLId (str) - SSL证书的Id
  • +
  • SSLName (str) - SSL证书的名字
  • +
+

ULBVServerSet

+
    +
  • BackendSet (list) - 见 ULBBackendSet 模型定义
  • +
  • ClientTimeout (int) - 空闲连接的回收时间,单位:秒。
  • +
  • Domain (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名
  • +
  • FrontendPort (int) - VServer服务端口
  • +
  • ListenType (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发
  • +
  • Method (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。
  • +
  • MonitorType (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查;
  • +
  • Path (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径
  • +
  • PersistenceInfo (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。
  • +
  • PersistenceType (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。
  • +
  • PolicySet (list) - 见 ULBPolicySet 模型定义
  • +
  • Protocol (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。
  • +
  • SSLSet (list) - 见 ULBSSLSet 模型定义
  • +
  • Status (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。
  • +
  • VServerId (str) - VServer实例的Id
  • +
  • VServerName (str) - VServer实例的名字
  • +
+

ULBIPSet

+
    +
  • Bandwidth (int) - 弹性IP的带宽值(暂未对外开放)
  • +
  • BandwidthType (int) - 弹性IP的带宽类型,枚举值:1 表示是共享带宽,0 普通带宽类型(暂未对外开放)
  • +
  • EIP (str) - 弹性IP地址
  • +
  • EIPId (str) - 弹性IP的ID
  • +
  • OperatorName (str) - 弹性IP的运营商信息,枚举值为: Bgp:BGP IP International:国际IP
  • +
+

ULBSet

+
    +
  • Bandwidth (int) - 带宽
  • +
  • BandwidthType (int) - 带宽类型,枚举值为: 0,非共享带宽; 1,共享带宽
  • +
  • BusinessId (str) - ULB 所属的业务组ID
  • +
  • CreateTime (int) - ULB的创建时间,格式为Unix Timestamp
  • +
  • ExpireTime (int) - ULB的到期时间,格式为Unix Timestamp
  • +
  • IPSet (list) - 见 ULBIPSet 模型定义
  • +
  • Name (str) - 负载均衡的资源名称(资源系统中),缺省值“ULB”
  • +
  • PrivateIP (str) - ULB的内网IP,当ULBType为OuterMode时,该值为空
  • +
  • Remark (str) - 负载均衡的备注,缺省值“”
  • +
  • Resource (list) - ULB的详细信息列表(废弃)
  • +
  • SubnetId (str) - ULB 为 InnerMode 时,ULB 所属的子网ID,默认为空
  • +
  • Tag (str) - 负载均衡的业务组名称,缺省值“Default”
  • +
  • ULBId (str) - 负载均衡的资源ID
  • +
  • ULBName (str) - 负载均衡的资源名称(内部记载,废弃)
  • +
  • ULBType (str) - ULB 的类型
  • +
  • VPCId (str) - ULB所在的VPC的ID
  • +
  • VServerSet (list) - 见 ULBVServerSet 模型定义
  • +
+
+ +
+
+describe_vserver(req=None, **kwargs)[source]
+

DescribeVServer - 获取ULB下的VServer的详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例的Id
  • +
  • Limit (int) - 数据分页值
  • +
  • Offset (int) - 数据偏移量
  • +
  • VServerId (str) - VServer实例的Id;若指定则返回指定的VServer实例的信息; 若不指定则返回当前负载均衡实例下所有VServer的信息
  • +
+

Response

+
    +
  • DataSet (list) - 见 ULBVServerSet 模型定义
  • +
  • TotalCount (int) - 满足条件的VServer总数
  • +
+

Response Model

+

PolicyBackendSet

+
    +
  • BackendId (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关
  • +
  • ObjectId (str) - 后端资源的对象ID
  • +
  • Port (int) - 所添加的后端资源服务端口
  • +
  • PrivateIP (str) - 后端资源的内网IP
  • +
  • ResourceName (str) - 后端资源的实例名称
  • +
+

ULBSSLSet

+
    +
  • HashValue (str) -
  • +
  • SSLId (str) - SSL证书的Id
  • +
  • SSLName (str) - SSL证书的名字
  • +
+

ULBPolicySet

+
    +
  • BackendSet (list) - 见 PolicyBackendSet 模型定义
  • +
  • Match (str) - 内容转发匹配字段;默认内容转发类型下为空。
  • +
  • PolicyId (str) - 内容转发Id,默认内容转发类型下为空。
  • +
  • PolicyPriority (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。
  • +
  • PolicyType (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发
  • +
  • TotalCount (int) - 默认内容转发类型下返回当前rs总数
  • +
  • Type (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空
  • +
  • VServerId (str) - 所属VServerId
  • +
+

ULBBackendSet

+
    +
  • BackendId (str) - 后端资源实例的Id
  • +
  • Enabled (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用
  • +
  • Port (int) - 后端提供服务的端口
  • +
  • PrivateIP (str) - 后端提供服务的内网IP
  • +
  • ResourceId (str) - 资源实例的资源Id
  • +
  • ResourceName (str) - 资源实例的资源名称
  • +
  • ResourceType (str) - 资源实例的类型
  • +
  • Status (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡实例的资源Id
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡实例的资源名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡实例的类型
  • +
  • SubnetId (str) - 后端提供服务的资源所在的子网的ID
  • +
  • Weight (int) -
  • +
+

ULBVServerSet

+
    +
  • BackendSet (list) - 见 ULBBackendSet 模型定义
  • +
  • ClientTimeout (int) - 空闲连接的回收时间,单位:秒。
  • +
  • Domain (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名
  • +
  • FrontendPort (int) - VServer服务端口
  • +
  • ListenType (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发
  • +
  • Method (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。
  • +
  • MonitorType (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查;
  • +
  • Path (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径
  • +
  • PersistenceInfo (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。
  • +
  • PersistenceType (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。
  • +
  • PolicySet (list) - 见 ULBPolicySet 模型定义
  • +
  • Protocol (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。
  • +
  • SSLSet (list) - 见 ULBSSLSet 模型定义
  • +
  • Status (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。
  • +
  • VServerId (str) - VServer实例的Id
  • +
  • VServerName (str) - VServer实例的名字
  • +
+
+ +
+
+release_backend(req=None, **kwargs)[source]
+

ReleaseBackend - 从VServer释放后端资源实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID)
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
+

Response

+
+ +
+
+unbind_ssl(req=None, **kwargs)[source]
+

UnbindSSL - 从VServer解绑SSL证书

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLId (str) - (Required) SSL证书的Id
  • +
  • ULBId (str) - (Required) 所绑定ULB实例ID
  • +
  • VServerId (str) - (Required) 所绑定VServer实例ID
  • +
+

Response

+
+ +
+
+update_backend_attribute(req=None, **kwargs)[source]
+

UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID)
  • +
  • ULBId (str) - (Required) 负载均衡资源ID
  • +
  • Enabled (int) - 后端实例状态开关
  • +
  • Port (int) - 后端资源服务端口,取值范围[1-65535]
  • +
  • Weight (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1
  • +
+

Response

+
+ +
+
+update_policy(req=None, **kwargs)[source]
+

UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId
  • +
  • Match (str) - (Required) 内容转发匹配字段
  • +
  • PolicyId (str) - (Required) 转发规则的ID
  • +
  • ULBId (str) - (Required) 需要添加内容转发策略的负载均衡实例ID
  • +
  • VServerId (str) - (Required) 需要添加内容转发策略的VServer实例ID
  • +
  • Type (str) - 内容转发匹配字段的类型
  • +
+

Response

+
    +
  • PolicyId (str) - 转发规则的ID
  • +
+
+ +
+
+update_ulb_attribute(req=None, **kwargs)[source]
+

UpdateULBAttribute - 更新ULB名字业务组备注等属性字段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) ULB资源ID
  • +
  • Name (str) - 名字
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务
  • +
+

Response

+
+ +
+
+update_vserver_attribute(req=None, **kwargs)[source]
+

UpdateVServerAttribute - 更新VServer实例属性

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例ID
  • +
  • VServerId (str) - (Required) VServer实例ID
  • +
  • ClientTimeout (int) - 请求代理的VServer下表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;报文转发的VServer下表示回话保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持
  • +
  • Domain (str) - MonitorType 为 Path 时指定健康检查发送请求时HTTP HEADER 里的域名
  • +
  • Method (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:”Roundrobin”
  • +
  • MonitorType (str) - 健康检查的类型,Port:端口,Path:路径
  • +
  • Path (str) - MonitorType 为 Path 时指定健康检查发送请求时的路径,默认为 /
  • +
  • PersistenceInfo (str) - 根据PersistenceType确定: None或ServerInsert, 此字段无意义; UserDefined, 则此字段传入用户自定义会话保持String. 若无此字段则不做修改
  • +
  • PersistenceType (str) - VServer会话保持模式,若无此字段则不做修改。枚举值:None:关闭;ServerInsert:自动生成KEY;UserDefined:用户自定义KEY。
  • +
  • Protocol (str) - VServer协议类型,请求代理只支持修改为 HTTP/HTTPS,报文转发VServer只支持修改为 TCP/UDP
  • +
  • VServerName (str) - VServer实例名称,若无此字段则不做修改
  • +
+

Response

+
+ +
+ +
+
+

UMem

+
+
+class ucloud.services.umem.client.UMemClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_umem_cache_group(req=None, **kwargs)[source]
+

CreateUMemcacheGroup - 创建单机Memcache

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 请求创建组的名称 范围[6-60]
  • +
  • ChargeType (str) - 计费模式,Year , Month, Dynamic 默认: Month
  • +
  • ConfigId (str) - 配置ID,目前仅支持默认配置id 默认配置id:”9a891891-c245-4b66-bce8-67e59430d67c”
  • +
  • CouponId (str) - 代金券ID
  • +
  • Protocol (str) -
  • +
  • Quantity (int) - 购买时长,默认为1
  • +
  • Size (int) - 每个节点的内存大小,单位GB,默认1GB 目前仅支持1/2/4/8/16/32这几档
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组 默认:Default
  • +
  • VPCId (str) -
  • +
  • Version (str) - Memcache版本信息,默认为1.4.31
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • GroupId (str) - 创建的组ID
  • +
+
+ +
+
+create_umem_space(req=None, **kwargs)[source]
+

CreateUMemSpace - 创建UMem内存空间

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 空间名称,长度(6<=size<=63)
  • +
  • Size (int) - (Required) 内存大小, 单位:GB, 范围[1~1024]
  • +
  • ChargeType (str) - Year , Month, Dynamic, Trial 默认: Month
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Password (str) - URedis密码。请遵照 字段规范 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。
  • +
  • Protocol (str) - 协议:memcache, redis (默认redis).注意:redis无single类型
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • SubnetId (str) -
  • +
  • Tag (str) -
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • VPCId (str) -
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • SpaceId (str) - 创建内存空间ID列表
  • +
+
+ +
+
+create_uredis_group(req=None, **kwargs)[source]
+

CreateURedisGroup - 创建主备redis

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • HighAvailability (str) - (Required) 是否开启高可用,enable或disable
  • +
  • Name (str) - (Required) 请求创建组的名称 (范围[6-63],只能包含英文、数字以及符号-和_)
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • AutoBackup (str) - 是否自动备份,enable或disable,默认disable
  • +
  • BackupId (str) - 有此项代表从备份中创建,无代表正常创建
  • +
  • BackupTime (int) - 自动备份开始时间,范围[0-23],默认3点
  • +
  • ChargeType (str) - 计费模式,Year , Month, Dynamic 默认: Month
  • +
  • ConfigId (str) - 配置ID,目前支持 3.0版本配置ID:”03f58ca9-b64d-4bdd-abc7-c6b9a46fd801”,3.2版本配置ID:”3e45ac48-f8a2-a9q2-261d-l342dab130gf”, 4.0版本配置ID:”6c9298a3-9d7f-428c-b1d0-e87ab3b8a1ea”,默认版本3.0,从备份创建为必传项
  • +
  • CouponId (str) - 代金券ID
  • +
  • MasterGroupId (str) - Master Redis Group的ID,创建只读Slave时,必须填写
  • +
  • Password (str) - 初始化密码,需要 base64 编码
  • +
  • Quantity (int) - 购买时长,默认为1
  • +
  • Size (int) - 每个节点的内存大小,单位GB,默认1GB,目前仅支持1/2/4/8/16/32,六种
  • +
  • SlaveZone (str) - 跨机房URedis,slave所在可用区(必须和Zone在同一Region,且不可相同)
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组名称
  • +
  • VPCId (str) -
  • +
  • Version (str) - Redis版本信息(详见DescribeURedisVersion返回结果),默认版本3.0
  • +
+

Response

+
    +
  • GroupId (str) - 创建的组ID
  • +
+
+ +
+
+delete_umem_cache_group(req=None, **kwargs)[source]
+

DeleteUMemcacheGroup - 删除单机Memcache

+

Request

+ +

Response

+
+ +
+
+delete_umem_space(req=None, **kwargs)[source]
+

DeleteUMemSpace - 删除UMem内存空间

+

Request

+ +

Response

+
+ +
+
+delete_uredis_group(req=None, **kwargs)[source]
+

DeleteURedisGroup - 删除主备redis

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 组ID
  • +
+

Response

+
+ +
+
+describe_umem_cache_group(req=None, **kwargs)[source]
+

DescribeUMemcacheGroup - 显示Memcache

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit
  • +
  • Limit (int) - 分页显示的条目数, 默认值为20
  • +
  • Offset (int) - 分页显示的起始偏移, 默认值为0
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemcacheGroupSet 模型定义
  • +
  • TotalCount (int) - 组的总的节点个数
  • +
+

Response Model

+

UMemcacheGroupSet

+
    +
  • ChargeType (str) - 计费类型:Year,Month,Dynamic 默认Dynamic
  • +
  • ConfigId (str) - 节点的配置ID
  • +
  • CreateTime (int) - 创建时间 (UNIX时间戳)
  • +
  • ExpireTime (int) - 过期时间 (UNIX时间戳)
  • +
  • GroupId (str) - 组ID
  • +
  • ModifyTime (int) - 修改时间 (UNIX时间戳)
  • +
  • Name (str) - 组名称
  • +
  • Port (int) - 节点分配的服务端口
  • +
  • Size (int) - 容量单位GB
  • +
  • State (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败Restarting // 重启中
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组名称
  • +
  • UsedSize (int) - 使用量单位MB
  • +
  • VPCId (str) -
  • +
  • Version (str) - Memcache版本信息,默认为1.4.31
  • +
  • VirtualIP (str) - 节点的虚拟IP地址
  • +
+
+ +
+
+describe_umem_cache_price(req=None, **kwargs)[source]
+

DescribeUMemcachePrice - 获取umemcache组价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 容量大小,单位:GB 取值范围[1-32]
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - 计费模式,Year, Month, Dynamic,默认: Dynamic 默认: 获取所有计费模式的价格
  • +
  • Quantity (int) - 购买umemcache的时长,默认值为1
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemcachePriceSet 模型定义
  • +
+

Response Model

+

UMemcachePriceSet

+
    +
  • ChargeType (str) - 计费模式,Year, Month, Dynamic
  • +
  • OriginalPrice (int) - 原价
  • +
  • Price (int) - 总价格,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+describe_umem_cache_upgrade_price(req=None, **kwargs)[source]
+

DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 需要升级的空间的GroupId,请参考DescribeUMemcacheGroup接口
  • +
  • Size (int) - (Required) 购买umemcache大小,单位:GB
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (dict) - 见 PriceDataSet 模型定义
  • +
  • Price (int) - 价格,单位:元
  • +
+

Response Model

+

PriceDataSet

+
    +
  • CustomPrice (int) - 用户折后价
  • +
  • PurchaseValue (int) - 资源有效期
  • +
  • TotalPrice (int) - 升降级资源的价格
  • +
+
+ +
+
+describe_umem_price(req=None, **kwargs)[source]
+

DescribeUMemPrice - 获取UMem实例价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买umem大小,单位:GB,范围[1~1024]
  • +
  • Type (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial 如果不指定,则一次性获取三种计费
  • +
  • Quantity (int) - 购买UMem的时长,默认值为1
  • +
  • RegionFlag (bool) -
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemPriceSet 模型定义
  • +
+

Response Model

+

UMemPriceSet

+
    +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • OriginalPrice (int) - 原价
  • +
  • Price (int) - 现价,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+describe_umem_space(req=None, **kwargs)[source]
+

DescribeUMemSpace - 获取UMem内存空间列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • SpaceId (str) - 内存空间ID (无ID,则获取所有)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemSpaceSet 模型定义
  • +
  • TotalCount (int) - 根据过滤条件得到的总数
  • +
+

Response Model

+

UMemSpaceAddressSet

+
    +
  • IP (str) - UMem实例访问IP
  • +
  • Port (int) - UMem实例访问Port
  • +
+

UMemSpaceSet

+
    +
  • Address (list) - 见 UMemSpaceAddressSet 模型定义
  • +
  • ChargeType (str) - Year, Month, Dynamic, Trial
  • +
  • CreateTime (int) - 创建时间
  • +
  • ExpireTime (int) - 到期时间
  • +
  • Name (str) - 内存空间名称
  • +
  • Protocol (str) - 协议类型: memcache, redis
  • +
  • RewriteTime (int) - 运维时间0 //0点1 //1点依次类推
  • +
  • Size (int) - 容量单位GB
  • +
  • SpaceId (str) - 内存空间ID
  • +
  • State (str) - Starting:创建中 Running:运行中 Fail:失败
  • +
  • SubnetId (str) -
  • +
  • Tag (str) -
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)
  • +
  • UsedSize (int) - 使用量单位MB
  • +
  • VPCId (str) -
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_umem_upgrade_price(req=None, **kwargs)[source]
+

DescribeUMemUpgradePrice - 获取UMem升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买UMem大小,单位:GB
  • +
  • SpaceId (str) - (Required) 需要升级的空间的SpaceId
  • +
  • Type (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (dict) - 见 PriceDataSet 模型定义
  • +
  • Price (int) - 价格(兼容老版本)
  • +
+

Response Model

+

PriceDataSet

+
    +
  • CustomPrice (int) - 用户折后价
  • +
  • PurchaseValue (int) - 资源有效期
  • +
  • TotalPrice (int) - 升降级资源的价格
  • +
+
+ +
+
+describe_uredis_backup(req=None, **kwargs)[source]
+

DescribeURedisBackup - 查询主备redis备份

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 组的ID
  • +
  • Limit (int) - 分页显示的条目数, 默认值为10
  • +
  • Offset (int) - 分页显示的起始偏移, 默认值为0
  • +
+

Response

+
    +
  • DataSet (list) - 见 URedisBackupSet 模型定义
  • +
  • TotalCount (int) - 用户名下总的备份个数
  • +
+

Response Model

+

URedisBackupSet

+
    +
  • BackupId (str) - 备份ID
  • +
  • BackupName (str) - 备份的名称
  • +
  • BackupSize (int) - 备份文件大小, 以字节为单位
  • +
  • BackupTime (int) - 备份时间 (UNIX时间戳)
  • +
  • BackupType (str) - 备份类型: Manual 手动 Auto 自动
  • +
  • GroupId (str) - 对应的实例ID
  • +
  • GroupName (str) - 组名称
  • +
  • State (str) - 备份的状态: Backuping 备份中 Success 备份成功 Error 备份失败 Expired 备份过期
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_uredis_backup_url(req=None, **kwargs)[source]
+

DescribeURedisBackupURL - 获取主备Redis备份下载链接

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (str) - (Required) 备份ID
  • +
  • GroupId (str) - 实例名称
  • +
  • RegionFlag (bool) - 是否是跨机房URedis(默认false)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - 备份文件公网的地址
  • +
  • BackupURL (str) - 备份文件公网的地址
  • +
  • InnerBackupPath (str) -
  • +
+
+ +
+
+describe_uredis_group(req=None, **kwargs)[source]
+

DescribeURedisGroup - 查询主备Redis

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit
  • +
  • Limit (int) - 分页显示的条目数, 默认值为20
  • +
  • Offset (int) - 分页显示的起始偏移, 默认值为0
  • +
  • Zone (str) -
  • +
+

Response

+
    +
  • DataSet (list) - 见 URedisGroupSet 模型定义
  • +
  • TotalCount (int) - 组的总的节点个数
  • +
+

Response Model

+

URedisGroupSet

+
    +
  • AutoBackup (str) - 是否需要自动备份,enable,disable
  • +
  • BackupTime (int) - 组自动备份开始时间,单位小时计,范围[0-23]
  • +
  • ChargeType (str) - 计费类型:Year,Month,Dynamic 默认Dynamic
  • +
  • ConfigId (str) - 节点的配置ID
  • +
  • CreateTime (int) - 创建时间 (UNIX时间戳)
  • +
  • ExpireTime (int) - 过期时间 (UNIX时间戳)
  • +
  • GroupId (str) - 组ID
  • +
  • GroupName (str) - 组名称
  • +
  • HighAvailability (str) - 是否开启高可用,enable,disable
  • +
  • MemorySize (int) - 容量单位GB
  • +
  • ModifyTime (int) - 修改时间 (UNIX时间戳)
  • +
  • Name (str) - 组名称
  • +
  • Port (int) - 节点分配的服务端口
  • +
  • Protocol (str) - 协议
  • +
  • RewriteTime (int) - 返回运维时间 0 //0点 1 //1点 以此类推
  • +
  • Size (int) - 容量单位GB
  • +
  • SlaveZone (str) - 跨机房URedis,slave redis所在可用区,参见 可用区列表
  • +
  • State (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组名称
  • +
  • Type (str) -
  • +
  • UsedSize (int) - 使用量单位MB
  • +
  • VPCId (str) -
  • +
  • Version (str) - Redis版本信息
  • +
  • VirtualIP (str) - 节点的虚拟IP地址
  • +
  • Zone (str) - 实例所在可用区,或者master redis所在可用区,参见 可用区列表
  • +
+
+ +
+
+describe_uredis_price(req=None, **kwargs)[source]
+

DescribeURedisPrice - 取uredis价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 量大小,单位:GB 取值范围[1-32]
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - 计费模式,Year, Month, Dynamic;如果不指定,则一次性获取三种计费
  • +
  • ProductType (str) - 产品类型:MS_Redis(标准主备版),S_Redis(从库),默认为MS_Redis
  • +
  • Quantity (int) - 计费模式为Dynamic时,购买的时长, 默认为1
  • +
  • RegionFlag (bool) - 是否是跨机房URedis(默认false)
  • +
  • Type (str) -
  • +
+

Response

+
    +
  • DataSet (list) - 见 URedisPriceSet 模型定义
  • +
+

Response Model

+

URedisPriceSet

+
    +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • OriginalPrice (int) - 原价
  • +
  • Price (int) - 总价格,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+describe_uredis_upgrade_price(req=None, **kwargs)[source]
+

DescribeURedisUpgradePrice - 获取uredis升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 要升级的空间的GroupId,请参考DescribeURedisGroup接口
  • +
  • Size (int) - (Required) 购买uredis大小,单位:GB,范围是[1-32]
  • +
  • Type (str) -
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (dict) - 见 PriceDataSet 模型定义
  • +
  • Price (int) - 扩容差价,单位: 元,保留小数点后两位有效数字(兼容老版本)
  • +
+

Response Model

+

PriceDataSet

+
    +
  • CustomPrice (int) - 用户折后价
  • +
  • PurchaseValue (int) - 资源有效期
  • +
  • TotalPrice (int) - 升降级资源的价格
  • +
+
+ +
+
+get_umem_space_state(req=None, **kwargs)[source]
+

GetUMemSpaceState - 获取UMem内存空间列表

+

Request

+ +

Response

+
    +
  • State (str) - Starting:创建中 Running:运行中 Fail:失败
  • +
+
+ +
+
+modify_umem_space_name(req=None, **kwargs)[source]
+

ModifyUMemSpaceName - 修改UMem内存空间名称

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 新的名称,长度(6<=size<=63)
  • +
  • SpaceId (str) - (Required) UMem内存空间ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+modify_uredis_group_name(req=None, **kwargs)[source]
+

ModifyURedisGroupName - 修改主备redis名称

+

Request

+ +

Response

+
+ +
+
+resize_udredis_space(req=None, **kwargs)[source]
+

ResizeUDredisSpace - 调整内存空间容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024)
  • +
  • SpaceId (str) - (Required) 高性能UMem 内存空间Id
  • +
  • CouponId (str) - 使用的代金券Id
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_umem_space(req=None, **kwargs)[source]
+

ResizeUMemSpace - 调整内存空间容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024)
  • +
  • SpaceId (str) - (Required) UMem 内存空间Id
  • +
  • ChargeType (str) -
  • +
  • CouponId (str) - 使用的代金券Id
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_uredis_group(req=None, **kwargs)[source]
+

ResizeURedisGroup - 调整主备redis容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 组ID
  • +
  • Size (int) - (Required) 内存大小, 单位:GB (需要大于原size,且小于等于32) 目前仅支持1/2/4/8/16/32 G 六种容量规格
  • +
  • ChargeType (str) -
  • +
  • CouponId (int) - 代金券ID 请参考DescribeCoupon接口
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+restart_umem_cache_group(req=None, **kwargs)[source]
+

RestartUMemcacheGroup - 重启单机Memcache

+

Request

+ +

Response

+
+ +
+ +
+
+

UNet

+
+
+class ucloud.services.unet.client.UNetClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_eip(req=None, **kwargs)[source]
+

AllocateEIP - 根据提供信息, 申请弹性IP

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域。
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-200],带宽计费[1-800]
  • +
  • OperatorName (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International
  • +
  • ChargeType (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按需付费(需开启权限); Trial, 试用(需开启权限) 默认为按月付费
  • +
  • CouponId (str) - 代金券ID, 默认不使用
  • +
  • Name (str) - 弹性IP的名称, 默认为 “EIP”
  • +
  • PayMode (str) - 弹性IP的计费模式. 枚举值: “Traffic”, 流量计费; “Bandwidth”, 带宽计费; “ShareBandwidth”,共享带宽模式. 默认为 “Bandwidth”.
  • +
  • Quantity (int) - 购买时长, 默认: 1
  • +
  • Remark (str) - 弹性IP的备注, 默认为空
  • +
  • ShareBandwidthId (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效
  • +
  • Tag (str) - 业务组名称, 默认为 “Default”
  • +
+

Response

+
    +
  • EIPSet (list) - 见 UnetAllocateEIPSet 模型定义
  • +
+

Response Model

+

UnetEIPAddrSet

+
    +
  • IP (str) - IP地址
  • +
  • OperatorName (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp
  • +
+

UnetAllocateEIPSet

+
    +
  • EIPAddr (list) - 见 UnetEIPAddrSet 模型定义
  • +
  • EIPId (str) - 申请到的EIP资源ID
  • +
+
+ +
+
+allocate_share_bandwidth(req=None, **kwargs)[source]
+

AllocateShareBandwidth - 开通共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ChargeType (str) - (Required) 付费方式:Year 按年,Month 按月,Dynamic 按时;
  • +
  • Name (str) - (Required) 共享带宽名字
  • +
  • ShareBandwidth (int) - (Required) 共享带宽值
  • +
  • BwType (str) - 共享带宽类型,ipv4或者ipv6,不传默认ipv4
  • +
  • Quantity (int) - 购买时长
  • +
  • ShareBandwidthGuarantee (int) - 共享带宽保底值(后付费)
  • +
+

Response

+
    +
  • ShareBandwidthId (str) - 共享带宽资源Id
  • +
+
+ +
+
+allocate_vip(req=None, **kwargs)[source]
+

AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域
  • +
  • SubnetId (str) - (Required) 子网id
  • +
  • VPCId (str) - (Required) 指定vip所属的VPC
  • +
  • BusinessId (str) - 业务组
  • +
  • Count (int) - 申请数量,默认: 1
  • +
  • Ip (str) - 指定ip
  • +
  • Name (str) - vip名,默认为VIP
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组名称,默认为Default
  • +
  • Zone (str) - 可用区
  • +
+

Response

+
    +
  • DataSet (list) - 申请到的VIP地址
  • +
  • VIPSet (list) - 见 VIPSet 模型定义
  • +
+

Response Model

+

VIPSet

+
    +
  • VIP (str) - 虚拟ip
  • +
  • VIPId (str) - 虚拟ip id
  • +
  • VPCId (str) - VPC id
  • +
+
+ +
+
+associate_eip_with_share_bandwidth(req=None, **kwargs)[source]
+

AssociateEIPWithShareBandwidth - 将EIP加入共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域。
  • +
  • EIPIds (list) - (Required) 要加入共享带宽的EIP的资源Id
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽ID
  • +
+

Response

+
+ +
+
+bind_eip(req=None, **kwargs)[source]
+

BindEIP - 将尚未使用的弹性IP绑定到指定的资源

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • EIPId (str) - (Required) 弹性IP的资源Id
  • +
  • ResourceId (str) - (Required) 弹性IP请求绑定的资源ID
  • +
  • ResourceType (str) - (Required) 弹性IP请求绑定的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:natgw;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni:虚拟网卡。
  • +
+

Response

+
+ +
+
+create_bandwidth_package(req=None, **kwargs)[source]
+

CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域
  • +
  • Bandwidth (int) - (Required) 带宽大小(单位Mbps), 取值范围[2,800] (最大值受地域限制)
  • +
  • EIPId (str) - (Required) 所绑定弹性IP的资源ID
  • +
  • TimeRange (int) - (Required) 带宽包有效时长, 取值范围为大于0的整数, 即该带宽包在EnableTime到 EnableTime+TimeRange时间段内生效
  • +
  • CouponId (str) - 代金券ID
  • +
  • EnableTime (int) - 生效时间, 格式为 Unix timestamp, 默认为立即开通
  • +
+

Response

+
    +
  • BandwidthPackageId (str) - 所创建带宽包的资源ID
  • +
+
+ +
+
+create_firewall(req=None, **kwargs)[source]
+

CreateFirewall - 创建防火墙

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • Name (str) - (Required) 防火墙名称
  • +
  • Rule (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注
  • +
  • Remark (str) - 防火墙描述,默认为空
  • +
  • Tag (str) - 防火墙业务组,默认为Default
  • +
+

Response

+
    +
  • FWId (str) - 防火墙ID
  • +
+
+ +
+
+delete_bandwidth_package(req=None, **kwargs)[source]
+

DeleteBandwidthPackage - 删除弹性IP上已附加带宽包

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • BandwidthPackageId (str) - (Required) 带宽包资源ID
  • +
+

Response

+
+ +
+
+delete_firewall(req=None, **kwargs)[source]
+

DeleteFirewall - 删除防火墙

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
+

Response

+
+ +
+
+describe_bandwidth_package(req=None, **kwargs)[source]
+

DescribeBandwidthPackage - 获取某地域下的带宽包信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20
  • +
  • Offset (int) - 返回数据偏移量, 默认为0
  • +
+

Response

+
    +
  • DataSets (list) - 见 UnetBandwidthPackageSet 模型定义
  • +
  • TotalCount (int) - 满足条件的带宽包总数
  • +
+

Response Model

+

EIPAddrSet

+
    +
  • IP (str) - 弹性IP地址
  • +
  • OperatorName (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际.
  • +
+

UnetBandwidthPackageSet

+
    +
  • Bandwidth (int) - 带宽包的临时带宽值, 单位Mbps
  • +
  • BandwidthPackageId (str) - 带宽包的资源ID
  • +
  • CreateTime (int) - 创建时间, 格式为 Unix Timestamp
  • +
  • DisableTime (int) - 失效时间, 格式为 Unix Timestamp
  • +
  • EIPAddr (list) - 见 EIPAddrSet 模型定义
  • +
  • EIPId (str) - 带宽包所绑定弹性IP的资源ID
  • +
  • EnableTime (int) - 生效时间, 格式为 Unix Timestamp
  • +
+
+ +
+
+describe_bandwidth_usage(req=None, **kwargs)[source]
+

DescribeBandwidthUsage - 获取带宽用量信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPIds (list) - 弹性IP的资源Id. 如果为空, 则返回当前 Region中符合条件的所有EIP的带宽用量, n为自然数
  • +
  • Limit (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20
  • +
  • OffSet (int) - 返回数据偏移量, 默认为0
  • +
+

Response

+
    +
  • EIPSet (list) - 见 UnetBandwidthUsageEIPSet 模型定义
  • +
  • TotalCount (int) - EIPSet中的元素个数
  • +
+

Response Model

+

UnetBandwidthUsageEIPSet

+
    +
  • CurBandwidth (float) - 最近5分钟带宽用量, 单位Mbps
  • +
  • EIPId (str) - 弹性IP资源ID
  • +
+
+ +
+
+describe_eip(req=None, **kwargs)[source]
+

DescribeEIP - 获取弹性IP信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • EIPIds (list) - 弹性IP的资源ID如果为空, 则返回当前 Region中符合条件的的所有EIP
  • +
  • Limit (int) - 数据分页值, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
+

Response

+
    +
  • EIPSet (list) - 见 UnetEIPSet 模型定义
  • +
  • TotalBandwidth (int) - 满足条件的弹性IP带宽总和, 单位Mbps
  • +
  • TotalCount (int) - 满足条件的弹性IP总数
  • +
+

Response Model

+

ShareBandwidthSet

+
    +
  • ShareBandwidth (int) - 共享带宽带宽值
  • +
  • ShareBandwidthId (str) - 共享带宽ID
  • +
  • ShareBandwidthName (str) - 共享带宽的资源名称
  • +
+

UnetEIPAddrSet

+
    +
  • IP (str) - IP地址
  • +
  • OperatorName (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp
  • +
+

UnetEIPResourceSet

+
    +
  • EIPId (str) - 弹性IP的资源ID
  • +
  • ResourceId (str) - 已绑定资源的资源ID
  • +
  • ResourceName (str) - 已绑定的资源名称
  • +
  • ResourceType (str) - 已绑定的资源类型, 枚举值为: uhost, 云主机;natgw:NAT网关;ulb:负载均衡器;upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;vpngw:IPSec VPN;ucdr:云灾备;dbaudit:数据库审计,uni:虚拟网卡。
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡的ID
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡的名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡的类型。uni,虚拟网卡。
  • +
+

UnetEIPSet

+
    +
  • Bandwidth (int) - 弹性IP的带宽, 单位为Mbps, 当BandwidthType=1时, 该处显示为共享带宽值. 当BandwidthType=0时, 该处显示这个弹性IP的带宽.
  • +
  • BandwidthType (int) - 带宽模式, 枚举值为: 0: 非共享带宽模式, 1: 共享带宽模式
  • +
  • ChargeType (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按小时付费; Trial, 试用. 按小时付费和试用这两种付费模式需要开通权限.
  • +
  • CreateTime (int) - 弹性IP的创建时间, 格式为Unix Timestamp
  • +
  • EIPAddr (list) - 见 UnetEIPAddrSet 模型定义
  • +
  • EIPId (str) - 弹性IP的资源ID
  • +
  • Expire (bool) - 弹性IP是否到期
  • +
  • ExpireTime (int) - 弹性IP的到期时间, 格式为Unix Timestamp
  • +
  • Name (str) - 弹性IP的名称,缺省值为 “EIP”
  • +
  • PayMode (str) - 弹性IP的计费模式, 枚举值为: “Bandwidth”, 带宽计费; “Traffic”, 流量计费; “ShareBandwidth”,共享带宽模式. 默认为 “Bandwidth”.
  • +
  • Remark (str) - 弹性IP的备注, 缺省值为 “”
  • +
  • Resource (dict) - 见 UnetEIPResourceSet 模型定义
  • +
  • ShareBandwidthSet (dict) - 见 ShareBandwidthSet 模型定义
  • +
  • Status (str) - 弹性IP的资源绑定状态, 枚举值为: used: 已绑定, free: 未绑定, freeze: 已冻结
  • +
  • Tag (str) - 弹性IP的业务组标识, 缺省值为 “Default”
  • +
  • Weight (int) - 外网出口权重, 默认为50, 范围[0-100]
  • +
+
+ +
+
+describe_firewall(req=None, **kwargs)[source]
+

DescribeFirewall - 获取防火墙组信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • FWId (str) - 防火墙ID,默认为返回所有防火墙
  • +
  • Limit (int) - 返回数据长度,默认为20,最大10000000
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • ResourceId (str) - 绑定防火墙组的资源ID
  • +
  • ResourceType (str) - 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:”unatgw”,NAT网关; “uhost”,云主机; “upm”,物理云主机; “hadoophost”,hadoop节点; “fortresshost”,堡垒机; “udhost”,私有专区主机;”udockhost”,容器;”dbaudit”,数据库审计.
  • +
+

Response

+
    +
  • DataSet (list) - 见 FirewallDataSet 模型定义
  • +
  • TotalCount (int) -
  • +
+

Response Model

+

FirewallRuleSet

+
    +
  • DstPort (str) - 目标端口
  • +
  • Priority (str) - 优先级
  • +
  • ProtocolType (str) - 协议类型
  • +
  • Remark (str) - 防火墙规则备注
  • +
  • RuleAction (str) - 防火墙动作
  • +
  • SrcIP (str) - 源地址
  • +
+

FirewallDataSet

+
    +
  • CreateTime (int) - 防火墙组创建时间,格式为Unix Timestamp
  • +
  • FWId (str) - 防火墙ID
  • +
  • GroupId (str) - 安全组ID(即将废弃)
  • +
  • Name (str) - 防火墙名称
  • +
  • Remark (str) - 防火墙备注
  • +
  • ResourceCount (int) - 防火墙绑定资源数量
  • +
  • Rule (list) - 见 FirewallRuleSet 模型定义
  • +
  • Tag (str) - 防火墙业务组
  • +
  • Type (str) - 防火墙组类型,枚举值为: “user defined”, 用户自定义防火墙; “recommend web”, 默认Web防火墙; “recommend non web”, 默认非Web防火墙
  • +
+
+ +
+
+describe_firewall_resource(req=None, **kwargs)[source]
+

DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙ID
  • +
  • Limit (int) - 返回数据长度,默认为20,最大10000000
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
+

Response

+
    +
  • ResourceSet (list) - 见 ResourceSet 模型定义
  • +
  • TotalCount (int) - 绑定资源总数
  • +
+

Response Model

+

ResourceSet

+
    +
  • Name (str) - 名称
  • +
  • PrivateIP (str) - 内网IP
  • +
  • Remark (str) - 备注
  • +
  • ResourceID (str) - 绑定该防火墙的资源id
  • +
  • ResourceType (str) - 绑定资源的资源类型,如”uhost”,”upm”,”umem”,”uhive”,”uvip”,”uredis”,”uhadoop”,”ufortress”,”dbaudit”,”udw”,”udocker”, “umemcache”
  • +
  • Status (int) - 状态
  • +
  • Tag (str) - 业务组
  • +
  • Zone (int) - 可用区
  • +
+
+ +
+
+describe_share_bandwidth(req=None, **kwargs)[source]
+

DescribeShareBandwidth - 获取共享带宽信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ShareBandwidthIds (list) - 需要返回的共享带宽Id
  • +
+

Response

+
    +
  • DataSet (list) - 见 UnetShareBandwidthSet 模型定义
  • +
  • TotalCount (int) - 符合条件的共享带宽总数,大于等于返回DataSet长度
  • +
+

Response Model

+

EIPAddrSet

+
    +
  • IP (str) - 弹性IP地址
  • +
  • OperatorName (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际.
  • +
+

EIPSetData

+
    +
  • Bandwidth (int) - EIP带宽值
  • +
  • EIPAddr (list) - 见 EIPAddrSet 模型定义
  • +
  • EIPId (str) - EIP资源Id
  • +
+

UnetShareBandwidthSet

+
    +
  • BandwidthGuarantee (int) - 共享带宽保底值(后付费)
  • +
  • ChargeType (str) - 付费方式, 预付费:Year 按年,Month 按月,Dynamic 按需;后付费:PostPay(按月)
  • +
  • CreateTime (int) - 创建时间, 格式为Unix Timestamp
  • +
  • EIPSet (list) - 见 EIPSetData 模型定义
  • +
  • ExpireTime (int) - 过期时间, 格式为Unix Timestamp
  • +
  • Name (str) - 共享带宽名称
  • +
  • PostPayStartTime (int) - 共享带宽后付费开始计费时间(后付费)
  • +
  • ShareBandwidth (int) - 共享带宽值(预付费)/共享带宽峰值(后付费), 单位Mbps
  • +
  • ShareBandwidthId (str) - 共享带宽的资源ID
  • +
+
+ +
+
+describe_vip(req=None, **kwargs)[source]
+

DescribeVIP - 获取内网VIP详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - 业务组
  • +
  • SubnetId (str) - 子网id,不指定则获取VPCId下的所有vip
  • +
  • Tag (str) - 业务组名称, 默认为 Default
  • +
  • VPCId (str) - vpc的id,指定SubnetId时必填
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 内网VIP地址列表
  • +
  • TotalCount (int) - vip数量
  • +
  • VIPSet (list) - 见 VIPDetailSet 模型定义
  • +
+

Response Model

+

VIPDetailSet

+
    +
  • CreateTime (int) - 创建时间
  • +
  • Name (str) -
  • +
  • RealIp (str) - 真实主机ip
  • +
  • SubnetId (str) - 子网id
  • +
  • VIP (str) - 虚拟ip
  • +
  • VIPId (str) - 虚拟ip id
  • +
  • VPCId (str) - VPC id
  • +
  • Zone (str) - 地域
  • +
+
+ +
+
+disassociate_eip_with_share_bandwidth(req=None, **kwargs)[source]
+

DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 移出共享带宽后,EIP的外网带宽, 单位为Mbps. 各地域带宽范围如下: 流量计费[1-200],带宽计费[1-800]
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽ID
  • +
  • EIPIds (list) - EIP的资源Id;默认移出该共享带宽下所有的EIP
  • +
  • PayMode (str) - 移出共享带宽后,EIP的计费模式. 枚举值: “Traffic”, 流量计费; “Bandwidth”, 带宽计费; 默认为 “Bandwidth”.
  • +
+

Response

+
+ +
+
+get_eip_pay_mode(req=None, **kwargs)[source]
+

GetEIPPayMode - 获取弹性IP计费模式

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • EIPId (list) - (Required) 弹性IP的资源Id
  • +
+

Response

+
    +
  • EIPPayMode (list) - 见 EIPPayModeSet 模型定义
  • +
+

Response Model

+

EIPPayModeSet

+
    +
  • EIPId (str) - EIP的资源ID
  • +
  • EIPPayMode (str) - EIP的计费模式. 枚举值为:Bandwidth, 带宽计费;Traffic, 流量计费; “ShareBandwidth”,共享带宽模式
  • +
+
+ +
+
+get_eip_price(req=None, **kwargs)[source]
+

GetEIPPrice - 获取弹性IP价格

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [0-800]
  • +
  • OperatorName (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International,泉州为移动单线cn-qz:ChinaMobile
  • +
  • ChargeType (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按时付费; 默认为获取三种价格
  • +
  • PayMode (str) - 弹性IP计费方式r. 枚举值为: Traffic, 流量计费; Bandwidth, 带宽计费; “ShareBandwidth”,共享带宽模式. 默认为Bandwidth
  • +
  • Quantity (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末
  • +
+

Response

+
    +
  • PriceSet (list) - 见 EIPPriceDetailSet 模型定义
  • +
+

Response Model

+

EIPPriceDetailSet

+
    +
  • ChargeType (str) - 弹性IP付费方式
  • +
  • Price (float) - 弹性IP价格, 单位”元”
  • +
  • PurchaseValue (int) - 资源有效期, 以Unix Timestamp表示
  • +
+
+ +
+
+get_eip_upgrade_price(req=None, **kwargs)[source]
+

GetEIPUpgradePrice - 获取弹性IP带宽改动价格

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [1-800]
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
+

Response

+
    +
  • Price (float) - 调整带宽后的EIP价格, 单位为”元”, 如需退费此处为负值
  • +
+
+ +
+
+grant_firewall(req=None, **kwargs)[source]
+

GrantFirewall - 将防火墙应用到资源上

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
  • ResourceId (str) - (Required) 所应用资源ID
  • +
  • ResourceType (str) - (Required) 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:”unatgw”,NAT网关; “uhost”,云主机; “upm”,物理云主机; “hadoophost”,hadoop节点; “fortresshost”,堡垒机; “udhost”,私有专区主机;”udockhost”,容器;”dbaudit”,数据库审计,”uni“,虚拟网卡。
  • +
+

Response

+
+ +
+
+modify_eip_bandwidth(req=None, **kwargs)[source]
+

ModifyEIPBandwidth - 调整弹性IP的外网带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 各地域的带宽值范围如下:流量计费[1-200],带宽计费[1-800]
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
+

Response

+
+ +
+
+modify_eip_weight(req=None, **kwargs)[source]
+

ModifyEIPWeight - 修改弹性IP的外网出口权重

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
  • Weight (int) - (Required) 外网出口权重, 范围[0-100] 取值为0时, 该弹性IP不会被使用. 取值为100时, 同主机下只会使用这个弹性IP,其他弹性IP不会被使用 请勿将多个绑定在同一资源的弹性IP设置为相同权重
  • +
+

Response

+
+ +
+
+release_eip(req=None, **kwargs)[source]
+

ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态.

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
+

Response

+
+ +
+
+release_share_bandwidth(req=None, **kwargs)[source]
+

ReleaseShareBandwidth - 关闭共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPBandwidth (int) - (Required) 关闭共享带宽后,各EIP恢复为的带宽值
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽ID
  • +
  • PayMode (str) - Bandwidth 带宽计费, Traffic 转流量计费
  • +
+

Response

+
+ +
+
+release_vip(req=None, **kwargs)[source]
+

ReleaseVIP - 释放VIP资源

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • VIPId (str) - (Required) 内网VIP的id
  • +
  • Zone (str) - 可用区
  • +
+

Response

+
+ +
+
+resize_share_bandwidth(req=None, **kwargs)[source]
+

ResizeShareBandwidth - 调整共享带宽的带宽值

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ShareBandwidth (int) - (Required) 带宽值,单位为Mb,范围 [20-5000] (最大值受地域限制)
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽的Id
  • +
+

Response

+
+ +
+
+set_eip_pay_mode(req=None, **kwargs)[source]
+

SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费.

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 调整的目标带宽值, 单位Mbps. 各地域的带宽值范围如下: 流量计费[1-200],其余情况[1-800]
  • +
  • EIPId (str) - (Required) 弹性IP的资源Id
  • +
  • PayMode (str) - (Required) 计费模式. 枚举值:”Traffic”, 流量计费模式; “Bandwidth”, 带宽计费模式
  • +
+

Response

+
+ +
+
+un_bind_eip(req=None, **kwargs)[source]
+

UnBindEIP - 将弹性IP从资源上解绑

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) 弹性IP的资源Id
  • +
  • ResourceId (str) - (Required) 弹性IP请求解绑的资源ID
  • +
  • ResourceType (str) - (Required) 弹性IP请求解绑的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:NAT网关;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni,虚拟网卡。
  • +
+

Response

+
+ +
+
+update_eip_attribute(req=None, **kwargs)[source]
+

UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) EIP资源ID
  • +
  • Name (str) - 名字(Name Tag Remark都为空则报错)
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务
  • +
+

Response

+
+ +
+
+update_firewall(req=None, **kwargs)[source]
+

UpdateFirewall - 更新防火墙规则

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
  • Rule (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注
  • +
+

Response

+
    +
  • FWId (str) - 防火墙id
  • +
+
+ +
+
+update_firewall_attribute(req=None, **kwargs)[source]
+

UpdateFirewallAttribute - 更新防火墙规则

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
  • Name (str) - 防火墙名称,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上
  • +
  • Remark (str) - 防火墙备注,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上
  • +
  • Tag (str) - 防火墙业务组,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上
  • +
+

Response

+
+ +
+ +
+
+

UPHost

+
+
+class ucloud.services.uphost.client.UPHostClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_phost(req=None, **kwargs)[source]
+

CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ImageId (str) - (Required) 镜像ID。 请通过 [DescribePHostImage]获取
  • +
  • Password (str) - (Required) 密码(密码需使用base64进行编码)
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - 计费模式,枚举值为:year, 按年付费; month,按月付费;dynamic,按需付费,(需开启权限) trial, 试用(需开启权限)。默认为按月付费
  • +
  • Cluster (str) - 网络环境,可选千兆:1G ,万兆:10G, 默认1G
  • +
  • Count (int) - 购买数量,默认为1,(暂不支持)
  • +
  • CouponId (str) - 代金券
  • +
  • Name (str) - 物理机名称,默认为phost
  • +
  • Quantity (str) - 购买时长,默认为1,范围[1-10]
  • +
  • Raid (str) - Raid配置,默认Raid10 支持:Raid0、Raid1、Raid5、Raid10,NoRaid
  • +
  • Remark (str) - 物理机备注,默认为空
  • +
  • SecurityGroupId (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 DescribeSecurityGroup
  • +
  • SubnetId (str) - 子网ID,不填为默认,VPC2.0下需要填写此字段。
  • +
  • Tag (str) - 业务组,默认为default
  • +
  • Type (str) - 物理机类型,默认为:db-2(基础型-SAS-V3)
  • +
  • VPCId (str) - VPC ID,不填为默认,VPC2.0下需要填写此字段。
  • +
+

Response

+
    +
  • PHostId (list) - PHost的资源ID数组
  • +
+
+ +
+
+describe_phost(req=None, **kwargs)[source]
+

DescribePHost - 获取物理机详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度,默认为20
  • +
  • Offset (int) - 数据偏移量,默认为0
  • +
  • PHostId (list) - PHost资源ID,若为空,则返回当前Region所有PHost。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PHostSet (list) - 见 PHostSet 模型定义
  • +
  • TotalCount (int) - 满足条件的PHost总数
  • +
+

Response Model

+

PHostDiskSet

+
    +
  • Count (int) - 磁盘数量
  • +
  • IOCap (int) - 磁盘IO性能,单位MB/s(待废弃)
  • +
  • Name (str) - 磁盘名称,sys/data
  • +
  • Space (int) - 单盘大小,单位GB
  • +
  • Type (str) - 磁盘属性
  • +
+

PHostCPUSet

+
    +
  • CoreCount (int) - CPU核数
  • +
  • Count (int) - CPU个数
  • +
  • Frequence (float) - CPU主频
  • +
  • Model (str) - CPU型号
  • +
+

PHostIPSet

+
    +
  • Bandwidth (int) - IP对应带宽,单位Mb,内网IP不显示带宽信息
  • +
  • IPAddr (str) - IP地址,
  • +
  • IPId (str) - IP资源ID(内网IP无资源ID)(待废弃)
  • +
  • MACAddr (str) - MAC地址
  • +
  • OperatorName (str) - 国际: Internation, BGP: BGP, 内网: Private
  • +
  • SubnetId (str) - 子网ID
  • +
  • VPCId (str) - VPC ID
  • +
+

PHostSet

+
    +
  • AutoRenew (str) - 自动续费
  • +
  • CPUSet (list) - 见 PHostCPUSet 模型定义
  • +
  • ChargeType (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限)默认为月付
  • +
  • Cluster (str) - 网络环境。枚举值:千兆:1G ,万兆:10G
  • +
  • Components (str) - 组件信息(暂不支持)
  • +
  • CreateTime (int) - 创建时间
  • +
  • DiskSet (list) - 见 PHostDiskSet 模型定义
  • +
  • ExpireTime (int) - 到期时间
  • +
  • IPSet (list) - 见 PHostIPSet 模型定义
  • +
  • ImageName (str) - 镜像名称
  • +
  • IsSupportKVM (str) - 是否支持紧急登录
  • +
  • Memory (int) - 内存大小,单位:MB
  • +
  • Name (str) - 物理机名称
  • +
  • OSType (str) - 操作系统类型
  • +
  • OSname (str) - 操作系统名称
  • +
  • PHostId (str) - PHost资源ID
  • +
  • PHostType (str) - 物理机类型,参见DescribePHostMachineType返回值
  • +
  • PMStatus (str) - 物理云主机状态。枚举值:> 初始化:Initializing; > 启动中:Starting; > 运行中:Running;> 关机中:Stopping; > 安装失败:InstallFailed; > 重启中:Rebooting;> 关机:Stopped;
  • +
  • PowerState (str) - 电源状态,on 或 off
  • +
  • RaidSupported (str) - 是否支持Raid。枚举值:Yes:支持;No:不支持。
  • +
  • Remark (str) - 物理机备注
  • +
  • SN (str) - 物理机序列号
  • +
  • Tag (str) - 业务组
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_phost_image(req=None, **kwargs)[source]
+

DescribePHostImage - 获取物理云主机镜像列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ImageId (list) - 镜像ID
  • +
  • ImageType (str) - 镜像类别,枚举为:Base,标准镜像;默认为标准镜像。
  • +
  • Limit (int) - 返回数据长度,默认为20
  • +
  • Offset (int) - 数据偏移量,默认为0
  • +
+

Response

+
    +
  • ImageSet (list) - 见 PHostImageSet 模型定义
  • +
  • TotalCount (int) - 满足条件的镜像总数
  • +
+

Response Model

+

PHostImageSet

+
    +
  • ImageId (str) - 镜像ID
  • +
  • ImageName (str) - 镜像名称
  • +
  • OsName (str) - 操作系统名称
  • +
  • OsType (str) - 操作系统类型
  • +
+
+ +
+
+describe_phost_tags(req=None, **kwargs)[source]
+

DescribePHostTags - 获取物理机tag列表(业务组)

+

Request

+ +

Response

+
    +
  • TagSet (list) - 见 PHostTagSet 模型定义
  • +
  • TotalCount (int) - Tag的个数
  • +
+

Response Model

+

PHostTagSet

+
    +
  • Tag (str) - 业务组名称
  • +
  • TotalCount (int) - 该业务组中包含的主机个数
  • +
+
+ +
+
+get_phost_price(req=None, **kwargs)[source]
+

GetPHostPrice - 获取物理机价格列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ChargeType (str) - (Required) 计费模式,枚举值为: Year/Month/Trial/Dynamic
  • +
  • Count (int) - (Required) 购买数量,范围[1-5]
  • +
  • Quantity (int) - (Required) 购买时长,1-10个月或1-10年
  • +
  • Cluster (str) - 网络环境,可选千兆:1G ,万兆:10G
  • +
  • Type (str) - 默认为:DB(数据库型)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PriceSet (list) - 见 PHostPriceSet 模型定义
  • +
+

Response Model

+

PHostPriceSet

+
    +
  • ChargeType (str) - Year/Month/Trial/Dynamic
  • +
  • Price (float) - 价格, 单位:元, 保留小数点后两位有效数字
  • +
+
+ +
+
+modify_phost_info(req=None, **kwargs)[source]
+

ModifyPHostInfo - 更改物理机信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PHostId (str) - (Required) 物理机资源ID
  • +
  • Name (str) - 物理机名称,默认不更改
  • +
  • Remark (str) - 物理机备注,默认不更改
  • +
  • Tag (str) - 业务组,默认不更改
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+poweroff_phost(req=None, **kwargs)[source]
+

PoweroffPHost - 断电物理云主机

+

Request

+ +

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+reboot_phost(req=None, **kwargs)[source]
+

RebootPHost - 重启物理机

+

Request

+ +

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+reinstall_phost(req=None, **kwargs)[source]
+

ReinstallPHost - 重装物理机操作系统

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PHostId (str) - (Required) PHost资源ID
  • +
  • Password (str) - (Required) 密码
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ImageId (str) - 镜像Id,参考镜像列表,默认使用原镜像
  • +
  • Name (str) - 物理机名称,默认不更改
  • +
  • Raid (str) - 不保留数据盘重装,可选Raid
  • +
  • Remark (str) - 物理机备注,默认为不更改。
  • +
  • ReserveDisk (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes
  • +
  • Tag (str) - 业务组,默认不更改。
  • +
+

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+start_phost(req=None, **kwargs)[source]
+

StartPHost - 启动物理机

+

Request

+ +

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+terminate_phost(req=None, **kwargs)[source]
+

TerminatePHost - 删除物理云主机

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PHostId (str) - (Required) PHost资源ID
  • +
  • ReleaseEIP (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+ +
+
+

USMS

+
+
+class ucloud.services.usms.client.USMSClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_usms_signature(req=None, **kwargs)[source]
+

CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • CertificateType (int) - (Required) 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书;
  • +
  • Description (str) - (Required) 短信签名申请原因
  • +
  • File (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB
  • +
  • SigContent (str) - (Required) 短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加
  • +
  • SigPurpose (int) - (Required) 签名用途,0-自用,1-他用;
  • +
  • SigType (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称;
  • +
  • ProxyFile (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项;
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
  • SigContent (str) - 短信签名名称
  • +
  • SigId (str) - 短信签名ID(短信签名申请时的工单ID)
  • +
+
+ +
+
+create_usms_template(req=None, **kwargs)[source]
+

CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Purpose (int) - (Required) 短信模板用途类型:1-验证码类短信模板;2-系统通知类短信模板;3-会员推广类短信模板;
  • +
  • Template (str) - (Required) 短信模板内容,说明如下:字数不超过500,每个中文、符号、英文、数组等都计为一个字;模板中的变量填写格式:{N},其中N为大于1的整数,有多个参数时,建议N从1开始顺次,例如:{1}、{2}等;短信模板禁止仅包括变量的情况;
  • +
  • TemplateName (str) - (Required) 短信模板名称,不超过32个字符,每个中文、符号、英文、数字等都计为1个字。
  • +
  • Remark (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。
  • +
  • UnsubscribeInfo (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
  • TemplateId (str) - 短信模板ID(短信模板申请时的工单ID)
  • +
+
+ +
+
+delete_usms_signature(req=None, **kwargs)[source]
+

DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • SigIds (list) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1…SigIds.N方式传入
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
+
+ +
+
+delete_usms_template(req=None, **kwargs)[source]
+

DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • TemplateIds (list) - (Required) 模板ID(也即短信模板申请时的工单ID),支持以数组的方式,举例,以TemplateIds.0、TemplateIds.1…TemplateIds.N方式传入
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
+
+ +
+
+get_usms_send_receipt(req=None, **kwargs)[source]
+

GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SessionNoSet (list) - (Required) 发送短信时返回的SessionNo集合,SessionNoSet.0,SessionNoSet.1….格式
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Data (list) - 见 ReceiptPerSession 模型定义
  • +
  • Message (str) - 错误描述
  • +
+

Response Model

+

ReceiptPerPhone

+
    +
  • CostCount (int) - 消耗短信条数
  • +
  • Phone (str) - 手机号码
  • +
  • ReceiptDesc (str) - 回执结果描述
  • +
  • ReceiptResult (str) - 回执结果
  • +
  • ReceiptTime (int) - 回执返回时间
  • +
+

ReceiptPerSession

+
    +
  • ReceiptSet (list) - 见 ReceiptPerPhone 模型定义
  • +
  • SessionNo (str) - 发送短信时返回的SessionNo
  • +
+
+ +
+
+query_usms_signature(req=None, **kwargs)[source]
+

QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • SigContent (str) - 签名内容;签名ID和签名至少需填写1项;
  • +
  • SigId (str) - 已申请的短信签名ID(短信签名申请时的工单ID);签名ID和签名至少需填写1项;
  • +
+

Response

+
    +
  • Data (dict) - 见 OutSignature 模型定义
  • +
  • Message (str) - 发生错误时,表示具体错误描述
  • +
+

Response Model

+

OutSignature

+
    +
  • ErrDesc (str) - 签名审核失败原因
  • +
  • SigContent (str) - 签名内容
  • +
  • SigId (str) - 签名ID
  • +
  • Status (int) - 签名状态。0-待审核 1-审核中 2-审核通过 3-审核未通过 4-被禁用
  • +
+
+ +
+
+query_usms_template(req=None, **kwargs)[source]
+

QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • TemplateId (str) - (Required) 模板ID
  • +
+

Response

+
    +
  • Data (dict) - 见 OutTemplate 模型定义
  • +
  • Message (str) - 当RetCode不为0时,Message中显示具体错误描述
  • +
+

Response Model

+

OutTemplate

+
    +
  • CreateTime (int) - 创建时间
  • +
  • ErrDesc (str) - 审核失败原因
  • +
  • Purpose (int) - 模板类型,选项:1-验证码类 2-通知类 3-会员推广类
  • +
  • Remark (str) - 模板说明
  • +
  • Status (int) - 短信模板状态;状态说明:0-待审核,1-审核中,2-审核通过,3-审核未通过,4-被禁用
  • +
  • Template (str) - 短信模板内容
  • +
  • TemplateId (str) - 短信模板ID
  • +
  • TemplateName (str) - 短信模板名称
  • +
  • UnsubscribeInfo (str) - 退订信息;一般填写方式“回T退订”,当purpose为3(也即会员推广类)时,为必填项
  • +
+
+ +
+
+send_usms_message(req=None, **kwargs)[source]
+

SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PhoneNumbers (list) - (Required) 电话号码数组,电话号码格式为(60)1xxxxxxxx,()中为国际长途区号(如中国为86或0086,两种格式都支持),后面为电话号码.若不传入国际区号,如1851623xxxx,则默认为国内手机号
  • +
  • TemplateId (str) - (Required) 模板ID。若指定的模板ID审核未通过(status不等于2)则不允许发送
  • +
  • TemplateParams (list) - (Required) 模板参数数组,以TempalteParams.0,TempalteParams.1.。。格式。若模板ID指定的模板无可变参数,则不传入该参数。模板参数个数与模板不匹配,则不允许发送
  • +
  • SigContent (str) - 使用的签名,如果不输入则使用默认签名,若没有申请默认签名不允许发送;若输入的签名没有申请,则无法发送
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Action (str) - 操作名称
  • +
  • Message (str) - 发生错误时表示错误描述
  • +
  • RetCode (int) - 返回码
  • +
  • SessionNo (str) - 本次提交发送的短信的唯一ID,可根据该值查询本次发送的短信列表
  • +
+
+ +
+
+update_usms_signature(req=None, **kwargs)[source]
+

UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • File (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB
  • +
  • SigContent (str) - (Required) 新的短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加
  • +
  • SigId (str) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1…SigIds.N方式传入
  • +
  • SigPurpose (int) - (Required) 签名用途,0-自用,1-他用;
  • +
  • SigType (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称;
  • +
  • CertificateType (int) - 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书;
  • +
  • ProxyFile (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项;
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
+
+ +
+
+update_usms_template(req=None, **kwargs)[source]
+

UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Template (str) - (Required) 新的模板内容。模板名称和模板内容必须提供一个,否则会报错。小于等于600个字
  • +
  • TemplateId (str) - (Required) 短信模板ID
  • +
  • Remark (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。
  • +
  • TemplateName (str) - 新的模板名称。小于等于32个字,每个中文、英文、数组、符合都计为一个字
  • +
  • UnsubscribeInfo (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Message (str) - 发生错误时表示错误描述
  • +
+
+ +
+ +
+
+

VPC

+
+
+class ucloud.services.vpc.client.VPCClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+add_vpc_network(req=None, **kwargs)[source]
+

AddVPCNetwork - 添加VPC网段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Network (list) - (Required) 增加网段
  • +
  • VPCId (str) - (Required) 源VPC短ID
  • +
+

Response

+
+ +
+
+associate_route_table(req=None, **kwargs)[source]
+

AssociateRouteTable - 绑定子网的路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 路由表ID,仅限自定义路由表
  • +
  • SubnetId (str) - (Required) 子网ID
  • +
+

Response

+
+ +
+
+clone_route_table(req=None, **kwargs)[source]
+

CloneRouteTable - 根据一张现有路由表复制一张新的路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 被克隆的路由表ID
  • +
+

Response

+
+ +
+
+create_route_table(req=None, **kwargs)[source]
+

CreateRouteTable - 创建路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • VPCId (str) - (Required) VPC ID
  • +
  • Name (str) - 路由表名称 Default RouteTable
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组
  • +
+

Response

+
    +
  • RouteTableId (str) - 路由表ID
  • +
+
+ +
+
+create_subnet(req=None, **kwargs)[source]
+

CreateSubnet - 创建子网

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Subnet (str) - (Required) 子网网络地址,例如192.168.0.0
  • +
  • VPCId (str) - (Required) VPC资源ID
  • +
  • Netmask (int) - 子网网络号位数,默认为24
  • +
  • Remark (str) - 备注
  • +
  • SubnetName (str) - 子网名称,默认为Subnet
  • +
  • Tag (str) - 业务组名称,默认为Default
  • +
+

Response

+
    +
  • SubnetId (str) - 子网ID
  • +
+
+ +
+
+create_vpc(req=None, **kwargs)[source]
+

CreateVPC - 创建VPC

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) VPC名称
  • +
  • Network (list) - (Required) VPC网段
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组名称
  • +
  • Type (int) - VPC类型
  • +
+

Response

+
    +
  • VPCId (str) - VPC资源Id
  • +
+
+ +
+
+create_vpc_intercom(req=None, **kwargs)[source]
+

CreateVPCIntercom - 新建VPC互通关系

+

Request

+
    +
  • ProjectId (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 源VPC所在地域。 参见 地域和可用区列表
  • +
  • DstVPCId (str) - (Required) 目的VPC短ID
  • +
  • VPCId (str) - (Required) 源VPC短ID
  • +
  • DstProjectId (str) - 目的VPC项目ID。默认与源VPC同项目。
  • +
  • DstRegion (str) - 目的VPC所在地域,默认与源VPC同地域。
  • +
+

Response

+
+ +
+
+delete_route_table(req=None, **kwargs)[source]
+

DeleteRouteTable - 删除自定义路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 路由ID
  • +
+

Response

+
+ +
+
+delete_subnet(req=None, **kwargs)[source]
+

DeleteSubnet - 删除子网

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SubnetId (str) - (Required) 子网ID
  • +
+

Response

+
+ +
+
+delete_vpc(req=None, **kwargs)[source]
+

DeleteVPC - 删除VPC

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • VPCId (str) - (Required) VPC资源Id
  • +
+

Response

+
+ +
+
+delete_vpc_intercom(req=None, **kwargs)[source]
+

DeleteVPCIntercom - 删除VPC互通关系

+

Request

+
    +
  • ProjectId (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 源VPC所在地域。 参见 地域和可用区列表
  • +
  • DstVPCId (str) - (Required) 目的VPC短ID
  • +
  • VPCId (str) - (Required) 源VPC短ID
  • +
  • DstProjectId (str) - 目的VPC所在项目ID,默认为源VPC所在项目ID
  • +
  • DstRegion (str) - 目的VPC所在地域,默认为源VPC所在地域
  • +
+

Response

+
+ +
+
+describe_route_table(req=None, **kwargs)[source]
+

DescribeRouteTable - 获取路由表详细信息(包括路由策略)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - 业务组ID
  • +
  • Limit (int) - Limit
  • +
  • OffSet (int) - OffSet
  • +
  • RouteTableId (str) - 路由表ID
  • +
  • VPCId (str) - VPC ID
  • +
+

Response

+
    +
  • RouteTables (list) - 见 RouteTableInfo 模型定义
  • +
  • TotalCount (int) - RouteTables字段的数量
  • +
+

Response Model

+

RouteRuleInfo

+
    +
  • DstAddr (str) - 目的地址,比如10.10.8/24
  • +
  • NexthopId (str) - 路由下一跳ID,比如uvnet-3eljvj
  • +
  • NexthopType (str) - 下一跳类型,比如local、vnet
  • +
  • Remark (str) - 路由规则备注
  • +
  • RouteRuleId (str) - 规则ID
  • +
  • RuleType (int) - 路由规则类型(0表示系统路由,1表示自定义路由)
  • +
+

RouteTableInfo

+
    +
  • CreateTime (int) - 创建时间戳
  • +
  • Remark (str) - 路由表备注
  • +
  • RouteRules (list) - 见 RouteRuleInfo 模型定义
  • +
  • RouteTableId (str) - 路由表ID
  • +
  • RouteTableType (int) - 路由表类型,1为默认,0为自定义
  • +
  • SubnetCount (str) - 绑定了该路由表的子网数量
  • +
  • Tag (str) - 业务组
  • +
  • VPCId (str) - 路由表所属vpc
  • +
  • VPCName (str) - vpc名称
  • +
+
+ +
+
+describe_subnet(req=None, **kwargs)[source]
+

DescribeSubnet - 获取子网信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - 业务组
  • +
  • Limit (int) - 列表长度,默认为20
  • +
  • Offset (int) - 偏移量,默认为0
  • +
  • RouteTableId (str) - 路由表Id
  • +
  • SubnetId (str) - 子网id,适用于一次查询一个子网信息
  • +
  • SubnetIds (list) - 子网id数组,适用于一次查询多个子网信息
  • +
  • Tag (str) - 业务组名称,默认为Default
  • +
  • VPCId (str) - VPC资源id
  • +
+

Response

+
    +
  • DataSet (list) - 见 SubnetInfo 模型定义
  • +
  • TotalCount (int) - 子网总数量
  • +
+

Response Model

+

SubnetInfo

+
    +
  • CreateTime (int) - 创建时间
  • +
  • Gateway (str) - 子网网关
  • +
  • HasNATGW (bool) - 是否有natgw
  • +
  • IPv6Network (str) - 子网关联的IPv6网段
  • +
  • Netmask (int) - 子网掩码
  • +
  • OperatorName (str) - 子网关联的IPv6网段所属运营商
  • +
  • Remark (str) - 备注
  • +
  • RouteTableId (str) - 路由表Id
  • +
  • Subnet (str) - 子网网段
  • +
  • SubnetId (str) - 子网Id
  • +
  • SubnetName (str) - 子网名称
  • +
  • SubnetType (int) - 子网类型
  • +
  • Tag (str) - 业务组
  • +
  • VPCId (str) - VPCId
  • +
  • VPCName (str) - VPC名称
  • +
  • Zone (str) - 可用区名称
  • +
+
+ +
+
+describe_subnet_resource(req=None, **kwargs)[source]
+

DescribeSubnetResource - 展示子网资源

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SubnetId (str) - (Required) 子网id
  • +
  • Limit (int) - 单页返回数据长度,默认为20
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • ResourceType (str) - 资源类型,默认为全部资源类型。枚举值为:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP.
  • +
+

Response

+
    +
  • DataSet (list) - 见 SubnetResource 模型定义
  • +
  • TotalCount (int) - 总数
  • +
+

Response Model

+

SubnetResource

+
    +
  • IP (str) - 资源ip
  • +
  • IPv6Address (str) - 资源的IPv6地址
  • +
  • Name (str) - 资源名称
  • +
  • ResourceId (str) - 资源Id
  • +
  • ResourceType (str) - 资源类型。对应的资源类型:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP.
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡的实例ID
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡的实例名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡的类型
  • +
+
+ +
+
+describe_vpc(req=None, **kwargs)[source]
+

DescribeVPC - 获取VPC信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) -
  • +
  • Offset (int) -
  • +
  • Tag (str) - 业务组名称
  • +
  • VPCIds (list) - VPCId
  • +
+

Response

+
    +
  • DataSet (list) - 见 VPCInfo 模型定义
  • +
+

Response Model

+

VPCNetworkInfo

+
    +
  • Network (str) - vpc地址空间
  • +
  • SubnetCount (int) - 地址空间中子网数量
  • +
+

VPCInfo

+
    +
  • CreateTime (int) -
  • +
  • IPv6Network (str) - VPC关联的IPv6网段
  • +
  • Name (str) -
  • +
  • Network (list) -
  • +
  • NetworkInfo (list) - 见 VPCNetworkInfo 模型定义
  • +
  • OperatorName (str) - VPC关联的IPv6网段所属运营商
  • +
  • SubnetCount (int) -
  • +
  • Tag (str) -
  • +
  • UpdateTime (int) -
  • +
  • VPCId (str) - VPCId
  • +
+
+ +
+
+describe_vpc_intercom(req=None, **kwargs)[source]
+

DescribeVPCIntercom - 获取VPC互通信息

+

Request

+
    +
  • ProjectId (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 源VPC所在地域。 参见 地域和可用区列表
  • +
  • VPCId (str) - (Required) VPC短ID
  • +
  • DstProjectId (str) - 目的项目ID,默认为全部项目
  • +
  • DstRegion (str) - 目的VPC所在地域,默认为全部地域
  • +
+

Response

+
    +
  • DataSet (list) - 见 VPCIntercomInfo 模型定义
  • +
+

Response Model

+

VPCIntercomInfo

+
    +
  • DstRegion (str) - 所属地域
  • +
  • Name (str) - VPC名字
  • +
  • Network (list) - VPC的地址空间
  • +
  • ProjectId (str) - 项目Id
  • +
  • Tag (str) - 业务组(未分组显示为 Default)
  • +
  • VPCId (str) - VPCId
  • +
+
+ +
+
+modify_route_rule(req=None, **kwargs)[source]
+

ModifyRouteRule - 路由策略增、删、改

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteRule (list) - (Required) 格式: RouteRuleId | 目的网段 | 下一跳类型 | 下一跳 |优先级| 备注 | 增、删、改标志 (下一跳类型为instance或者vip,下一跳为云主机id或者vip的id,优先级使用0,动作标志为add/delete/update) 。”添加”示例: test_id | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| add (添加的RouteRuleId填任意非空字符串) 。”删除”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| delete (RouteRuleId来自DescribeRouteTable中) 。“修改”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-cjksa2 | 0 | Default Route Rule| update (RouteRuleId来自DescribeRouteTable中)
  • +
  • RouteTableId (str) - (Required) 通过DescribeRouteTable拿到
  • +
+

Response

+
+ +
+
+update_route_table_attribute(req=None, **kwargs)[source]
+

UpdateRouteTableAttribute - 更新路由表基本信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 路由表ID
  • +
  • Name (str) - 名称
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组名称
  • +
+

Response

+
+ +
+
+update_subnet_attribute(req=None, **kwargs)[source]
+

UpdateSubnetAttribute - 更新子网信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SubnetId (str) - (Required) 子网ID
  • +
  • Name (str) - 子网名称(如果Name不填写,Tag必须填写)
  • +
  • Tag (str) - 业务组名称(如果Tag不填写,Name必须填写)
  • +
+

Response

+
+ +
+
+update_vpc_network(req=None, **kwargs)[source]
+

UpdateVPCNetwork - 更新VPC网段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Network (list) - (Required) 需要保留的VPC网段。当前仅支持删除VPC网段,添加网段请参考 AddVPCNetwork
  • +
  • VPCId (str) - (Required) VPC的ID
  • +
+

Response

+
    +
  • Message (str) - 错误信息
  • +
+
+ +
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/build/html/usage.html b/docs/build/html/usage.html new file mode 100644 index 0000000..7db52c0 --- /dev/null +++ b/docs/build/html/usage.html @@ -0,0 +1,182 @@ + + + + + + + + Usage — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Usage

+
+

Type System

+

UCloud Python SDK has type system for runtime checking.

+

For example:

+
client.uhost().create_uhost_instance({
+    'CPU': "i am not a integer",
+})
+
+
+

it will raise ValidationException with invalid integer and some required field is miss matched.

+
+
+

Wait State Changed

+

SDK also provide state waiter helper to improver usage experience.

+

When using it?

+

Waiter can wait for remote state is achieved to target state. such as,

+
    +
  • create and wait for resource state is completed.
  • +
  • invoke/start/stop a resource and wait for it is finished.
  • +
  • custom retry policies and wait for retrying is finished.
  • +
+

For example:

+
def mget_uhost_states(uhost_ids):
+    resp = client.uhost().describe_uhost_instance({'UHostIds': uhost_ids})
+    return [inst.get('State') for inst in resp.get('UHostSet')]
+
+# Stop all instances
+for uhost_id in uhost_ids:
+    client.uhost().stop_uhost_instance({'UHostId': uhost_id})
+
+# Wait all instances is stopped
+wait.wait_for_state(
+    target=['stopped'], pending=['pending'],
+    timeout=300, # wait 5min
+    refresh=lambda: (
+        'stopped' if all([state == 'Stopped' for state in mget_uhost_states(uhost_ids)]) else 'pending'
+    ),
+)
+
+# Remove all instances
+for uhost_id in uhost_ids:
+    client.uhost().terminate_uhost_instance({'UHostId': uhost_id})
+
+
+

By the default, waiter will use exponential back-off delay between twice request. +it will raise WaitTimeoutException when timeout is reached.

+
+
+

Client/Transport Middleware

+

UCloud SDK provide middleware feature to client or transport level request.

+

It allowed to add custom logic into the lifecycle of request/response.

+

For example:

+
@client.middleware.request
+def log_params(req):
+    print('[REQ]', req)
+
+@client.middleware.response
+def log_response(resp):
+    print('[RESP]', resp)
+
+
+

or transport:

+
from ucloud.core.transport import RequestsTransport
+
+transport = RequestsTransport()
+
+@transport.middleware.request
+def log_request(req):
+    print('[REQ]', req)
+
+@transport.middleware.response
+def log_response(resp):
+    print('[RESP]', resp)
+
+Client({'Region': 'cn-bj2'}, transport=transport)
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 947f332..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- - -project = 'ucloud-sdk-python3' -copyright = '2019, ucloud' -author = 'ucloud' -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.todo', - 'sphinx.ext.viewcode'] -templates_path = ['_templates'] -exclude_patterns = [] -html_theme = 'alabaster' -html_static_path = ['_static'] diff --git a/examples/two-tier/README.md b/examples/two-tier/README.md deleted file mode 100644 index 7f8aab0..0000000 --- a/examples/two-tier/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# UCloud SDK Two-Tier Example - -## What is the goal - -Build a two-tier architecture with ulb and uhost, and remove all example data. - -## Setup Environment - -```go -export UCLOUD_PUBLIC_KEY="your public key" -export UCLOUD_PRIVATE_KEY="your private key" -export UCLOUD_PROJECT_ID="your project id" -``` - -## How to run - -```sh -python main.py -``` diff --git a/examples/two-tier/__init__.py b/examples/two-tier/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/examples/two-tier/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/examples/two-tier/main.py b/examples/two-tier/main.py deleted file mode 100644 index 4eb0eb9..0000000 --- a/examples/two-tier/main.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import logging -import random -from ucloud.client import Client -from ucloud.helpers import wait, utils - -logger = logging.getLogger("ucloud") -logger.setLevel(logging.DEBUG) -client = Client( - { - "region": "cn-bj2", - "project_id": os.getenv("UCLOUD_PROJECT_ID"), - "public_key": os.getenv("UCLOUD_PUBLIC_KEY"), - "private_key": os.getenv("UCLOUD_PRIVATE_KEY"), - } -) - - -def main(): - image_id = describe_image() - uhost_ids = create_uhost_batch(image_id, 2) - ulb_id = create_ulb() - vserver_id = create_vserver(ulb_id) - backend_ids = allocate_backend_batch(ulb_id, vserver_id, uhost_ids) - backend_ids and release_backend_batch(ulb_id, vserver_id, backend_ids) - vserver_id and delete_vserver(ulb_id, vserver_id) - ulb_id and delete_ulb(ulb_id) - uhost_ids and delete_uhost_batch(uhost_ids) - - -def describe_image(): - images = ( - client.uhost().describe_image({"ImageType": "Base"}).get("ImageSet", []) - ) - if not images: - return - image = random.choice(images) - return image.get("ImageId") - - -def mget_uhost_states(uhost_ids): - resp = client.uhost().describe_uhost_instance({"UHostIds": uhost_ids}) - return [inst.get("State") for inst in resp.get("UHostSet")] - - -def create_uhost_batch(image_id, count): - resp = client.uhost().create_uhost_instance( - { - "Name": "sdk-python3-example-two-tier", - "Zone": "cn-bj2-05", - "ImageId": image_id, - "LoginMode": "Password", - "Password": utils.gen_password(20), - "CPU": 1, - "Memory": 1024, - "MaxCount": count, - } - ) - uhost_ids = resp.get("UHostIds", []) - wait.wait_for_state( - target=["running"], - pending=["pending"], - timeout=300, - refresh=lambda: "running" - if all([(state == "Running") for state in mget_uhost_states(uhost_ids)]) - else "pending", - ) - return uhost_ids - - -def create_ulb(): - resp = client.ulb().create_ulb({"Name": "sdk-python3-example-two-tier"}) - return resp.get("ULBId") - - -def create_vserver(ulb_id): - resp = client.ulb().create_vserver( - {"Name": "sdk-python3-example-two-tier", "ULBId": ulb_id} - ) - return resp.get("VServerId") - - -def allocate_backend_batch(ulb_id, vserver_id, uhost_ids): - backend_ids = [] - for uhost_id in uhost_ids: - resp = client.ulb().allocate_backend( - { - "ULBId": ulb_id, - "VServerId": vserver_id, - "ResourceId": uhost_id, - "ResourceType": "UHost", - } - ) - backend_ids.append(resp.get("BackendId")) - return backend_ids - - -def release_backend_batch(ulb_id, vserver_id, backend_ids): - for backend_id in backend_ids: - client.ulb().release_backend( - {"ULBId": ulb_id, "VServerId": vserver_id, "BackendId": backend_id} - ) - - -def delete_vserver(ulb_id, vserver_id): - client.ulb().delete_vserver({"ULBId": ulb_id, "VServerId": vserver_id}) - - -def delete_ulb(ulb_id): - client.ulb().delete_ulb({"ULBId": ulb_id}) - - -def delete_uhost_batch(uhost_ids): - for uhost_id in uhost_ids: - client.uhost().stop_uhost_instance({"UHostId": uhost_id}) - wait.wait_for_state( - target=["stopped"], - pending=["pending"], - timeout=300, - refresh=lambda: "stopped" - if all([(state == "Stopped") for state in mget_uhost_states(uhost_ids)]) - else "pending", - ) - for uhost_id in uhost_ids: - client.uhost().terminate_uhost_instance({"UHostId": uhost_id}) - - -if __name__ == "__main__": - main() diff --git a/examples/uhost/README.md b/examples/uhost/README.md deleted file mode 100644 index e4553bc..0000000 --- a/examples/uhost/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# UCloud SDK UHost Example - -## What is the goal - -Create an uhost, wait it created, and remove all example data. - -## Setup Environment - -```go -export UCLOUD_PUBLIC_KEY="your public key" -export UCLOUD_PRIVATE_KEY="your private key" -export UCLOUD_PROJECT_ID="your project id" -``` - -## How to run - -```sh -python main.py -``` diff --git a/examples/uhost/__init__.py b/examples/uhost/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/examples/uhost/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/examples/uhost/main.py b/examples/uhost/main.py deleted file mode 100644 index 1f9e346..0000000 --- a/examples/uhost/main.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import logging -import random -from ucloud.client import Client -from ucloud.helpers import wait, utils - -logger = logging.getLogger("ucloud") -logger.setLevel(logging.DEBUG) - - -def main(): - client = Client( - { - "region": "cn-bj2", - "project_id": os.getenv("UCLOUD_PROJECT_ID"), - "public_key": os.getenv("UCLOUD_PUBLIC_KEY"), - "private_key": os.getenv("UCLOUD_PRIVATE_KEY"), - } - ) - logger.info("finding image, random choice one") - images = ( - client.uhost() - .describe_image({"ImageType": "Base", "OsType": "Linux"}) - .get("ImageSet", []) - ) - assert len(images) > 0 - logger.info("creating uhost instance ...") - image = random.choice(images) - resp = client.uhost().create_uhost_instance( - { - "Name": "sdk-python-example", - "Zone": image["Zone"], - "ImageId": image["ImageId"], - "LoginMode": "Password", - "Password": utils.gen_password(20), - "CPU": 1, - "Memory": 1024, - "Disks": [ - { - "Size": image["ImageSize"], - "Type": "LOCAL_NORMAL", - "IsBoot": "True", - } - ], - } - ) - uhost_id = utils.first(resp["UHostIds"]) - logger.info("uhost instance is created") - - def refresh_state(): - uhost = utils.first( - client.uhost() - .describe_uhost_instance({"UHostIds": [uhost_id]}) - .get("UHostSet", []) - ) - if uhost.get("State") in ["Running", "Stopped"]: - return uhost["State"].lower() - return "pending" - - logger.info("wait uhost state is running ...") - try: - wait.wait_for_state( - pending=["pending"], - target=["running"], - timeout=300, - refresh=refresh_state, - ) - except wait.WaitTimeoutException as e: - logger.error(e) - logger.info("uhost instance is running") - logger.info("stopping uhost for clean up resources ...") - client.uhost().stop_uhost_instance({"UHostId": uhost_id}) - try: - wait.wait_for_state( - pending=["pending"], - target=["stopped"], - timeout=180, - refresh=refresh_state, - ) - except wait.WaitTimeoutException as e: - logger.error(e) - else: - logger.info("uhost instance is stopped") - logger.info("remove uhost instance from cloud") - client.uhost().terminate_uhost_instance({"UHostId": uhost_id}) - - -if __name__ == "__main__": - main() diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000..1764206 --- /dev/null +++ b/genindex.html @@ -0,0 +1,1048 @@ + + + + + + + + + Index — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | I + | M + | P + | Q + | R + | S + | T + | U + | V + | W + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + +
+ +

G

+ + + +
+ +

I

+ + + +
+ +

M

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + +
+ +

W

+ + +
+ + + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/helpers.html b/helpers.html new file mode 100644 index 0000000..2000d8a --- /dev/null +++ b/helpers.html @@ -0,0 +1,207 @@ + + + + + + + + Helpers — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Helpers

+
+

Wait Resource State

+
+
+ucloud.helpers.wait.wait_for_state(pending, target, refresh, timeout, startup_delay=0, min_backoff_interval=0.1, max_backoff_interval=10)[source]
+

wait_for_state is a utilities function to wait the state return by refresh function achieve the specific state, +the generally usage is wait the cloud resource, such as uhost, udb … is +ready after created.

+
>>> wait_for_state(
+...     pending=["pending"],
+...     target=["running"],
+...     refresh=lambda: "running",
+...     timeout=0.5,
+... )
+
+
+ +++ + + + +
Parameters:
    +
  • pending – pending is the list of pending state, the state is returned by refresh function
  • +
  • target – target is the list of target state, it is usually the terminate state, eg. running and fail
  • +
  • refresh – the customized refresh function, expect no arguments and return a state
  • +
  • timeout – timeout is the total time to wait state is achieved
  • +
  • startup_delay – the time to wait before first refresh function is called
  • +
  • min_backoff_interval – the backoff time for first refresh interval
  • +
  • max_backoff_interval – the max backoff time for refresh interval
  • +
+
+
+ +
+
+

Utilities

+
+
+ucloud.helpers.utils.b64decode(s)[source]
+

base64 decode

+ +++ + + + + + +
Parameters:s (str) – base64 string
Returns:output string
+
+ +
+
+ucloud.helpers.utils.b64encode(s)[source]
+

base64 encode

+ +++ + + + + + +
Parameters:s (str) – input string
Returns:base64 string
+
+ +
+
+ucloud.helpers.utils.gen_password(n, lower_letters='abcdefghijklmnopqrstuvwxyz', upper_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ', number_letters='0123456789', special_letters='_', min_lower=1, min_upper=1, min_number=1, min_specials=1)[source]
+

generate password for any resource

+
>>> len(gen_password(20))
+20
+
+
+ +++ + + + + + +
Parameters:
    +
  • n (int) – password total length
  • +
  • lower_letters (str) – all lowercase letters
  • +
  • upper_letters (str) – all uppercase letters
  • +
  • number_letters (str) – all number letters
  • +
  • special_letters (str) – all special letters
  • +
  • min_lower (int) – minimal number of lowercase letters
  • +
  • min_upper (int) – minimal number of uppercase letters
  • +
  • min_number (int) – minimal number of number letters
  • +
  • min_specials (int) – minimal number of special letters
  • +
+
Returns:

+
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..011723e --- /dev/null +++ b/index.html @@ -0,0 +1,246 @@ + + + + + + + + UCloud SDK Python 2 — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

UCloud SDK Python 2

+

UCloud SDK is a Python client library for accessing the UCloud API.

+

This client can run on Linux, macOS and Windows.

+ +Latest Version +Travis CI Status +Codecov Status +Doc Status + +
+
+

QuickStart

+
+

Installation

+

Install with pip:

+
pip install ucloud-sdk-python2
+
+
+

Install with source code:

+
clone https://github.com/ucloud/ucloud-sdk-python2.git
+cd ucloud-sdk-python2
+python setup.py install
+
+
+
+
+

QuickStart

+

Currently, user public key & private key is the only method of authenticating with the API. You could get your keys here:

+ +

You can then use your keys to create a new client of uhost service:

+
from ucloud.core import exc
+from ucloud.client import Client
+
+client = Client({
+    "region": "cn-bj2",
+    "project_id": "...",
+    "public_key": "...",
+    "private_key": "...",
+})
+
+try:
+    resp = client.uhost().create_uhost_instance({
+        'Name': 'sdk-python-quickstart',
+        'Zone': image["zone"],
+        'ImageId': image["image_id"],
+        'LoginMode': "Password",
+        'Password': utils.b64encode(utils.gen_password(20)),
+        'CPU': 1,
+        'Memory': 1,
+        'Disks': [{
+            'Size': 10,
+            'Type': 'CLOUD_SSD'
+        }],
+    })
+except exc.UCloudException as e:
+    print(e)
+else:
+    print(resp)
+
+
+
+

Note

+

UHost created above cannot be accessed via Internet unless an EIP is created and bind to the UHost.

+
+
+ +
+

Indices and tables

+ +
+
+

Feedback & Contribution

+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000..0cdc3fc Binary files /dev/null and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 0000000..367e219 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,124 @@ + + + + + + + + Python Module Index — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Python Module Index

+ +
+ u +
+ + + + + + + + + + +
 
+ u
+ ucloud +
    + ucloud.helpers.utils +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index 23d020e..0000000 --- a/pytest.ini +++ /dev/null @@ -1,6 +0,0 @@ -[pytest] -log_cli = 1 -log_cli_level = INFO -log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s %(name)s) -testpaths = ucloud tests -addopts = --doctest-modules diff --git a/quick_start.html b/quick_start.html new file mode 100644 index 0000000..6b5cb97 --- /dev/null +++ b/quick_start.html @@ -0,0 +1,159 @@ + + + + + + + + QuickStart — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

QuickStart

+
+

Installation

+

Install with pip:

+
pip install ucloud-sdk-python2
+
+
+

Install with source code:

+
clone https://github.com/ucloud/ucloud-sdk-python2.git
+cd ucloud-sdk-python2
+python setup.py install
+
+
+
+
+

QuickStart

+

Currently, user public key & private key is the only method of authenticating with the API. You could get your keys here:

+ +

You can then use your keys to create a new client of uhost service:

+
from ucloud.core import exc
+from ucloud.client import Client
+
+client = Client({
+    "region": "cn-bj2",
+    "project_id": "...",
+    "public_key": "...",
+    "private_key": "...",
+})
+
+try:
+    resp = client.uhost().create_uhost_instance({
+        'Name': 'sdk-python-quickstart',
+        'Zone': image["zone"],
+        'ImageId': image["image_id"],
+        'LoginMode': "Password",
+        'Password': utils.b64encode(utils.gen_password(20)),
+        'CPU': 1,
+        'Memory': 1,
+        'Disks': [{
+            'Size': 10,
+            'Type': 'CLOUD_SSD'
+        }],
+    })
+except exc.UCloudException as e:
+    print(e)
+else:
+    print(resp)
+
+
+
+

Note

+

UHost created above cannot be accessed via Internet unless an EIP is created and bind to the UHost.

+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index f229360..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -requests diff --git a/scripts/migrate/__init__.py b/scripts/migrate/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/migrate/__main__.py b/scripts/migrate/__main__.py deleted file mode 100644 index 85405cd..0000000 --- a/scripts/migrate/__main__.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import json - -from scripts.migrate._migrate import Migrate, Config, PluginConfig - - -DEFAULT_CONFIG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.json') - -if __name__ == '__main__': - import argparse - - parser = argparse.ArgumentParser(description='argument parser') - parser.add_argument('--source', required=True, - help='source code file writen by python3') - parser.add_argument('--output', required=True, - help='output source code file writen by python2') - parser.add_argument('--config', required=False, - help='the configuration file for migration processing') - - with open(DEFAULT_CONFIG_PATH) as f: - d = json.load(f) - - config = Config() - config.plugins = [PluginConfig(**plugin) for plugin in d['plugins']] - print(config.__dict__) - - args = parser.parse_args() - migrate = Migrate(config) - migrate.run(args.source, args.output) diff --git a/scripts/migrate/_migrate.py b/scripts/migrate/_migrate.py deleted file mode 100644 index ae1c805..0000000 --- a/scripts/migrate/_migrate.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -import itertools -import os -import typing -import logging -import dataclasses - -from scripts.migrate._plugin_py3to2 import SDK3to2Transformer -from scripts.migrate._plugin_doc import DocTransformer - -logging.basicConfig() -logger = logging.getLogger(__name__) - - -@dataclasses.dataclass -class PluginConfig: - name: str - ext: typing.List[str] = None - options: dict = None - - -class Config: - paths: typing.List[str] = [] - plugins: typing.List[PluginConfig] = [] - - -class Migrate(object): - default_plugins_classes = { - "py3to2": SDK3to2Transformer, - "doc": DocTransformer, - } - - def __init__(self, config: Config = None): - self.plugins = {} - self.ext = {} - for plugin in config.plugins: - plugin_cls = self.default_plugins_classes.get(plugin.name) - if plugin_cls is None: - continue - - plugin_inst = plugin_cls(**(plugin.options or {})) - self.plugins[plugin.name] = plugin_inst - - for ext in plugin.ext: - self.ext.setdefault(ext, list()) - self.ext[ext].append(plugin_inst) - - self.paths = config.paths - - def find_python_files(self, dir_or_file): - if os.path.isdir(dir_or_file): - for folder, _, files in list(os.walk(dir_or_file)): - for file in files: - yield folder + os.path.sep + file - else: - yield dir_or_file - - def run(self, source_path: str, output_path: str): - for path in self.find_python_files(source_path): - # find plugins by file extension - plugins = [plugins for ext, plugins in self.ext.items() if path.endswith(ext)] - plugins = plugins and plugins[0] - - # skip unexpected file by file extension - if not plugins: - continue - - # resolve path - relative_path = os.path.relpath(path, source_path) - result_path = os.path.abspath(os.path.join(output_path, relative_path)) - print('migrate {} to {}'.format(path, result_path)) - - # read source code - with open(path, encoding='utf-8') as f: - source_code = f.read() - - # convert destination code - output_code = source_code - for plugin in plugins: - output_code = plugin.convert(source_code) - - # output to file - os.makedirs(os.path.dirname(result_path), exist_ok=True) - - with open(result_path, 'w', encoding='utf-8') as f: - f.write(output_code) diff --git a/scripts/migrate/_plugin_doc.py b/scripts/migrate/_plugin_doc.py deleted file mode 100644 index 002b79f..0000000 --- a/scripts/migrate/_plugin_doc.py +++ /dev/null @@ -1,11 +0,0 @@ - - -class DocTransformer: - def __init__(self, replaces=None): - self.replaces = replaces - - def convert(self, source: str) -> str: - result = source - for r in self.replaces: - result = result.replace(r['from'], r['to']) - return result diff --git a/scripts/migrate/_plugin_py3to2.py b/scripts/migrate/_plugin_py3to2.py deleted file mode 100644 index 1dece89..0000000 --- a/scripts/migrate/_plugin_py3to2.py +++ /dev/null @@ -1,61 +0,0 @@ -import ast - -import astor - - -class SDK3to2Transformer(ast.NodeTransformer): - UTF8_HEADER = '# -*- coding: utf-8 -*-\n\n' - - def visit_Import(self, node): - is_typing = [alias for alias in node.names if alias.name == 'typing'] - return None if is_typing else node - - def visit_AnnAssign(self, node): - if node.value is None: - return node - return ast.Assign(targets=[node.target], value=node.value) - - def visit_FunctionDef(self, node): - body = [] - - # remove type hints - for arg in node.args.args: - arg.annotation = None - - if node.args.kwarg: - node.args.kwarg.annotation = None - - # visit children - for child in node.body: - if isinstance(child, ast.FunctionDef): - body.append(self.visit_FunctionDef(child)) - elif isinstance(child, ast.AnnAssign): - body.append(self.visit_AnnAssign(child)) - else: - body.append(child) - - node.body = body - node.returns = None - return node - - def visit_ClassDef(self, node): - body = [] - - # old-style class convert to new-style class - if not node.bases: - node.bases = [ast.Name(id='object', ctx=ast.Load())] - - # visit children - for child in node.body: - if isinstance(child, ast.FunctionDef): - body.append(self.visit_FunctionDef(child)) - else: - body.append(child) - - node.body = body - return node - - def convert(self, source: str) -> str: - ast_node = ast.parse(source) - ast_node = self.visit(ast_node) - return self.UTF8_HEADER + astor.to_source(ast_node) diff --git a/scripts/migrate/config.json b/scripts/migrate/config.json deleted file mode 100644 index 3a33b19..0000000 --- a/scripts/migrate/config.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "plugins": [ - { - "name": "py3to2", - "ext": [ - ".py" - ] - }, - { - "name": "doc", - "ext": [ - ".md", - ".rst" - ], - "options": { - "replaces": [ - { - "from": "ucloud-sdk-python3", - "to": "ucloud-sdk-python2" - }, - { - "from": "UCloud SDK Python 3", - "to": "UCloud SDK Python 2" - } - ] - } - } - ] -} diff --git a/scripts/migrate/requirements.txt b/scripts/migrate/requirements.txt deleted file mode 100644 index 7c41503..0000000 --- a/scripts/migrate/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -astor diff --git a/scripts/migrate/test_migrate.py b/scripts/migrate/test_migrate.py deleted file mode 100644 index 48460b0..0000000 --- a/scripts/migrate/test_migrate.py +++ /dev/null @@ -1,44 +0,0 @@ -import ast -import astor -import pytest - -from scripts.migrate._plugin_py3to2 import SDK3to2Transformer - - -@pytest.mark.parametrize( - "input_vector,expected", - [ - ("foo: int = 42", "foo = 42"), - ("def fn(foo: str) -> int: pass", "def fn(foo):\n pass"), - ("class Foo: pass", "class Foo(object):\n pass"), - ("import typing", ""), - ("str(value)", "unicode(value)"), - ("def deco(fn: typing.Callable[[Client, dict], dict]): pass", "def deco(fn):\n pass"), - (""" -def step(self, **kwargs): - def deco(fn: typing.Callable[[Client, dict], dict]): - return fn - return deco - """, """ -def step(self, **kwargs): - def deco(fn): - return fn - return deco - """), - ], -) -def test_transformer(input_vector, expected): - transformer = SDK3to2Transformer() - result = transformer.convert(input_vector) - assert result == astor.to_source(ast.parse(expected)) - - -def test_parse_ast(): - input_vector = """ -def step(self, **kwargs): - def deco(fn: typing.Callable[[Client, dict], dict]): - return fn - return deco - """ - node = ast.parse(input_vector) - print(astor.dump_tree(node)) diff --git a/search.html b/search.html new file mode 100644 index 0000000..4d9cd42 --- /dev/null +++ b/search.html @@ -0,0 +1,117 @@ + + + + + + + + Search — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..91ab425 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["contents","core","helpers","index","quick_start","services","usage"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,"sphinx.ext.viewcode":1,sphinx:54},filenames:["contents.rst","core.rst","helpers.rst","index.rst","quick_start.rst","services.rst","usage.rst"],objects:{"ucloud.core.auth":{Credential:[1,0,1,""]},"ucloud.core.client":{Client:[1,0,1,""],Config:[1,0,1,""]},"ucloud.core.client.Client":{invoke:[1,1,1,""]},"ucloud.core.transport":{RequestsTransport:[1,0,1,""]},"ucloud.core.transport.RequestsTransport":{middleware:[1,2,1,""],send:[1,1,1,""]},"ucloud.core.utils.middleware":{Middleware:[1,0,1,""]},"ucloud.core.utils.middleware.Middleware":{exception:[1,1,1,""],request:[1,1,1,""],response:[1,1,1,""]},"ucloud.helpers":{utils:[2,3,0,"-"]},"ucloud.helpers.utils":{b64decode:[2,4,1,""],b64encode:[2,4,1,""],gen_password:[2,4,1,""]},"ucloud.helpers.wait":{wait_for_state:[2,4,1,""]},"ucloud.services.ipsecvpn.client":{IPSecVPNClient:[5,0,1,""]},"ucloud.services.ipsecvpn.client.IPSecVPNClient":{describe_remote_vpn_gateway:[5,1,1,""],describe_vpn_tunnel:[5,1,1,""]},"ucloud.services.pathx.client":{PathXClient:[5,0,1,""]},"ucloud.services.pathx.client.PathXClient":{create_global_ssh_instance:[5,1,1,""],delete_global_ssh_instance:[5,1,1,""],describe_global_ssh_area:[5,1,1,""],describe_global_ssh_instance:[5,1,1,""],modify_global_ssh_port:[5,1,1,""],modify_global_ssh_remark:[5,1,1,""]},"ucloud.services.stepflow.client":{StepFlowClient:[5,0,1,""]},"ucloud.services.stepflow.client.StepFlowClient":{create_sf_workflow_from_template:[5,1,1,""],get_sf_workflow_template:[5,1,1,""]},"ucloud.services.uaccount.client":{UAccountClient:[5,0,1,""]},"ucloud.services.uaccount.client.UAccountClient":{create_project:[5,1,1,""],get_project_list:[5,1,1,""],get_region:[5,1,1,""],get_user_info:[5,1,1,""],modify_project:[5,1,1,""],terminate_project:[5,1,1,""]},"ucloud.services.ucdn.client":{UCDNClient:[5,0,1,""]},"ucloud.services.ucdn.client.UCDNClient":{batch_describe_new_ucdn_domain:[5,1,1,""],describe_new_ucdn_prefetch_cache_task:[5,1,1,""],describe_new_ucdn_refresh_cache_task:[5,1,1,""],get_new_ucdn_domain_bandwidth:[5,1,1,""],get_new_ucdn_domain_hit_rate:[5,1,1,""],get_new_ucdn_domain_http_code:[5,1,1,""],get_new_ucdn_domain_http_code_v2:[5,1,1,""],get_new_ucdn_domain_request_num:[5,1,1,""],get_ucdn_domain_log:[5,1,1,""],get_ucdn_domain_prefetch_enable:[5,1,1,""],get_ucdn_domain_request_num_v2:[5,1,1,""],get_ucdn_domain_traffic:[5,1,1,""],get_ucdn_pass_bandwidth:[5,1,1,""],get_ucdn_traffic:[5,1,1,""],prefetch_new_ucdn_domain_cache:[5,1,1,""],refresh_new_ucdn_domain_cache:[5,1,1,""],switch_ucdn_charge_type:[5,1,1,""]},"ucloud.services.ucloudstack.client":{UCloudStackClient:[5,0,1,""]},"ucloud.services.ucloudstack.client.UCloudStackClient":{allocate_eip:[5,1,1,""],attach_disk:[5,1,1,""],bind_alarm_template:[5,1,1,""],bind_eip:[5,1,1,""],bind_physical_ip:[5,1,1,""],bind_security_group:[5,1,1,""],clone_disk:[5,1,1,""],create_certificate:[5,1,1,""],create_custom_image:[5,1,1,""],create_disk:[5,1,1,""],create_lb:[5,1,1,""],create_natgw:[5,1,1,""],create_natgw_rule:[5,1,1,""],create_physical_ip:[5,1,1,""],create_rs:[5,1,1,""],create_security_group:[5,1,1,""],create_security_group_rule:[5,1,1,""],create_snapshot:[5,1,1,""],create_subnet:[5,1,1,""],create_user:[5,1,1,""],create_vm_instance:[5,1,1,""],create_vpc:[5,1,1,""],create_vs:[5,1,1,""],create_vs_policy:[5,1,1,""],delete_certificate:[5,1,1,""],delete_custom_image:[5,1,1,""],delete_disk:[5,1,1,""],delete_lb:[5,1,1,""],delete_natgw:[5,1,1,""],delete_natgw_rule:[5,1,1,""],delete_physical_ip:[5,1,1,""],delete_rs:[5,1,1,""],delete_security_group:[5,1,1,""],delete_security_group_rule:[5,1,1,""],delete_snapshot:[5,1,1,""],delete_subnet:[5,1,1,""],delete_vm_instance:[5,1,1,""],delete_vpc:[5,1,1,""],delete_vs:[5,1,1,""],delete_vs_policy:[5,1,1,""],describe_certificate:[5,1,1,""],describe_disk:[5,1,1,""],describe_eip:[5,1,1,""],describe_image:[5,1,1,""],describe_lb:[5,1,1,""],describe_metric:[5,1,1,""],describe_natgw:[5,1,1,""],describe_natgw_rule:[5,1,1,""],describe_op_logs:[5,1,1,""],describe_physical_ip:[5,1,1,""],describe_recycled_resource:[5,1,1,""],describe_rs:[5,1,1,""],describe_security_group:[5,1,1,""],describe_storage_type:[5,1,1,""],describe_subnet:[5,1,1,""],describe_user:[5,1,1,""],describe_vm_instance:[5,1,1,""],describe_vm_type:[5,1,1,""],describe_vpc:[5,1,1,""],describe_vs:[5,1,1,""],describe_vs_policy:[5,1,1,""],detach_disk:[5,1,1,""],disable_rs:[5,1,1,""],enable_rs:[5,1,1,""],get_disk_price:[5,1,1,""],get_eip_price:[5,1,1,""],get_vm_instance_price:[5,1,1,""],modify_eip_bandwidth:[5,1,1,""],modify_name_and_remark:[5,1,1,""],poweroff_vm_instance:[5,1,1,""],recharge:[5,1,1,""],reinstall_vm_instance:[5,1,1,""],release_eip:[5,1,1,""],renew_resource:[5,1,1,""],reset_vm_instance_password:[5,1,1,""],resize_vm_config:[5,1,1,""],restart_vm_instance:[5,1,1,""],rollback_resource:[5,1,1,""],rollback_snapshot:[5,1,1,""],start_vm_instance:[5,1,1,""],stop_vm_instance:[5,1,1,""],terminate_resource:[5,1,1,""],un_bind_eip:[5,1,1,""],un_bind_security_group:[5,1,1,""],unbind_alarm_template:[5,1,1,""],unbind_physical_ip:[5,1,1,""],update_alarm_template_rule:[5,1,1,""],update_rs:[5,1,1,""],update_security_group_rule:[5,1,1,""],update_vs:[5,1,1,""],update_vs_policy:[5,1,1,""],upgrade_disk:[5,1,1,""]},"ucloud.services.udb.client":{UDBClient:[5,0,1,""]},"ucloud.services.udb.client.UDBClient":{backup_udb_instance:[5,1,1,""],backup_udb_instance_binlog:[5,1,1,""],backup_udb_instance_error_log:[5,1,1,""],backup_udb_instance_slow_log:[5,1,1,""],check_recover_udb_instance:[5,1,1,""],check_udb_instance_to_ha_allowance:[5,1,1,""],clear_udb_log:[5,1,1,""],create_udb_instance:[5,1,1,""],create_udb_instance_by_recovery:[5,1,1,""],create_udb_param_group:[5,1,1,""],create_udb_replication_instance:[5,1,1,""],create_udb_route_instance:[5,1,1,""],create_udb_slave:[5,1,1,""],delete_udb_backup:[5,1,1,""],delete_udb_instance:[5,1,1,""],delete_udb_log_package:[5,1,1,""],delete_udb_param_group:[5,1,1,""],describe_udb_backup:[5,1,1,""],describe_udb_backup_blacklist:[5,1,1,""],describe_udb_binlog_backup_url:[5,1,1,""],describe_udb_instance:[5,1,1,""],describe_udb_instance_backup_state:[5,1,1,""],describe_udb_instance_backup_url:[5,1,1,""],describe_udb_instance_binlog:[5,1,1,""],describe_udb_instance_binlog_backup_state:[5,1,1,""],describe_udb_instance_price:[5,1,1,""],describe_udb_instance_state:[5,1,1,""],describe_udb_instance_upgrade_price:[5,1,1,""],describe_udb_log_backup_url:[5,1,1,""],describe_udb_log_package:[5,1,1,""],describe_udb_param_group:[5,1,1,""],describe_udb_type:[5,1,1,""],edit_udb_backup_blacklist:[5,1,1,""],fetch_udb_instance_earliest_recover_time:[5,1,1,""],modify_udb_instance_name:[5,1,1,""],modify_udb_instance_password:[5,1,1,""],promote_udb_instance_to_ha:[5,1,1,""],promote_udb_slave:[5,1,1,""],resize_udb_instance:[5,1,1,""],restart_udb_instance:[5,1,1,""],start_udb_instance:[5,1,1,""],stop_udb_instance:[5,1,1,""],switch_udb_instance_to_ha:[5,1,1,""],update_udb_instance_backup_strategy:[5,1,1,""],update_udb_instance_slave_backup_switch:[5,1,1,""],update_udb_param_group:[5,1,1,""],upload_udb_param_group:[5,1,1,""]},"ucloud.services.udisk.client":{UDiskClient:[5,0,1,""]},"ucloud.services.udisk.client.UDiskClient":{attach_udisk:[5,1,1,""],clone_udisk:[5,1,1,""],clone_udisk_snapshot:[5,1,1,""],create_udisk:[5,1,1,""],create_udisk_snapshot:[5,1,1,""],delete_udisk:[5,1,1,""],delete_udisk_snapshot:[5,1,1,""],describe_udisk:[5,1,1,""],describe_udisk_price:[5,1,1,""],describe_udisk_snapshot:[5,1,1,""],describe_udisk_upgrade_price:[5,1,1,""],detach_udisk:[5,1,1,""],rename_udisk:[5,1,1,""],resize_udisk:[5,1,1,""],restore_udisk:[5,1,1,""],set_udisk__udataark_mode:[5,1,1,""]},"ucloud.services.udpn.client":{UDPNClient:[5,0,1,""]},"ucloud.services.udpn.client.UDPNClient":{allocate_udpn:[5,1,1,""],describe_udpn:[5,1,1,""],get_udpn_line_list:[5,1,1,""],get_udpn_price:[5,1,1,""],get_udpn_upgrade_price:[5,1,1,""],modify_udpn_bandwidth:[5,1,1,""],release_udpn:[5,1,1,""]},"ucloud.services.ufs.client":{UFSClient:[5,0,1,""]},"ucloud.services.ufs.client.UFSClient":{create_ufs_volume:[5,1,1,""],describe_ufs_volume_2:[5,1,1,""],extend_ufs_volume:[5,1,1,""],remove_ufs_volume:[5,1,1,""]},"ucloud.services.uhost.client":{UHostClient:[5,0,1,""]},"ucloud.services.uhost.client.UHostClient":{copy_custom_image:[5,1,1,""],create_custom_image:[5,1,1,""],create_uhost_instance:[5,1,1,""],describe_image:[5,1,1,""],describe_isolation_group:[5,1,1,""],describe_uhost_instance:[5,1,1,""],describe_uhost_instance_snapshot:[5,1,1,""],describe_uhost_tags:[5,1,1,""],get_uhost_instance_price:[5,1,1,""],get_uhost_instance_vnc_info:[5,1,1,""],get_uhost_upgrade_price:[5,1,1,""],import_custom_image:[5,1,1,""],modify_uhost_instance_name:[5,1,1,""],modify_uhost_instance_remark:[5,1,1,""],modify_uhost_instance_tag:[5,1,1,""],poweroff_uhost_instance:[5,1,1,""],reboot_uhost_instance:[5,1,1,""],reinstall_uhost_instance:[5,1,1,""],reset_uhost_instance_password:[5,1,1,""],resize_attached_disk:[5,1,1,""],resize_uhost_instance:[5,1,1,""],start_uhost_instance:[5,1,1,""],stop_uhost_instance:[5,1,1,""],terminate_custom_image:[5,1,1,""],terminate_uhost_instance:[5,1,1,""],upgrade_to_ark_uhost_instance:[5,1,1,""]},"ucloud.services.uhub.client":{UHubClient:[5,0,1,""]},"ucloud.services.uhub.client.UHubClient":{create_repo:[5,1,1,""],delete_repo:[5,1,1,""],delete_repo_image:[5,1,1,""],get_image_tag:[5,1,1,""],get_repo:[5,1,1,""],get_repo_image:[5,1,1,""],update_repo:[5,1,1,""]},"ucloud.services.ulb.client":{ULBClient:[5,0,1,""]},"ucloud.services.ulb.client.ULBClient":{allocate_backend:[5,1,1,""],allocate_backend_batch:[5,1,1,""],bind_ssl:[5,1,1,""],create_policy:[5,1,1,""],create_ssl:[5,1,1,""],create_ulb:[5,1,1,""],create_vserver:[5,1,1,""],delete_policy:[5,1,1,""],delete_ssl:[5,1,1,""],delete_ulb:[5,1,1,""],delete_vserver:[5,1,1,""],describe_ssl:[5,1,1,""],describe_ulb:[5,1,1,""],describe_vserver:[5,1,1,""],release_backend:[5,1,1,""],unbind_ssl:[5,1,1,""],update_backend_attribute:[5,1,1,""],update_policy:[5,1,1,""],update_ulb_attribute:[5,1,1,""],update_vserver_attribute:[5,1,1,""]},"ucloud.services.umem.client":{UMemClient:[5,0,1,""]},"ucloud.services.umem.client.UMemClient":{create_umem_cache_group:[5,1,1,""],create_umem_space:[5,1,1,""],create_uredis_group:[5,1,1,""],delete_umem_cache_group:[5,1,1,""],delete_umem_space:[5,1,1,""],delete_uredis_group:[5,1,1,""],describe_umem_cache_group:[5,1,1,""],describe_umem_cache_price:[5,1,1,""],describe_umem_cache_upgrade_price:[5,1,1,""],describe_umem_price:[5,1,1,""],describe_umem_space:[5,1,1,""],describe_umem_upgrade_price:[5,1,1,""],describe_uredis_backup:[5,1,1,""],describe_uredis_backup_url:[5,1,1,""],describe_uredis_group:[5,1,1,""],describe_uredis_price:[5,1,1,""],describe_uredis_upgrade_price:[5,1,1,""],get_umem_space_state:[5,1,1,""],modify_umem_space_name:[5,1,1,""],modify_uredis_group_name:[5,1,1,""],resize_udredis_space:[5,1,1,""],resize_umem_space:[5,1,1,""],resize_uredis_group:[5,1,1,""],restart_umem_cache_group:[5,1,1,""]},"ucloud.services.unet.client":{UNetClient:[5,0,1,""]},"ucloud.services.unet.client.UNetClient":{allocate_eip:[5,1,1,""],allocate_share_bandwidth:[5,1,1,""],allocate_vip:[5,1,1,""],associate_eip_with_share_bandwidth:[5,1,1,""],bind_eip:[5,1,1,""],create_bandwidth_package:[5,1,1,""],create_firewall:[5,1,1,""],delete_bandwidth_package:[5,1,1,""],delete_firewall:[5,1,1,""],describe_bandwidth_package:[5,1,1,""],describe_bandwidth_usage:[5,1,1,""],describe_eip:[5,1,1,""],describe_firewall:[5,1,1,""],describe_firewall_resource:[5,1,1,""],describe_share_bandwidth:[5,1,1,""],describe_vip:[5,1,1,""],disassociate_eip_with_share_bandwidth:[5,1,1,""],get_eip_pay_mode:[5,1,1,""],get_eip_price:[5,1,1,""],get_eip_upgrade_price:[5,1,1,""],grant_firewall:[5,1,1,""],modify_eip_bandwidth:[5,1,1,""],modify_eip_weight:[5,1,1,""],release_eip:[5,1,1,""],release_share_bandwidth:[5,1,1,""],release_vip:[5,1,1,""],resize_share_bandwidth:[5,1,1,""],set_eip_pay_mode:[5,1,1,""],un_bind_eip:[5,1,1,""],update_eip_attribute:[5,1,1,""],update_firewall:[5,1,1,""],update_firewall_attribute:[5,1,1,""]},"ucloud.services.uphost.client":{UPHostClient:[5,0,1,""]},"ucloud.services.uphost.client.UPHostClient":{create_phost:[5,1,1,""],describe_phost:[5,1,1,""],describe_phost_image:[5,1,1,""],describe_phost_tags:[5,1,1,""],get_phost_price:[5,1,1,""],modify_phost_info:[5,1,1,""],poweroff_phost:[5,1,1,""],reboot_phost:[5,1,1,""],reinstall_phost:[5,1,1,""],start_phost:[5,1,1,""],terminate_phost:[5,1,1,""]},"ucloud.services.usms.client":{USMSClient:[5,0,1,""]},"ucloud.services.usms.client.USMSClient":{create_usms_signature:[5,1,1,""],create_usms_template:[5,1,1,""],delete_usms_signature:[5,1,1,""],delete_usms_template:[5,1,1,""],get_usms_send_receipt:[5,1,1,""],query_usms_signature:[5,1,1,""],query_usms_template:[5,1,1,""],send_usms_message:[5,1,1,""],update_usms_signature:[5,1,1,""],update_usms_template:[5,1,1,""]},"ucloud.services.vpc.client":{VPCClient:[5,0,1,""]},"ucloud.services.vpc.client.VPCClient":{add_vpc_network:[5,1,1,""],associate_route_table:[5,1,1,""],clone_route_table:[5,1,1,""],create_route_table:[5,1,1,""],create_subnet:[5,1,1,""],create_vpc:[5,1,1,""],create_vpc_intercom:[5,1,1,""],delete_route_table:[5,1,1,""],delete_subnet:[5,1,1,""],delete_vpc:[5,1,1,""],delete_vpc_intercom:[5,1,1,""],describe_route_table:[5,1,1,""],describe_subnet:[5,1,1,""],describe_subnet_resource:[5,1,1,""],describe_vpc:[5,1,1,""],describe_vpc_intercom:[5,1,1,""],modify_route_rule:[5,1,1,""],update_route_table_attribute:[5,1,1,""],update_subnet_attribute:[5,1,1,""],update_vpc_network:[5,1,1,""]}},objnames:{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","attribute","Python attribute"],"3":["py","module","Python module"],"4":["py","function","Python function"]},objtypes:{"0":"py:class","1":"py:method","2":"py:attribute","3":"py:module","4":"py:function"},terms:{"03f58ca9":5,"0\u4e0b\u9700\u8981\u586b\u5199\u6b64\u5b57\u6bb5":5,"0\u4e0d\u652f\u6301":5,"0\u4e0d\u8fd4\u56de":5,"0\u4e3a\u4e0d\u4f18\u5148\u9075\u5faa\u6e90\u7ad9":5,"0\u4e3a\u4e0d\u5ffd\u7565":5,"0\u4e3a\u4e0d\u7f13\u5b58":5,"0\u4e3a\u81ea\u5b9a\u4e49":5,"0\u4ee3\u8868\u5e0c\u671b\u5347\u7ea7\u7684\u4e3b\u673a1":5,"0\u4ee3\u8868\u5e0c\u671b\u83b7\u53d6\u4fe1\u606f":5,"0\u4ee3\u8868\u5e0c\u671b\u83b7\u53d6\u4fe1\u606f\u7684vpn\u96a7\u90531":5,"0\u4ee3\u8868\u5e0c\u671b\u83b7\u53d6\u5ba2\u6237vpn\u7f51\u51731\u7684\u4fe1\u606f":5,"0\u5065\u5eb7\u68c0\u67e5\u5065\u5eb7\u72b6\u6001":5,"0\u60c5\u51b5\u4e0b":5,"0\u60c5\u51b5\u4e0b\u65e0\u9700\u586b\u5199":5,"0\u70b91":5,"0\u7248\u672c\u914d\u7f6eid":5,"0\u767d\u540d\u5355":5,"0\u8868\u793a\u4e0d\u53d8":5,"0\u8868\u793a\u4ece\u5e93\u5907\u4efd\u529f\u80fd\u5173\u95ed":5,"0\u8868\u793a\u5173\u95ed\u5f53\u5929\u5907\u4efd":5,"0\u8868\u793a\u6309\u71675\u5206\u949f\u7c92\u5ea6":5,"0\u8868\u793a\u6309\u7167\u539f\u6765\u7684\u903b\u8f91":5,"0\u8868\u793a\u7cfb\u7edf\u8def\u7531":5,"0\u8868\u793a\u81ea\u52a8":5,"0\u8868\u793a\u8be5\u57df\u540d\u672a\u5f00\u542f\u9884\u53d6":5,"1000m":5,"10\u4e2a\u6708\u62161":5,"10\u5206\u949f\u540e\u518d\u8c03\u7528\u8be5\u63a5\u53e3\u62c9\u53d6\u56de\u6267\u4fe1\u606f":5,"10\u5e74":5,"10g":5,"1100000\u8868\u793a\u6253\u5f00\u661f\u671f\u516d\u548c\u661f\u671f\u4e94\u7684\u5907\u4efd\u529f\u80fd":5,"12000m":5,"12\u4e2a\u5b57\u7b26":5,"15000m":5,"1500m":5,"16000m":5,"16\u683832768m":5,"1\u4e3a\u4f18\u5148\u9075\u5faa\u6e90\u7ad9\u7f13\u5b58\u5934\u90e8":5,"1\u4e3a\u5ffd\u7565":5,"1\u4e3a\u7f13\u5b58":5,"1\u4e3a\u9ed8\u8ba4":5,"1\u4ee3\u8868\u4e3b\u673a2":5,"1\u4ee3\u8868\u5ba2\u6237vpn\u7f51\u51732":5,"1\u4ee3\u8868vpn\u96a7\u90532":5,"1\u652f\u6301":5,"1\u68382048m":5,"1\u70b9\u4f9d\u6b21\u7c7b\u63a8":5,"1\u8868\u793a\u624b\u52a8":5,"1\u8868\u793a\u6253\u5f00\u5f53\u5929\u5907\u4efd":5,"1\u8868\u793a\u6309\u71671\u5c0f\u65f6\u7c92\u5ea6":5,"1\u8868\u793a\u76f4\u63a5\u5220\u9664":5,"1\u8868\u793a\u81ea\u5b9a\u4e49\u8def\u7531":5,"1\u8868\u793a\u8be5\u57df\u540d\u5df2\u5f00\u542f\u9884\u53d6":5,"1\u8fd4\u56de":5,"1\u9ed1\u540d\u5355":5,"1xx\u6570\u91cf":5,"1xxxxxxxx":5,"2000m":5,"24000m":5,"261d":5,"2\u68384096m":5,"2\u7248\u672c\u914d\u7f6eid":5,"2\u8868\u793a\u6309\u7167\u4e00\u5929\u7684\u7c92\u5ea6":5,"2\u8868\u793a\u6309\u7167\u4e00\u5929\u7c92\u5ea6":5,"2\u8868\u793a\u964d\u7ea7":5,"2xx\u6570\u91cf":5,"30000m":5,"3000g":5,"3000m":5,"30\u4e2a\u5b57\u7b26":5,"32000m":5,"32\u8fd9\u51e0\u6863":5,"3\u8868\u793a\u6309\u7167\u4e00\u5206\u949f\u7c92\u5ea6":5,"3e45ac48":5,"3eljvj":5,"3xx\u6570\u91cf":5,"4000m":5,"428c":5,"443\u7aef\u53e3":5,"48000m":5,"4\u68388192m":5,"4b66":5,"4bdd":5,"4xx\u6570\u91cf":5,"500g":5,"5\u53ca\u4ee5\u4e0a\u7248\u672c":5,"5\u7b49\u955c\u50cf\u4f1a\u6807\u8bb0\u4e3a":5,"5min":6,"5xx\u6570\u91cf":5,"6000m":5,"600m":5,"60s":5,"63\u4f4d":5,"64000m":5,"64\u7b49":5,"65535\u4e14\u4e0d\u80fd\u4f7f\u752880":5,"65535\u7b49":5,"67e59430d67c":5,"6c9298a3":5,"8000m":5,"8\u683816384m":5,"96000m":5,"9a891891":5,"9d7f":5,"\u4e00\u5929\u5185\u5907\u4efd\u65f6\u95f4\u95f4\u9694":5,"\u4e00\u6b21\u6700\u591a\u63d0\u4ea430\u4e2a":5,"\u4e00\u81f4\u6027\u54c8\u5e0c":5,"\u4e00\u822c\u586b\u5199\u65b9\u5f0f":5,"\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u7684":5,"\u4e03\u5c42lb\u4f7f\u7528":5,"\u4e07\u5146":5,"\u4e09\u8bc1\u5408\u4e00":5,"\u4e0a\u6d77":5,"\u4e0a\u6d77\u4e00":5,"\u4e0a\u6d77\u4e8c":5,"\u4e0b\u4e00\u4e2aactivity\u7684\u540d\u5b57":5,"\u4e0b\u4e00\u8df3":5,"\u4e0b\u4e00\u8df3\u4e3a\u4e91\u4e3b\u673aid\u6216\u8005vip\u7684id":5,"\u4e0b\u4e00\u8df3\u7c7b\u578b":5,"\u4e0b\u4e00\u8df3\u7c7b\u578b\u4e3ainstance\u6216\u8005vip":5,"\u4e0b\u6e38\u670d\u52a1\u63d0\u4f9b\u5546\u56de\u6267\u4fe1\u606f\u8fd4\u56de\u4f1a\u6709\u4e00\u5b9a\u5ef6\u65f6":5,"\u4e0d\u4e3a\u7a7a\u7684\u5176\u4ed6\u5b57\u7b26\u4e32\u4e3a\u5b9e\u9645\u8981\u5206\u914d\u7684ipv6\u5730\u5740":5,"\u4e0d\u4f1a\u5f71\u54cd\u521b\u5efa\u4e3b\u673a\u6d41\u7a0b":5,"\u4e0d\u4f20\u65f6\u8ba4\u4e3a\u4e0d\u4fee\u6539":5,"\u4e0d\u4f20\u65f6\u8ba4\u4e3a\u4e0d\u4fee\u6539\u540d\u5b57":5,"\u4e0d\u4f20\u83b7\u53d6\u9879\u76ee\u4e0b\u5168\u90e8\u5b9e\u4f8b":5,"\u4e0d\u4f20\u9ed8\u8ba4ipv4":5,"\u4e0d\u4fdd\u7559\u6570\u636e\u76d8\u91cd\u88c5":5,"\u4e0d\u5141\u8bb8\u591a\u70b9\u6302\u8f7d":5,"\u4e0d\u516c\u5f00\u4e3afals":5,"\u4e0d\u52a0\u5bc6":5,"\u4e0d\u533a\u5206\u5927\u5c0f\u5199":5,"\u4e0d\u53ef\u4ee5\u4e3afals":5,"\u4e0d\u53ef\u4fee\u6539":5,"\u4e0d\u53ef\u7528":5,"\u4e0d\u540c\u7684\u57df\u540d\u53ef\u4ee5\u914d\u7f6e\u4e3a\u540c\u4e00\u4e2acachehost\u6765\u5b9e\u73b0\u7f13\u5b58\u5171\u4eab":5,"\u4e0d\u5728\u9694\u79bb\u7ec4\u5219\u8fd4\u56de":5,"\u4e0d\u586b\u4e3a\u9ed8\u8ba4":5,"\u4e0d\u586b\u5199\u4e3a\u9ed8\u8ba4\u9879\u76ee":5,"\u4e0d\u586b\u5219\u6309\u73b0\u5728\u5355\u70b9\u8ba1\u8d39\u6267\u884c":5,"\u4e0d\u586b\u65f6\u9ed8\u8ba4\u5168\u90e8\u53ef\u7528\u533a":5,"\u4e0d\u586b\u9ed8\u8ba4\u4e3a\u5168\u90e8\u533a\u57df":5,"\u4e0d\u586b\u9ed8\u8ba4\u4e3a\u7a7a":5,"\u4e0d\u586b\u9ed8\u8ba4\u4e3a\u7a7a\u5b57\u7b26\u4e32":5,"\u4e0d\u586b\u9ed8\u8ba4ye":5,"\u4e0d\u5b89\u88c5":5,"\u4e0d\u5efa\u8bae\u8c03\u7528":5,"\u4e0d\u5f00\u542f":5,"\u4e0d\u62a5\u7559":5,"\u4e0d\u6307\u5b9a\u5219\u83b7\u53d6vpcid\u4e0b\u7684\u6240\u6709vip":5,"\u4e0d\u6307\u5b9atag\u5219\u5220\u9664\u5168\u90e8tag":5,"\u4e0d\u652f\u6301":5,"\u4e0d\u662f":5,"\u4e0d\u80fd\u5c0f\u4e8e\u539f\u786c\u76d8\u5bb9\u91cf":5,"\u4e0d\u81ea\u52a8\u7eed\u8d39":5,"\u4e0d\u8d85\u8fc732\u4e2a\u5b57\u7b26":5,"\u4e0d\u8d85\u8fc77":5,"\u4e0d\u8de8\u5730\u57df\u4e0d\u7528\u586b":5,"\u4e0d\u9002\u7528\u4e8e\u7cfb\u7edf\u76d8":5,"\u4e0d\u9700\u8981\u586b\u5199":5,"\u4e0d\u9700\u8981\u914d\u7f6einstancemod":5,"\u4e0e\u8d44\u6e90\u81ea\u8eabid\u65e0\u5173":5,"\u4e0ekey\u914d\u5408\u4f7f\u7528":5,"\u4e0evalue\u914d\u5408\u4f7f\u7528":5,"\u4e13\u533a\u7684id":5,"\u4e13\u533aid":5,"\u4e13\u533aid\u4fe1\u606f":5,"\u4e13\u7ebf":5,"\u4e13\u7ebf\u4ef7\u683c":5,"\u4e13\u7ebf\u53ef\u7528\u533a1":5,"\u4e13\u7ebf\u53ef\u7528\u533a2":5,"\u4e13\u7ebf\u5e26\u5bbd\u8d44\u6e90":5,"\u4e14":5,"\u4e141":5,"\u4e14\u4e0d\u53ef\u76f8\u540c":5,"\u4e14\u4f1a\u8bdd\u4fdd\u6301\u4e3a\u624b\u52a8\u65f6\u6709\u6548":5,"\u4e14\u544a\u8b66\u6a21\u677fid\u6b63\u786e":5,"\u4e14\u57df\u540d\u548c\u8def\u5f84\u7684\u7ec4\u5408\u5728\u4e00\u4e2a":5,"\u4e14\u5c0f\u4e8e\u7b49\u4e8e32":5,"\u4e1a\u52a1":5,"\u4e1a\u52a1\u7ec4":5,"\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u4e1a\u52a1\u7ec4id":5,"\u4e1c\u4eac":5,"\u4e24\u5957\u53c2\u6570\u53ef\u4ee5\u914d\u7f6e\u5347\u964d\u673a":5,"\u4e24\u79cd\u683c\u5f0f\u90fd\u652f\u6301":5,"\u4e2a":5,"\u4e2a\u6570":5,"\u4e2d":5,"\u4e2d\u4e3a\u56fd\u9645\u957f\u9014\u533a\u53f7":5,"\u4e2d\u56fd":5,"\u4e2d\u5fc5\u987b\u552f\u4e00":5,"\u4e2d\u6dfb\u52a0\u7684\u670d\u52a1\u8282\u70b9":5,"\u4e2d\u8d85\u8fc72\u4e2a\u8fde\u7eed\u5b57\u7b26\u7684\u90e8\u5206":5,"\u4e3a":5,"\u4e3a0\u7684\u60c5\u51b5\u4e0b":5,"\u4e3a1\u65f6disktype\u4e0euhost\u78c1\u76d8\u7c7b\u578b\u5b9a\u4e49\u4e00\u81f4":5,"\u4e3a\u53cc\u5411\u8ba4\u8bc1\u65f6\u6709\u6548":5,"\u4e3a\u5fc5\u586b\u9879":5,"\u4e3a\u6307\u5b9a\u5e93":5,"\u4e3a\u661f\u671f\u5929\u7684\u5907\u4efd\u5f00\u5173":5,"\u4e3a\u7a7a\u5219\u4e0d\u505a\u4fee\u6539":5,"\u4e3a\u7a7a\u62c9\u53d6\u6240\u6709":5,"\u4e3a\u8d1f\u8f7d\u5747\u8861\u7684":5,"\u4e3a\u975e\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f\u4e0b":5,"\u4e3amongodb\u65f6":5,"\u4e3atrue\u4ee3\u8868\u5141\u8bb8nul":5,"\u4e3aulb\u7cfb\u7edf\u4e2d\u4f7f\u7528":5,"\u4e3b\u4ece\u7ed3\u5bf9\u6570\u91cf":5,"\u4e3b\u57df\u540d":5,"\u4e3b\u5e93\u7684id":5,"\u4e3b\u673a\u4ee3\u91d1\u5238id":5,"\u4e3b\u673a\u5fc5\u987b\u5f00\u673a\u624d\u53ef\u4ee5\u91cd\u7f6e\u5bc6\u7801":5,"\u4e3b\u673a\u673a\u578b\u7684\u603b\u6570":5,"\u4e3b\u673a\u767b\u9646\u6a21\u5f0f":5,"\u4e3b\u673a\u7684\u751f\u547d\u5468\u671f\u7c7b\u578b":5,"\u4e3b\u673a\u7684\u7cfb\u7edf\u76d8id":5,"\u4e3b\u673a\u78c1\u76d8\u7c7b\u578b":5,"\u4e3b\u673a\u7cfb\u5217":5,"\u4e3b\u673aid\u7b49\u53c2\u6570\u8fdb\u884c\u8fc7\u6ee4":5,"\u4e3b\u8282\u70b9\u7684id":5,"\u4e3e\u4f8b":5,"\u4e3e\u4f8b\u5982\u4e0b":5,"\u4e4b\u524dlog":5,"\u4e4b\u95f4\u7684\u6574\u6570":5,"\u4e5f\u4e0d\u4f1a\u5728\u524d\u7aef\u62a5\u9519":5,"\u4e5f\u5373\u4f1a\u5458\u63a8\u5e7f\u7c7b":5,"\u4e5f\u5373\u4f1a\u5458\u63a8\u5e7f\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u4e5f\u5373\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u4e5f\u5373\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u4e5f\u5373sigpurpose\u4e3a1":5,"\u4e702\u4e2a\u6708":5,"\u4e91\u4e3b\u673a":5,"\u4e91\u4e3b\u673a\u673a\u578b":5,"\u4e91\u4e3b\u673a\u673a\u578b\u8bf4\u660e":5,"\u4e91\u707e\u5907":5,"\u4e91\u707e\u5907\u6307\u660e191":5,"\u4e91\u76d8":5,"\u4e91\u76d8\u4ee3\u91d1\u5238id":5,"\u4e91\u76d8\u652f\u63010":5,"\u4e91\u786c\u76d8":5,"\u4e91\u786c\u76d8\u7c7b\u578b\u53c2\u7167\u5982\u4e0b":5,"\u4e9a\u592a":5,"\u4ea7\u54c1\u7c7b\u578b":5,"\u4ec5\u5317\u4eaca\u7684\u4e91\u4e3b\u673a\u4f1a\u8fd4\u56de\u6b64\u5b57\u6bb5":5,"\u4ec5\u5728sqlserver\u7684\u60c5\u51b5\u4e0b\u586b\u8be5\u53c2\u6570":5,"\u4ec5\u5f53":5,"\u4ec5\u5f53\u78c1\u76d8\u662fudisk\u65f6\u8fd4\u56de":5,"\u4ec5\u5f53\u8be5\u53ef\u7528\u533a\u652f\u6301\u8de8\u53ef\u7528\u533a\u9ad8\u53ef\u7528\u65f6\u586b\u5165":5,"\u4ec5\u5f53paymode\u4e3asharebandwidth\u65f6\u6709\u6548":5,"\u4ec5\u5f53vserver\u76d1\u542c\u534f\u8bae\u4e3a":5,"\u4ec5\u652f\u6301\u6b63\u5e38\u72b6\u6001\u7684\u5feb\u7167\u8fdb\u884c\u56de\u6eda\u64cd\u4f5c":5,"\u4ec5\u652f\u6301\u6dfb\u52a0\u4e0e":5,"\u4ec5\u652f\u6301\u72b6\u6001\u4e3a\u6b63\u5e38\u7684\u5feb\u7167\u8fdb\u884c\u5220\u9664\u64cd\u4f5c":5,"\u4ec5\u652f\u6301\u90e8\u5206\u53ef\u7528\u533a":5,"\u4ec5\u884c\u4e1a\u955c\u50cf\u5c06\u8fd4\u56de\u8fd9\u4e2a\u503c":5,"\u4ec5\u9002\u7528\u4e8e\u865a\u62df\u673a\u6b7b\u673a\u53ca\u7ea7\u7aef\u6d4b\u8bd5\u573a\u666f":5,"\u4ec5\u90e8\u5206\u53ef\u7528\u533a\u652f\u6301\u4e91\u786c\u76d8\u65b9\u5f0f\u7684\u4e3b\u673a\u5b58\u50a8\u65b9\u5f0f":5,"\u4ec5\u9650\u81ea\u5b9a\u4e49\u8def\u7531\u8868":5,"\u4ec5\u9700\u8981\u5176\u4e2d1\u4e2a\u5b57\u6bb5\u5373\u53ef":5,"\u4ec5gpu\u673a\u578b\u652f\u6301\u6b64\u5b57\u6bb5":5,"\u4ecb\u7ecd\u94fe\u63a5":5,"\u4ecd\u5728\u521d\u59cb\u5316\u7684\u7cfb\u7edf\u76d8\u65e0\u6cd5\u5236\u4f5c\u955c\u50cf":5,"\u4ece\u5907\u4efd\u521b\u5efa\u4e3a\u5fc5\u4f20\u9879":5,"\u4ece\u5907\u4efd\u6062\u590d\u6570\u636e\u81f3udisk":5,"\u4ece\u5df2\u6709\u914d\u7f6e\u6587\u4ef6\u521b\u5efa\u65b0\u914d\u7f6e\u6587\u4ef6":5,"\u4ece\u5e93":5,"\u4ece\u5e93\u5b9e\u4f8b":5,"\u4ece\u5e93\u63d0\u5347\u4e3a\u72ec\u7acb\u5e93":5,"\u4ece\u5e93\u7684\u5907\u4efd\u5f00\u5173":5,"\u4ece\u5e93\u7684id":5,"\u4ece\u5feb\u7167\u521b\u5efaudisk\u514b\u9686":5,"\u4ece\u6307\u5b9a\u7684\u5feb\u7167\u6062\u590d":5,"\u4ece\u6307\u5b9auhost\u5b9e\u4f8b":5,"\u4ece\u8d77\u59cb\u65f6\u95f4\u5230\u7ed3\u675f\u65f6\u95f4\u5185\u7684\u6240\u4f7f\u7528\u7684cdn\u603b\u6d41\u91cf":5,"\u4eceudisk\u521b\u5efaudisk\u514b\u9686":5,"\u4ecevserver\u89e3\u7ed1ssl\u8bc1\u4e66":5,"\u4ecevserver\u91ca\u653e\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b":5,"\u4ed3\u5e93\u521b\u5efa\u65f6\u95f4":5,"\u4ed3\u5e93\u540d\u79f0":5,"\u4ed3\u5e93\u5907\u6ce8":5,"\u4ed3\u5e93\u66f4\u65b0\u65f6\u95f4":5,"\u4ed6\u7528":5,"\u4ed8\u8d39\u65b9\u5f0f":5,"\u4ed8\u8d39\u7684\u8d44\u6e90\u65e0\u9700\u6b64\u53c2\u6570":5,"\u4ee3\u8868\u4e86\u8d2d\u4e70\u81f3\u6708\u672b":5,"\u4ee3\u8868\u4f18\u5148\u9009\u62e9\u57fa\u7840\u7f51\u7edc":5,"\u4ee3\u8868\u610f\u4e49\u4e3a":5,"\u4ee3\u8868\u67e5\u8be2\u8be5tag":5,"\u4ee3\u8868\u8d2d\u4e70\u81f3\u6708\u672b":5,"\u4ee3\u8868\u8def\u5f84\u5237\u65b0":5,"\u4ee3\u8868\u9009\u62e9\u5b50\u7f51":5,"\u4ee3\u8868http\u68c0\u67e5\u57df\u540d":5,"\u4ee3\u8868http\u68c0\u67e5\u8def\u5f84":5,"\u4ee3\u91d1\u5238":5,"\u4ee3\u91d1\u5238id":5,"\u4ee3\u91d1\u52b5":5,"\u4ee5":5,"\u4ee5\u5730\u533aairport":5,"\u4ee5\u5b57\u8282\u4e3a\u5355\u4f4d":5,"\u4ee5\u5b57\u8282\u8ba1":5,"\u4ee5\u6b64\u7c7b\u63a8":5,"\u4ee5\u7a7a\u683c\u952e\u5206\u5272":5,"\u4ee5sigid":5,"\u4ee5tempalteparam":5,"\u4ee5templateid":5,"\u4ee5unix":5,"\u4ef2\u88c1\u8282\u70b9\u6309\u6700\u5c0f\u673a\u578b\u521b\u5efa":5,"\u4ef7\u683c":5,"\u4efb\u52a1\u5b8c\u6210\u65f6\u95f4":5,"\u4f01\u4e1a\u8425\u4e1a\u6267\u7167":5,"\u4f18\u5148\u7ea7":5,"\u4f18\u5148\u7ea7\u4f7f\u75280":5,"\u4f1a\u5458\u63a8\u5e7f\u7c7b":5,"\u4f1a\u5458\u63a8\u5e7f\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u4f1a\u5458\u7c7b\u578b":5,"\u4f1a\u8bdd\u4fdd\u6301\u548c\u9009\u62e9\u7684\u8c03\u5ea6\u7b97\u6cd5\u76f8\u5173":5,"\u4f1a\u8bdd\u4fdd\u6301\u7c7b\u578b":5,"\u4f1a\u8bdd\u4fdd\u6301\u7c7b\u578b\u4e3amanual\u65f6\u4e3a\u5fc5\u586b\u9879":5,"\u4f1a\u8bdd\u4fdd\u6301kei":5,"\u4f20\u4e86\u5219\u4e0d\u80fd\u4e3a\u7a7a":5,"\u4f20\u5b9e\u4f8bid\u83b7\u53d6\u5355\u4e2a\u5b9e\u4f8b\u4fe1\u606f":5,"\u4f4e":5,"\u4f5c":5,"\u4f7f\u7528\u4ee3\u91d1\u5238\u53ef\u51b2\u62b5\u90e8\u5206\u8d39\u7528":5,"\u4f7f\u7528\u7684\u4ee3\u91d1\u5238id":5,"\u4f7f\u7528\u7684\u5907\u4efd\u65b9\u5f0f":5,"\u4f7f\u7528\u7684\u5b89\u5168\u534f\u8bae":5,"\u4f7f\u7528\u7684\u7b7e\u540d":5,"\u4f7f\u7528\u91cf\u5355\u4f4dmb":5,"\u4f7f\u7528base64\u7f16\u7801":5,"\u4f7f\u7528describeudbparamgroup\u83b7\u5f97":5,"\u4f7f\u7528unix\u65f6\u95f4\u6233":5,"\u4f8b\u5982":5,"\u4f8b\u5982192":5,"\u4f8b\u5982remotevpngatewayid":5,"\u4f8b\u5982uhostid":5,"\u4f8b\u5982vpntunnelid":5,"\u4f9b\u5e94\u5546":5,"\u4fdd\u7559":5,"\u4fdd\u7559\u5c0f\u6570\u70b9\u540e\u4e24\u4f4d\u6709\u6548\u6570\u5b57":5,"\u4fe1\u606f":5,"\u4fee\u6539":5,"\u4fee\u6539\u4e3b\u5907redis\u540d\u79f0":5,"\u4fee\u6539\u5b89\u5168\u7ec4\u89c4\u5219":5,"\u4fee\u6539\u5e26\u5bbd\u503c":5,"\u4fee\u6539\u5f39\u6027ip\u7684\u5916\u7f51\u51fa\u53e3\u6743\u91cd":5,"\u4fee\u6539\u6302\u8f7d\u7684\u78c1\u76d8\u5927\u5c0f":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u4e1a\u52a1\u7ec4\u6807\u8bc6":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u540d\u79f0":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u5907\u6ce8\u4fe1\u606f":5,"\u4fee\u6539\u6307\u5b9auhost\u5b9e\u4f8b\u7684\u8d44\u6e90\u914d\u7f6e":5,"\u4fee\u6539\u65f6\u95f4":5,"\u4fee\u6539\u865a\u62df\u673a\u914d\u7f6e":5,"\u4fee\u6539\u8d1f\u8f7d\u5747\u8861\u7684\u670d\u52a1\u8282\u70b9":5,"\u4fee\u6539\u8d1f\u8f7d\u5747\u8861vserver":5,"\u4fee\u6539\u8d44\u6e90\u540d\u79f0\u548c\u5907\u6ce8":5,"\u4fee\u6539\u9879\u76ee":5,"\u4fee\u6539db\u5b9e\u4f8b\u7684\u7ba1\u7406\u5458\u5bc6\u7801":5,"\u4fee\u6539globalssh\u5907\u6ce8":5,"\u4fee\u6539globalssh\u7aef\u53e3":5,"\u4fee\u6539udb\u81ea\u52a8\u5907\u4efd\u7b56\u7565":5,"\u4fee\u6539umem\u5185\u5b58\u7a7a\u95f4\u540d\u79f0":5,"\u503c":5,"\u503c\u53ef\u4e3a\u7a7a":5,"\u504f\u79fb\u91cf":5,"\u5065\u5eb7\u68c0\u67e5\u5f02\u5e38":5,"\u5065\u5eb7\u68c0\u67e5\u65f6\u6821\u9a8c\u8bf7\u6c42\u7684":5,"\u5065\u5eb7\u68c0\u67e5\u72b6\u6001":5,"\u5065\u5eb7\u68c0\u67e5\u7684\u7c7b\u578b":5,"\u5065\u5eb7\u68c0\u67e5\u7684\u8def\u5f84":5,"\u5065\u5eb7\u68c0\u67e5\u7c7b\u578b":5,"\u5065\u5eb7\u68c0\u67e5\u7c7b\u578b\u4e3a":5,"\u5141\u8bb8\u4e00\u4e2a\u6216\u8005\u4e09\u4e2a":5,"\u5141\u8bb8\u503c\u7684\u683c\u5f0f\u7c7b\u578b":5,"\u5141\u8bb8\u591a\u70b9\u6302\u8f7d":5,"\u5141\u8bb8\u7684\u503c":5,"\u5143":5,"\u5145\u503c\u5355\u53f7":5,"\u5145\u503c\u65b9\u5f0f\u4e3a":5,"\u5145\u503c\u6765\u6e90":5,"\u5145\u503c\u91d1\u989d":5,"\u514b\u9686\u4e2d":5,"\u514b\u9686\u51fa\u7684\u786c\u76d8id":5,"\u514b\u9686\u7236disk\u7684id":5,"\u514b\u9686\u7236snapshot\u7684id":5,"\u514b\u9686\u786c\u76d8":5,"\u514d\u8d39\u5e26\u5bbd\u6a21\u5f0f":5,"\u5165":5,"\u5165\u5305\u91cf":5,"\u5165\u5e26\u5bbd":5,"\u5168\u90e8\u5f02\u5e38":5,"\u516c\u4f17\u53f7\u6216\u5c0f\u7a0b\u5e8f\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u516c\u4f17\u53f7\u6216\u5c0f\u7a0b\u5e8f\u7684\u7ba1\u7406\u754c\u9762\u622a\u56fe":5,"\u516c\u53f8\u540d\u79f0":5,"\u516c\u53f8\u5730\u5740":5,"\u516c\u53f8\u6216\u4f01\u4e1a\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u516c\u5f00\u4e3atrue":5,"\u516c\u94a5":5,"\u516d\u7684\u5907\u4efd\u914d\u7f6e\u5f00\u5173":5,"\u516d\u79cd":5,"\u516d\u79cd\u5bb9\u91cf\u89c4\u683c":5,"\u51717\u4f4d":5,"\u5171\u4eab\u5e26\u5bbd":5,"\u5171\u4eab\u5e26\u5bbd\u4fdd\u5e95\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u540d\u5b57":5,"\u5171\u4eab\u5e26\u5bbd\u540d\u79f0":5,"\u5171\u4eab\u5e26\u5bbd\u540e\u4ed8\u8d39\u5f00\u59cb\u8ba1\u8d39\u65f6\u95f4":5,"\u5171\u4eab\u5e26\u5bbd\u5cf0\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u5e26\u5bbd\u503c":5,"\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f":5,"\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f\u5fc5\u987b\u6307\u5b9a0m\u5e26\u5bbd":5,"\u5171\u4eab\u5e26\u5bbd\u7684\u8d44\u6e90\u540d\u79f0":5,"\u5171\u4eab\u5e26\u5bbd\u7684\u8d44\u6e90id":5,"\u5171\u4eab\u5e26\u5bbd\u7684id":5,"\u5171\u4eab\u5e26\u5bbd\u7c7b\u578b":5,"\u5171\u4eab\u5e26\u5bbd\u8d44\u6e90id":5,"\u5171\u4eab\u5e26\u5bbdid":5,"\u5173\u673a":5,"\u5173\u673a\u4e2d":5,"\u5173\u673a\u7684\u865a\u62df\u673a\u624d\u53ef\u4ee5\u91cd\u88c5\u7cfb\u7edf":5,"\u5173\u95ed":5,"\u5173\u95ed\u4e2d":5,"\u5173\u95ed\u4f1a\u8bdd\u4fdd\u6301":5,"\u5173\u95ed\u5171\u4eab\u5e26\u5bbd":5,"\u5173\u95ed\u5171\u4eab\u5e26\u5bbd\u540e":5,"\u5173\u95ed\u865a\u62df\u673a":5,"\u5173\u95edudb\u5b9e\u4f8b":5,"\u5176\u4e2d":5,"\u5176\u4e2d\u6709\u6548\u4ee3\u8868\u8282\u70b9\u670d\u52a1\u5065\u5eb7":5,"\u5176\u4e2dcongfigsrv\u5206\u4e3asccc\u548ccsrs\u4e24\u79cd\u6a21\u5f0f":5,"\u5176\u4e2dn\u4e3a\u5927\u4e8e1\u7684\u6574\u6570":5,"\u5176\u4ed6\u4e0d\u5220\u9664":5,"\u5176\u4ed6\u503c":5,"\u5176\u4ed6\u503c\u6216\u4e0d\u586b":5,"\u5176\u4ed6\u503c\u662f2\u7684\u500d\u6570":5,"\u5176\u4ed6\u5355\u4f4d\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u5176\u4ed6\u573a\u666f\u9700\u8981\u4e8b\u5148\u5173\u95ed\u5b9e\u4f8b":5,"\u5176\u4ed6\u5f39\u6027ip\u4e0d\u4f1a\u88ab\u4f7f\u7528":5,"\u5176\u4ed6\u6216\u8005\u4e0d\u586b":5,"\u5176\u4ed6\u6d77\u5916\u7ebf\u8def\u5747\u4e3a":5,"\u5176\u4f59\u4ece\u53f3\u5230\u5de6\u4f9d\u6b21\u4e3a\u661f\u671f\u4e00\u5230\u661f\u671f":5,"\u5176\u4f59\u4ece\u53f3\u5230\u5de6\u4f9d\u6b21\u4e3a\u661f\u671f\u4e00\u5230\u661f\u671f\u516d\u7684\u5907\u4efd\u914d\u7f6e\u5f00\u5173":5,"\u5176\u4f59\u60c5\u51b5":5,"\u5176\u53d6\u503c\u5982\u4e0b":5,"\u5177\u4f53\u673a\u578b\u4e0ecpu\u7684\u5bf9\u5e94\u5173\u7cfb\u53c2\u7167\u63a7\u5236\u53f0":5,"\u5177\u4f53\u8bf7\u67e5\u8be2\u63a7\u5236\u53f0":5,"\u517c\u5bb9\u8001\u7248\u672c":5,"\u5185\u5b58\u5927\u5c0f":5,"\u5185\u5b58\u5927\u5c0f\u5173\u7cfb":5,"\u5185\u5b58\u5b58\u50a8":5,"\u5185\u5b58\u5bb9\u91cf":5,"\u5185\u5b58\u5bb9\u91cf\u5927\u5c0f":5,"\u5185\u5b58\u7a7a\u95f4\u540d\u79f0":5,"\u5185\u5b58\u7a7a\u95f4id":5,"\u5185\u5b58\u9650\u5236":5,"\u5185\u5bb9\u7c7b\u578b":5,"\u5185\u5bb9\u8f6c\u53d1\u4f18\u5148\u7ea7":5,"\u5185\u5bb9\u8f6c\u53d1\u5339\u914d\u5b57\u6bb5":5,"\u5185\u5bb9\u8f6c\u53d1\u5339\u914d\u5b57\u6bb5\u7684\u7c7b\u578b":5,"\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u5e94\u7528\u7684\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b\u7684id":5,"\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u7ec4id":5,"\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565id":5,"\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u5173\u8054\u7684\u8bf7\u6c42\u57df\u540d":5,"\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u5173\u8054\u7684\u8bf7\u6c42\u8bbf\u95ee\u8def\u5f84":5,"\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u5e94\u7528\u7684\u670d\u52a1\u8282\u70b9\u7684":5,"\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219id":5,"\u5185\u5bb9\u8f6c\u53d1id":5,"\u5185\u7f51":5,"\u5185\u7f51\u5b89\u5168\u7ec4":5,"\u5185\u7f51\u8d1f\u8f7d\u5747\u8861":5,"\u5185\u7f51ip":5,"\u5185\u7f51ip\u4e0d\u663e\u793a\u5e26\u5bbd\u4fe1\u606f":5,"\u5185\u7f51ip\u65e0\u5bf9\u5e94\u7684\u8d44\u6e90id":5,"\u5185\u7f51ip\u65e0\u8d44\u6e90id":5,"\u5185\u7f51ulb":5,"\u5185\u7f51vip":5,"\u5185\u7f51vip\u5730\u5740\u5217\u8868":5,"\u5185\u7f51vip\u7684id":5,"\u5185\u90e8\u53c2\u6570":5,"\u5185\u90e8\u5b57\u6bb5":5,"\u5185\u90e8\u6d4b\u8bd5":5,"\u5185\u90e8\u8bb0\u8f7d":5,"\u51bb\u7ed3":5,"\u51fa":5,"\u51fa\u5305\u91cf":5,"\u51fa\u5e26\u5bbd":5,"\u51fa\u5e26\u5bbd\u4f7f\u7528\u7387":5,"\u5206":5,"\u5206\u522b\u8868\u793a\u5355\u5411\u8ba4\u8bc1\u548c\u53cc\u5411\u8ba4\u8bc1":5,"\u5206\u522b\u8868\u793a\u670d\u52a1\u5668\u8bc1\u4e66\u548cca\u8bc1\u4e66":5,"\u5206\u5272\u5b57\u6bb5":5,"\u5206\u7247\u96c6\u7fa4":5,"\u5206\u914d\u4e00\u6761":5,"\u5206\u914d\u4e2d":5,"\u5206\u949f":5,"\u5206\u9694":5,"\u5206\u9875\u663e\u793a\u6570\u91cf":5,"\u5206\u9875\u663e\u793a\u7684\u6761\u76ee\u6570":5,"\u5206\u9875\u663e\u793a\u7684\u8d77\u59cb\u504f\u79fb":5,"\u5206\u9875\u663e\u793a\u8d77\u59cb\u504f\u79fb\u4f4d\u7f6e":5,"\u5207\u6362\u540e\u9ad8\u53ef\u7528db\u5b9e\u4f8b\u7684id":5,"\u5207\u6362\u65f6\u4f1a\u6d89\u53ca\u4ed8\u8d39":5,"\u5207\u6362\u8d26\u53f7\u8ba1\u8d39\u65b9\u5f0f":5,"\u5217\u5982":5,"\u5217\u8868\u64cd\u4f5c\u5219\u6307\u5b9a":5,"\u5217\u8868\u64cd\u4f5c\u65f6\u5fc5\u586b":5,"\u5217\u8868\u64cd\u4f5c\u65f6\u624d\u4f1a\u6709\u8be5\u53c2\u6570":5,"\u5217\u8868\u8d77\u59cb\u4f4d\u7f6e\u504f\u79fb\u91cf":5,"\u5217\u8868\u957f\u5ea6":5,"\u5217\u8868udb\u5b9e\u4f8b\u5907\u4efd\u4fe1\u606f":5,"\u5217\u8868udb\u5b9e\u4f8bbinlog\u6216slowlog\u6216errorlog\u5907\u4efd\u4fe1\u606f":5,"\u5219\u4e00\u6b21\u6027\u83b7\u53d6\u4e09\u79cd\u8ba1\u8d39":5,"\u5219\u4e0d\u4f20\u5165\u8be5\u53c2\u6570":5,"\u5219\u4e0d\u5141\u8bb8\u53d1\u9001":5,"\u5219\u4e3adataark":5,"\u5219\u53ea\u6709master":5,"\u5219\u53ea\u83b7\u53d6\u8be5db\u7684\u5907\u4efd\u4fe1\u606f":5,"\u5219\u53ef\u9009\u662f\u5426\u9009\u53d6\u7279\u5b9adb\u7c7b\u578b\u7684\u914d\u7f6e":5,"\u5219\u5fc5\u586b":5,"\u5219\u5fc5\u9009":5,"\u5219\u5fc5\u987b\u586b\u5199":5,"\u5219\u5fc5\u987b\u8d4b\u503c":5,"\u5219\u65e0\u6cd5\u53d1\u9001":5,"\u5219\u662f\u8be5db\u5907\u4efd\u603b\u6570":5,"\u5219\u67e5\u8be2\u8be5\u7528\u6237\u5728\u673a\u623f\u6240\u6709\u7684\u4e13\u7ebf\u4fe1\u606f":5,"\u5219\u6b64\u5b57\u6bb5\u4f20\u5165\u7528\u6237\u81ea\u5b9a\u4e49\u4f1a\u8bdd\u4fdd\u6301string":5,"\u5219\u7ed1\u5b9a\u544a\u8b66\u6a21\u677f":5,"\u5219\u83b7\u53d6\u6240\u6709":5,"\u5219\u8868\u660e\u4ece\u5907\u4efd\u6062\u590d\u5b9e\u4f8b":5,"\u5219\u8868\u793a\u4efb\u4f55\u5b9e\u4f8b\u7c7b\u578b\u5747\u53ef":5,"\u5219\u8868\u793a\u4efb\u4f55\u78c1\u76d8\u7c7b\u578b\u5747\u53ef":5,"\u5219\u8bf7\u8054\u7cfb\u6280\u672f\u652f\u6301\u786e\u8ba4\u539f\u56e0":5,"\u5219\u8fd4\u56de\u5f53\u524d":5,"\u5219\u8fd4\u56de\u5f53\u524dregion":5,"\u5219\u8fd4\u56de\u5f53\u524dregion\u4e2d\u6240\u6709\u5ba2\u6237vpn\u7f51\u5173\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u5219\u8fd4\u56de\u5f53\u524dregion\u4e2d\u6240\u6709\u7684vpn\u96a7\u9053\u5b9e\u4f8b":5,"\u5219\u8fd4\u56de\u5f53\u524dregion\u6240\u6709phost":5,"\u5219\u8fd4\u56de\u7f3a\u5c11\u53c2":5,"\u5219\u8fdb\u5165\u56de\u6536\u7ad9":5,"\u5219\u968f\u673a\u5206\u914d\u5f53\u524d\u5b50\u7f51\u4e0b\u7684ip":5,"\u5219\u9700\u8981\u6307\u5b9a":5,"\u5219\u9ed8\u8ba420":5,"\u5219\u9ed8\u8ba4\u4e3a\u56fd\u5185\u624b\u673a\u53f7":5,"\u5219value\u662f1\u5c0f\u65f6\u7684\u5e26\u5bbd\u5cf0\u503c":5,"\u5219value\u662f\u4e00\u5929\u5185\u7684\u5e26\u5bbd\u5cf0\u503c":5,"\u5219value\u662f\u4e94\u5206\u949f\u7c92\u5ea6\u7684\u5e26\u5bbd\u503c":5,"\u521b\u5efa\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219":5,"\u521b\u5efa\u4e2d":5,"\u521b\u5efa\u4e3b\u5907redi":5,"\u521b\u5efa\u4e3b\u673a\u7684\u6700\u521d\u6765\u6e90\u955c\u50cf\u7684\u64cd\u4f5c\u7cfb\u7edf\u540d\u79f0":5,"\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\u6307\u5b9a\u5185\u7f51ip":5,"\u521b\u5efa\u4e91\u4e3b\u673a\u65f6\u6307\u5b9amac":5,"\u521b\u5efa\u4ece\u8282\u70b9\u7684dbid":5,"\u521b\u5efa\u5185\u5b58\u7a7a\u95f4id\u5217\u8868":5,"\u521b\u5efa\u5185\u7f51ulb\u65f6\u6307\u5b9a\u5185\u7f51ip":5,"\u521b\u5efa\u52a0\u901f\u57df\u540d\u65f6\u751f\u6210":5,"\u521b\u5efa\u52a0\u901f\u57df\u540d\u751f\u6210\u7684cdn\u57df\u540d":5,"\u521b\u5efa\u5355\u673amemcach":5,"\u521b\u5efa\u53ea\u8bfbslave\u65f6":5,"\u521b\u5efa\u57df\u540d\u65f6\u751f\u6210\u7684\u8d44\u6e90id":5,"\u521b\u5efa\u57df\u540d\u65f6\u751f\u6210\u7684id":5,"\u521b\u5efa\u5916\u7f51lb\u65f6\u4e3a\u5fc5\u9700":5,"\u521b\u5efa\u5916\u7f51ulb\u8be5\u5b57\u6bb5\u4f1a\u5ffd\u7565":5,"\u521b\u5efa\u5931\u8d25":5,"\u521b\u5efa\u5b50\u7f51":5,"\u521b\u5efa\u5b89\u5168\u7ec4":5,"\u521b\u5efa\u5b89\u5168\u7ec4\u89c4\u5219":5,"\u521b\u5efa\u6587\u4ef6\u7cfb\u7edf":5,"\u521b\u5efa\u65f6\u95f4":5,"\u521b\u5efa\u65f6\u95f4\u6233":5,"\u521b\u5efa\u7269\u7406":5,"\u521b\u5efa\u7684\u52a0\u901f\u57df\u540d\u7684\u5f53\u524d\u7684\u72b6\u6001":5,"\u521b\u5efa\u7684\u5b89\u5168\u7ec4\u89c4\u5219id":5,"\u521b\u5efa\u7684\u5b89\u5168\u7ec4id":5,"\u521b\u5efa\u7684\u5de5\u4f5c\u6d41\u7248\u672c\u53f7":5,"\u521b\u5efa\u7684\u5feb\u7167id":5,"\u521b\u5efa\u7684\u78c1\u76d8id":5,"\u521b\u5efa\u7684\u7ec4id":5,"\u521b\u5efa\u7684\u81ea\u5236\u955c\u50cfid":5,"\u521b\u5efa\u7684ulb\u662f\u5426\u4e3a\u5185\u7f51\u6a21\u5f0f":5,"\u521b\u5efa\u7684ulb\u662f\u5426\u4e3a\u5916\u7f51\u6a21\u5f0f":5,"\u521b\u5efa\u7684vpcid":5,"\u521b\u5efa\u786c\u76d8":5,"\u521b\u5efa\u786c\u76d8\u5feb\u7167":5,"\u521b\u5efa\u81ea\u5236\u955c\u50cf":5,"\u521b\u5efa\u865a\u62df\u673a":5,"\u521b\u5efa\u8bc1\u4e66":5,"\u521b\u5efa\u8d1f\u8f7d\u5747\u8861":5,"\u521b\u5efa\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b":5,"\u521b\u5efa\u8d1f\u8f7d\u5747\u8861vserver":5,"\u521b\u5efa\u8def\u7531\u8868":5,"\u521b\u5efa\u955c\u50cf\u4ed3\u5e93":5,"\u521b\u5efa\u9632\u706b\u5899":5,"\u521b\u5efa\u9879\u76ee":5,"\u521b\u5efadb":5,"\u521b\u5efaglobalssh\u5b9e\u4f8b":5,"\u521b\u5efamongodb\u7684\u526f\u672c\u8282\u70b9":5,"\u521b\u5efamongos\u5b9e\u4f8b":5,"\u521b\u5efanat\u7f51\u5173":5,"\u521b\u5efaslave\u7684dbid":5,"\u521b\u5efasnapshot\u5feb\u7167":5,"\u521b\u5efassl\u8bc1\u4e66":5,"\u521b\u5efasubnet\u7684id":5,"\u521b\u5efaudb\u5b9e\u4f8b":5,"\u521b\u5efaudb\u5b9e\u4f8b\u7684slav":5,"\u521b\u5efaudisk":5,"\u521b\u5efaudisk\u78c1\u76d8":5,"\u521b\u5efauhost\u5b9e\u4f8b":5,"\u521b\u5efaumem\u5185\u5b58\u7a7a\u95f4":5,"\u521b\u5efavpc":5,"\u521b\u5efavserver\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565":5,"\u521b\u5efavserver\u5b9e\u4f8b":5,"\u521d\u59cb\u5316":5,"\u521d\u59cb\u5316\u4e2d":5,"\u521d\u59cb\u5316\u5bc6\u7801":5,"\u5220":5,"\u5220\u9664":5,"\u5220\u9664\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219":5,"\u5220\u9664\u4e2d":5,"\u5220\u9664\u4e3b\u5907redi":5,"\u5220\u9664\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565":5,"\u5220\u9664\u5355\u673amemcach":5,"\u5220\u9664\u5916\u7f51ip":5,"\u5220\u9664\u5931\u8d25":5,"\u5220\u9664\u5b50\u7f51":5,"\u5220\u9664\u5b89\u5168\u7ec4":5,"\u5220\u9664\u5b89\u5168\u7ec4\u89c4\u5219":5,"\u5220\u9664\u5f39\u6027ip\u4e0a\u5df2\u9644\u52a0\u5e26\u5bbd\u5305":5,"\u5220\u9664\u5feb\u7167":5,"\u5220\u9664\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u7684uhost\u5b9e\u4f8b":5,"\u5220\u9664\u65f6\u95f4":5,"\u5220\u9664\u65f6\u95f4\u70b9":5,"\u5220\u9664\u7269\u7406\u4e91\u4e3b\u673a":5,"\u5220\u9664\u7269\u7406ip":5,"\u5220\u9664\u7528\u6237\u81ea\u5b9a\u4e49\u955c\u50cf":5,"\u5220\u9664\u786c\u76d8":5,"\u5220\u9664\u81ea\u5236\u955c\u50cf":5,"\u5220\u9664\u81ea\u5b9a\u4e49\u8def\u7531\u8868":5,"\u5220\u9664\u865a\u62df\u673a":5,"\u5220\u9664\u8bc1\u4e66":5,"\u5220\u9664\u8be5\u76d8\u6240\u521b\u5efa\u51fa\u6765\u7684\u6240\u6709\u5feb\u7167":5,"\u5220\u9664\u8d1f\u8f7d\u5747\u8861":5,"\u5220\u9664\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b":5,"\u5220\u9664\u914d\u7f6e\u53c2\u6570\u7ec4":5,"\u5220\u9664\u955c\u50cf":5,"\u5220\u9664\u955c\u50cf\u4ed3\u5e93":5,"\u5220\u9664\u9632\u706b\u5899":5,"\u5220\u9664\u9879\u76ee":5,"\u5220\u9664globalssh\u5b9e\u4f8b":5,"\u5220\u9664nat\u7f51\u5173":5,"\u5220\u9664nat\u7f51\u5173\u767d\u540d\u5355":5,"\u5220\u9664snapshot":5,"\u5220\u9664ssl\u8bc1\u4e66":5,"\u5220\u9664udb\u5b9e\u4f8b":5,"\u5220\u9664udb\u5b9e\u4f8b\u5907\u4efd":5,"\u5220\u9664udb\u65e5\u5fd7\u5305":5,"\u5220\u9664udisk":5,"\u5220\u9664ufs\u6587\u4ef6\u7cfb\u7edf":5,"\u5220\u9664ulb\u65f6\u662f\u5426\u91ca\u653e\u7ed1\u5b9a\u7684eip":5,"\u5220\u9664umem\u5185\u5b58\u7a7a\u95f4":5,"\u5220\u9664vpc":5,"\u5220\u9664vpc\u4e92\u901a\u5173\u7cfb":5,"\u5220\u9664vserver":5,"\u5220\u9664vserver\u5b9e\u4f8b":5,"\u522b\u4e3apvft_unkown":5,"\u522b\u540d":5,"\u5230\u671f\u65f6\u95f4":5,"\u5236\u4f5c\u4e2d":5,"\u5236\u4f5c\u5931\u8d25":5,"\u5236\u4f5c\u6210\u529f":5,"\u5237\u65b0\u4efb\u52a1\u4f1a\u8fd4\u56detype":5,"\u5237\u65b0\u4efb\u52a1\u521b\u5efa\u7684\u65f6\u95f4":5,"\u5237\u65b0\u4efb\u52a1\u7684\u5f53\u524d\u72b6\u6001":5,"\u5237\u65b0\u4efb\u52a1\u7684\u603b\u6570":5,"\u5237\u65b0\u591a\u4e2aurl\u5217\u8868\u65f6":5,"\u5237\u65b0\u7684\u5355\u6761url":5,"\u5237\u65b0\u7c7b\u578b":5,"\u5237\u65b0\u7f13\u5b58":5,"\u5237\u65b0\u8fdb\u5ea6":5,"\u524d\u65f6\u95f4\u70b9\u524d\u4e00\u5929":5,"\u524d\u7aef\u6682\u65f6\u53ea\u5f00\u653e\u5185\u5b58\u5b9a\u5236":5,"\u526f\u672c\u96c6\u6570\u91cf":5,"\u529f\u80fd\u4ec5\u90e8\u5206\u53ef\u7528\u533a\u5f00\u653e":5,"\u52a0\u5bc6":5,"\u52a0\u5bc6\u76d8":5,"\u52a0\u5bc6\u76d8\u5bc6\u7801":5,"\u52a0\u5bc6\u76d8\u7684\u5bc6\u7801":5,"\u52a0\u5bc6\u76d8\u9700\u8981\u6743\u9650\u4f4d":5,"\u52a0\u5bc6\u8bc1\u4e66\u7684\u79c1\u94a5":5,"\u52a0\u5bc6\u9700\u8981\u7684cmk":5,"\u52a0\u6743\u8f6e\u8bad":5,"\u52a0\u6743\u8f6e\u8be2":5,"\u52a0\u901f\u57df\u540d":5,"\u52a0\u901f\u57df\u540d\u7684\u4e1a\u52a1\u7c7b\u578b":5,"\u52a0\u901f\u7c7b\u578bhttp":5,"\u52a8\u4f5c":5,"\u52a8\u4f5c\u6807\u5fd7\u4e3aadd":5,"\u5305\u542b\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8":5,"\u5305\u62ec":5,"\u5305\u62ec2":5,"\u5305\u62ec\u4ef2\u88c1":5,"\u5305\u62ec\u5185\u5b58\u548c\u78c1\u76d8\u7684\u914d\u7f6e":5,"\u5305\u62ec\u521b\u5efamysql":5,"\u5305\u62ec\u6240\u6709gpu\u673a\u578b":5,"\u5305\u62ec\u6bcf\u4e2a\u5355\u53ef\u7528\u533a\u548c\u8de8\u53ef\u7528\u533a":5,"\u5305\u62ec\u7528\u6237\u8bc1\u4e66":5,"\u5305\u62ec\u8def\u7531\u7b56\u7565":5,"\u5305\u62ec\u8f6c\u53d1\u89c4\u5219\u540e\u7684\u670d\u52a1\u8282\u70b9":5,"\u5305\u62ec\u9ed8\u8ba4\u955c\u50cf\u548c\u81ea\u5236\u955c\u50cf":5,"\u5317\u4eac":5,"\u5317\u4eac\u4e00\u4e0d\u652f\u6301":5,"\u5317\u4eac\u4e00\u5730\u57df\u65e0\u6548":5,"\u5317\u4eac\u4e8c":5,"\u533a\u57df\u822a\u7a7a\u6e2f\u56fd\u9645\u901a\u7528\u4ee3\u7801":5,"\u5343\u5146":5,"\u5347\u7ea7\u4e2d":5,"\u5347\u7ea7\u540e\u7684\u4ef7\u683c":5,"\u5347\u7ea7\u548c\u964d\u7ea7":5,"\u5347\u7ea7\u76ee\u6807udisk":5,"\u5347\u7ea7\u786c\u76d8":5,"\u5347\u964d\u7ea7\u540e\u662f\u5426\u542f\u52a8db":5,"\u5347\u964d\u7ea7\u8d44\u6e90\u7684\u4ef7\u683c":5,"\u534e\u76db\u987f":5,"\u534f\u8bae":5,"\u534f\u8bae\u4e3a":5,"\u534f\u8bae\u7c7b\u578b":5,"\u534f\u8bae\u7c7b\u578b\u4e3a":5,"\u5355\u4f4d":5,"\u5355\u4f4d\u4e3a":5,"\u5355\u4f4d\u4e3a\u5206":5,"\u5355\u4f4d\u4e3a\u79d2":5,"\u5355\u4f4d\u4e3agb":5,"\u5355\u4f4d\u4e3amb":5,"\u5355\u4f4d\u4e3ambp":5,"\u5355\u4f4d\u5c0f\u65f6":5,"\u5355\u4f4d\u5c0f\u65f6\u8ba1":5,"\u5355\u4f4dgb":5,"\u5355\u4f4dmb":5,"\u5355\u4f4dmbp":5,"\u5355\u70b9":5,"\u5355\u76d8\u5927\u5c0f":5,"\u5355\u9875\u8fd4\u56de\u6570\u636e\u957f\u5ea6":5,"\u5360\u75284\u4e2a\u5b57\u957f":5,"\u5361\u6838\u5fc3\u7684\u5360\u7528\u4e2a\u6570":5,"\u5373\u4ee3\u8868\u4ec5\u5339\u914d\u8def\u5f84":5,"\u5373\u5c06\u5e9f\u5f03":5,"\u5373\u5c06\u652f\u6301":5,"\u5373\u8be5\u5e26\u5bbd\u5305\u5728enabletime\u5230":5,"\u5373\u8fd4\u56delocaldisk":5,"\u5378\u8f7d\u4e2d":5,"\u5378\u8f7d\u67d0\u4e2a\u5df2\u7ecf\u6302\u8f7d\u5728\u6307\u5b9auhost\u5b9e\u4f8b\u4e0a\u7684udisk":5,"\u5378\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u5378\u8f7d\u7684uhost\u5b9e\u4f8bid":5,"\u539f\u4ef7":5,"\u539f\u5730\u5740":5,"\u539fdb\u72b6\u6001\u4e3awaitforswitch\u65f6":5,"\u53c2\u6570":5,"\u53c2\u6570\u4e3aother":5,"\u53c2\u6570\u503c":5,"\u53c2\u6570\u503c\u5e94\u7528\u7c7b\u578b":5,"\u53c2\u6570\u540d\u79f0":5,"\u53c2\u6570\u7c7b\u578b":5,"\u53c2\u6570\u7ec4\u540d\u79f0":5,"\u53c2\u6570\u7ec4\u603b\u6570":5,"\u53c2\u6570\u7ec4\u63cf\u8ff0":5,"\u53c2\u6570\u7ec4\u662f\u5426\u53ef\u4fee\u6539":5,"\u53c2\u6570\u7ec4id":5,"\u53c2\u8003":5,"\u53c2\u8003\u955c\u50cf\u5217\u8868":5,"\u53c2\u89c1":5,"\u53c2\u89c1describephostmachinetype\u8fd4\u56de\u503c":5,"\u53c2\u89c1describesubnet":5,"\u53ca\u65b0\u7684\u5b9e\u4f8b\u540d\u79f0":5,"\u53cc\u7ebf":5,"\u53cc\u7ebfip":5,"\u53d1\u751f\u9519\u8bef\u65f6":5,"\u53d1\u751f\u9519\u8bef\u65f6\u8868\u793a\u9519\u8bef\u63cf\u8ff0":5,"\u53d1\u9001\u77ed\u4fe1\u606f":5,"\u53d1\u9001\u77ed\u4fe1\u65f6\u8fd4\u56de\u7684sessionno":5,"\u53d1\u9001\u77ed\u4fe1\u65f6\u8fd4\u56de\u7684sessionno\u96c6\u5408":5,"\u53d6\u503c\u4e3a0\u62161":5,"\u53d6\u503c\u4e3a0\u65f6":5,"\u53d6\u503c\u4e3a100\u65f6":5,"\u53d6\u503c\u4e3a1024\u7684\u500d\u6570":5,"\u53d6\u503c\u8303\u56f4":5,"\u53d6\u503c\u8303\u56f43306\u81f365535":5,"\u53d6\u503c\u8303\u56f4\u4e3a":5,"\u53d6\u503c\u8303\u56f4\u4e3a\u5927\u4e8e0\u7684\u6574\u6570":5,"\u53d6\u503c\u8303\u56f4\u4e3a\u5927\u4e8e\u7b49\u4e8e2\u4e14\u5c0f\u4e8e\u7b49\u4e8e1000":5,"\u53d6\u503c\u8303\u56f4\u662f":5,"\u53d6\u503c\u8303\u56f4\u9700\u5927\u4e8e\u5f53\u524d\u78c1\u76d8\u5927\u5c0f":5,"\u53d6uredis\u4ef7\u683c\u4fe1\u606f":5,"\u53ea\u5728\u62a5\u6587\u8f6c\u53d1\u4e2d\u4f7f\u7528":5,"\u53ea\u652f\u6301\u56fd\u5185":5,"\u53ea\u652f\u6301\u666e\u901a\u7248db\u4e0d\u652f\u6301\u9ad8\u53ef\u7528":5,"\u53ea\u6709\u5728\u53cc\u5411\u8ba4\u8bc1\u7684\u65f6\u5019\u624d\u9700\u8981ca\u8bc1\u4e66":5,"\u53ea\u6709\u903b\u8f91\u5907\u4efd\u4e0b\u5907\u4efd\u9ed1\u540d\u5355\u624d\u751f\u6548":5,"\u53ea\u80fd\u5305\u542b\u82f1\u6587":5,"\u53ea\u80fd\u586btrue\u6216fals":5,"\u53ea\u8981\u6709\u4e00\u5757\u78c1\u76d8\u4e3a\u672c\u5730\u76d8":5,"\u53ea\u9488\u5bf9mysql5":5,"\u53ef\u4ee5\u4e3ature":5,"\u53ef\u4ee5\u4ecedescribeudblogpackage\u7ed3\u679c\u5f53\u4e2d\u83b7\u5f97":5,"\u53ef\u4ee5\u628a\u6574\u4e2a":5,"\u53ef\u4ee5\u83b7\u53d6\u591a\u4e2a\u7c7b\u578b\u7684\u65e5\u5fd7\u8bb0\u5f55":5,"\u53ef\u4ee5\u9009\u62e9\u5185\u7f51\u6216\u8005\u5916\u7f51":5,"\u53ef\u5305\u542b\u4e2d\u6587":5,"\u53ef\u53c2\u8003\u83b7\u53d6\u4e3b\u673a\u673a\u578b\u63a5\u53e3":5,"\u53ef\u6839\u636e\u8be5\u503c\u67e5\u8be2\u672c\u6b21\u53d1\u9001\u7684\u77ed\u4fe1\u5217\u8868":5,"\u53ef\u7528":5,"\u53ef\u7528\u4e8e":5,"\u53ef\u7528\u533a":5,"\u53ef\u7528\u533a\u4e2d\u786c\u4ef6\u9694\u79bb\u7ec4\u4e2d\u4e91\u4e3b\u673a\u7684\u6570\u91cf":5,"\u53ef\u7528\u533a\u4fe1\u606f":5,"\u53ef\u7528\u533a\u5217\u8868":5,"\u53ef\u7528\u533a\u540d\u5b57":5,"\u53ef\u7528\u533a\u540d\u79f0":5,"\u53ef\u7528\u533a\u57df":5,"\u53ef\u7528ip\u6570\u91cf":5,"\u53ef\u7f6e\u4e3atrue":5,"\u53ef\u80fd\u5bfc\u81f4\u4e22\u5931\u6570\u636e\u751a\u81f3\u635f\u574f\u64cd\u4f5c\u7cfb\u7edf":5,"\u53ef\u81ea\u5b9a\u4e49dn":5,"\u53ef\u8868\u8ff0\u4e3a\u5982":5,"\u53ef\u8bbe\u4e3a\u4ee5\u4e0b\u51e0\u4e2a\u503c":5,"\u53ef\u8f93\u5165\u5982":5,"\u53ef\u9009":5,"\u53ef\u9009\u503c\u4e3a":5,"\u53ef\u9009\u503c\u4e3aconfigsrv":5,"\u53ef\u9009\u503c\u5982\u4e0b":5,"\u53ef\u9009\u5343\u5146":5,"\u53ef\u9009\u53c2\u6570":5,"\u53ef\u9009\u8303\u56f4\u4e0emachinetyp":5,"\u53ef\u9009\u8303\u56f4\u53c2\u7167\u597d\u63a7\u5236\u53f0":5,"\u53ef\u9009\u8303\u56f4\u53c2\u7167\u63a7\u5236\u53f0":5,"\u53ef\u9009\u8303\u56f4\u53c2\u8003\u63a7\u5236\u53f0":5,"\u53ef\u9009\u914d\u7f6e\u8303\u56f4\u8bf7\u53c2\u8003":5,"\u53ef\u9009raid":5,"\u53ef\u9009raw":5,"\u53ef\u901a\u8fc7":5,"\u53ef\u901a\u8fc7describeisolationgroup\u83b7\u53d6":5,"\u53ef\u901a\u8fc7describeudbbackup\u83b7\u5f97":5,"\u53ef\u901a\u8fc7describeudbinstancebinlog\u83b7\u5f97":5,"\u53ef\u901a\u8fc7describeudblogpackage\u83b7\u5f97":5,"\u53ef\u901a\u8fc7describeudbparamgroup\u83b7\u53d6":5,"\u5404\u503c":5,"\u5404\u503c\u4ee3\u8868":5,"\u5404\u5730\u57df\u5141\u8bb8\u7684\u7ebf\u8def\u53c2\u6570\u5982\u4e0b":5,"\u5404\u5730\u57df\u5e26\u5bbd\u8303\u56f4\u5982\u4e0b":5,"\u5404\u5730\u57df\u7684\u5e26\u5bbd\u503c\u8303\u56f4\u5982\u4e0b":5,"\u5404\u5730\u57df\u975e\u5171\u4eab\u5e26\u5bbd\u7684\u5e26\u5bbd\u8303\u56f4\u5982\u4e0b":5,"\u5404eip\u6062\u590d\u4e3a\u7684\u5e26\u5bbd\u503c":5,"\u540c\u4e3b\u673a\u4e0b\u53ea\u4f1a\u4f7f\u7528\u8fd9\u4e2a\u5f39\u6027ip":5,"\u540c\u65f6\u4f20snapshotid\u4f18\u5148":5,"\u540c\u65f6\u5185\u5b58\u4e0ecpu\u89c4\u683c\u5339\u914d":5,"\u540c\u65f6\u8bbe\u5b9a\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8":5,"\u540c\u65f6\u8bbe\u5b9a\u7cfb\u7edf\u76d8\u548c\u6570\u636e\u76d8\u7684\u78c1\u76d8\u7c7b\u578b":5,"\u540d\u5b57":5,"\u540d\u79f0":5,"\u540d\u79f0\u53ea\u80fd\u5305\u542b\u4e2d\u82f1\u6587":5,"\u540e\u4ed8\u8d39":5,"\u540e\u7aef\u5b9e\u4f8b\u72b6\u6001\u5f00\u5173":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u5185\u7f51ip":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u5b9e\u4f8b\u542f\u7528\u4e0e\u5426":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u5b9e\u4f8b\u8fd0\u884c\u72b6\u6001":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u7aef\u53e3":5,"\u540e\u7aef\u63d0\u4f9b\u670d\u52a1\u7684\u8d44\u6e90\u6240\u5728\u7684\u5b50\u7f51\u7684id":5,"\u540e\u7aef\u8d44\u6e90\u5185\u7f51ip":5,"\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b\u7684id":5,"\u540e\u7aef\u8d44\u6e90\u670d\u52a1\u7aef\u53e3":5,"\u540e\u7aef\u8d44\u6e90\u7684\u5185\u7f51ip":5,"\u540e\u7aef\u8d44\u6e90\u7684\u5b9e\u4f8b\u540d\u79f0":5,"\u540e\u7aef\u8d44\u6e90\u7684\u5bf9\u8c61id":5,"\u540e\u9762\u4e3a\u7535\u8bdd\u53f7\u7801":5,"\u5426":5,"\u5426\u5219":5,"\u5426\u5219\u4e3a\u5217\u8868\u64cd":5,"\u5426\u5219\u4e3a\u5217\u8868\u64cd\u4f5c":5,"\u5426\u5219\u4f1a\u62a5\u9519":5,"\u5426\u5219\u4f7f\u7528\u5355\u70b9\u8ba1\u8d39\u7b56\u7565\u7684\u503c":5,"\u5426\u5219\u662f\u5217\u8868\u64cd\u4f5c":5,"\u5426\u5219\u67e5\u5168\u90e8tag":5,"\u5426\u5219\u9ed8\u8ba4\u5168\u90e8":5,"\u542b\u57df\u540d":5,"\u542f\u52a8\u4e2d":5,"\u542f\u52a8\u5904\u4e8e\u5173\u95ed\u72b6\u6001\u7684uhost\u5b9e\u4f8b":5,"\u542f\u52a8\u7269\u7406\u673a":5,"\u542f\u52a8udb\u5b9e\u4f8b":5,"\u542f\u7528":5,"\u542f\u7528\u8d1f\u8f7d\u5747\u8861\u7684\u5355\u4e2a\u670d\u52a1\u8282\u70b9":5,"\u544a\u8b66\u6a21\u677fid":5,"\u544a\u8b66\u89c4\u5219id":5,"\u544a\u8b66\u9608\u503c":5,"\u548c_":5,"\u548cdrop":5,"\u5546\u6807\u540d\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u5546\u6807\u6ce8\u518c\u8bc1\u4e66":5,"\u56db\u5c42lb\u4f7f\u7528":5,"\u56db\u79cd\u534f\u8bae\u8f6c\u53d1":5,"\u56de\u6267\u7ed3\u679c":5,"\u56de\u6267\u7ed3\u679c\u63cf\u8ff0":5,"\u56de\u6267\u8fd4\u56de\u65f6\u95f4":5,"\u56de\u6e90\u7aef\u53e3":5,"\u56de\u6e90http\u8bf7\u6c42\u5934\u90e8host":5,"\u56de\u6eda\u65f6\u786c\u76d8\u5fc5\u987b\u5904\u4e8e\u672a\u7ed1\u5b9a\u6216\u5176\u6302\u8f7d\u7684\u4e3b\u673a\u4e3a\u5173\u673a\u72b6\u6001":5,"\u56den\u9000\u8ba2":5,"\u56det\u9000\u8ba2":5,"\u56detd\u9000\u8ba2":5,"\u56e0\u4e3a\u8981\u52a0\u4e0a1":5,"\u56e0\u6b64\u4e0d\u5141\u8bb8\u8f93\u5165\u6bd4\u5f53\u524d\u5b9e\u4f8b\u6570\u636e\u76d8\u5927\u5c0f\u7684\u503c":5,"\u56e0\u6b64\u4e0d\u5141\u8bb8\u8f93\u5165\u6bd4\u5f53\u524d\u5b9e\u4f8b\u7cfb\u7edf\u76d8\u5c0f\u7684\u503c":5,"\u56fd\u5185":5,"\u56fd\u5185\u5e26\u5bbd\u6709\u6b20\u8d39":5,"\u56fd\u5185\u65e5\u5fd7url\u5217\u8868":5,"\u56fd\u5185\u6d41\u91cf\u6709\u6b20\u8d39":5,"\u56fd\u5185https\u72b6\u6001":5,"\u56fd\u5916":5,"\u56fd\u5916\u5e26\u5bbd\u6709\u6b20\u8d39":5,"\u56fd\u5916\u65e5\u5fd7url\u5217\u8868":5,"\u56fd\u5916\u6d41\u91cf\u6709\u6b20\u8d39":5,"\u56fd\u5916https\u72b6\u6001":5,"\u56fd\u9645":5,"\u56fd\u9645\u53f7\u7801\u524d\u7f00":5,"\u56fd\u9645ip":5,"\u5728\u52a0\u6743\u8f6e\u8be2\u7b97\u6cd5\u4e0b\u6709\u6548":5,"\u5728\u672c\u5b57\u6bb5\u548c\u5b57\u6bb5machinetype\u4e2d":5,"\u5728\u672c\u5b57\u6bb5\u548c\u5b57\u6bb5uhosttype\u4e2d":5,"\u5730\u533a\u4ee3\u53f7":5,"\u5730\u5740":5,"\u5730\u5740\u503c":5,"\u5730\u5740\u7a7a\u95f4\u4e2d\u5b50\u7f51\u6570\u91cf":5,"\u5730\u57df":5,"\u5730\u57df\u540d\u5b57":5,"\u5730\u57df\u548c\u53ef\u7528\u533a\u5217\u8868":5,"\u57ce\u5e02":5,"\u57df\u540d":5,"\u57df\u540d\u521b\u5efa\u7684\u65f6\u95f4":5,"\u57df\u540d\u548c\u8def\u5f84\u81f3\u5c11\u9700\u8981\u6307\u5b9a\u4e00\u9879":5,"\u57df\u540did":5,"\u57fa\u4e8evip\u548c\u54e8\u5175\u8282\u70b9\u7684\u67b6\u6784":5,"\u57fa\u7840\u578b":5,"\u57fa\u7840\u7f51\u7edc\u6a21\u5f0f":5,"\u57fa\u7840\u955c\u50cf":5,"\u57fa\u7840\u955c\u50cf\u540d\u79f0":5,"\u57fa\u7840\u955c\u50cfid":5,"\u5821\u5792\u673a":5,"\u586b":5,"\u586b\u4ee3\u8868\u5355\u53ef\u7528\u533a":5,"\u586b\u5199\u540e\u4e0d\u80fd\u586b\u5199snapshotid":5,"\u586b\u5199\u540e\u4e0d\u80fd\u586b\u5199udisk":5,"\u586b\u5199\u652f\u6301ssh\u8bbf\u95eeip\u7684\u5730\u533a\u540d\u79f0":5,"\u589e":5,"\u589e\u52a0\u7f51\u6bb5":5,"\u5904\u7406\u4e2d":5,"\u5907\u4efd\u4e2d":5,"\u5907\u4efd\u540d\u79f0":5,"\u5907\u4efd\u5916\u7f51url":5,"\u5907\u4efd\u5931\u8d25":5,"\u5907\u4efd\u5b8c\u6210\u65f6\u95f4":5,"\u5907\u4efd\u5f00\u59cb\u65f6\u95f4":5,"\u5907\u4efd\u603b\u6570":5,"\u5907\u4efd\u6210\u529f":5,"\u5907\u4efd\u6240\u5728\u53ef\u7528\u533a":5,"\u5907\u4efd\u6587\u4ef6\u4fdd\u7559\u7684\u6570\u91cf":5,"\u5907\u4efd\u6587\u4ef6\u516c\u7f51\u7684\u5730\u5740":5,"\u5907\u4efd\u6587\u4ef6\u540d\u79f0":5,"\u5907\u4efd\u6587\u4ef6\u5927\u5c0f":5,"\u5907\u4efd\u65b9\u6848":5,"\u5907\u4efd\u65e5\u671f\u6807\u8bb0\u4f4d":5,"\u5907\u4efd\u65f6\u671f\u6807\u8bb0\u4f4d":5,"\u5907\u4efd\u65f6\u95f4":5,"\u5907\u4efd\u65f6\u95f4\u95f4\u9694":5,"\u5907\u4efd\u72b6\u6001":5,"\u5907\u4efd\u7528\u6237\u7f51url":5,"\u5907\u4efd\u7684\u540d\u79f0":5,"\u5907\u4efd\u7684\u6574\u70b9\u65f6\u95f4":5,"\u5907\u4efd\u7684\u72b6\u6001":5,"\u5907\u4efd\u7b56\u7565":5,"\u5907\u4efd\u7c7b\u578b":5,"\u5907\u4efd\u8bb0\u5f55id":5,"\u5907\u4efd\u8fc7\u671f":5,"\u5907\u4efd\u9519\u8bef\u4fe1\u606f":5,"\u5907\u4efd\u9ed1\u540d\u5355":5,"\u5907\u4efd\u9ed1\u540d\u5355\u5217\u8868":5,"\u5907\u4efdid":5,"\u5907\u4efdudb\u5b9e\u4f8b":5,"\u5907\u4efdudb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684binlog\u5217\u8868":5,"\u5907\u4efdudb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684errorlog":5,"\u5907\u4efdudb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684slowlog\u5206\u6790\u7ed3\u679c":5,"\u5907\u57df\u540d":5,"\u5907\u6848\u53f7":5,"\u5907\u6848\u670d\u52a1\u5546\u7684\u5907\u6848\u6210\u529f\u622a\u56fe":5,"\u5907\u6ce8":5,"\u5907\u6ce8\u4fe1\u606f":5,"\u5907\u6ce8\u7b49\u5c5e\u6027\u5b57\u6bb5":5,"\u590d\u5236\u81ea\u5236\u955c\u50cf":5,"\u5916\u7f51":5,"\u5916\u7f51\u51fa\u53e3\u6743\u91cd":5,"\u5916\u7f51\u5b89\u5168\u7ec4":5,"\u5916\u7f51\u7684":5,"\u5916\u7f51\u8d1f\u8f7d\u5747\u8861":5,"\u5916\u7f51ip":5,"\u5916\u7f51ip\u7248\u672c":5,"\u5916\u7f51ip\u7684id":5,"\u5916\u7f51ip\u8d44\u6e90id":5,"\u591a\u4e2a\u6e90\u7ad9ip":5,"\u591a\u4e2aip\u7528\u9017\u53f7\u9694\u5f00":5,"\u591a\u7528\u4e8e\u9ad8\u53ef\u7528\u7a0b\u5e8f\u4f5c\u4e3a\u6f02\u79fbip":5,"\u5927\u4e8e100\u4e3a\u5b50\u5e10\u6237":5,"\u5927\u4e8e\u7b49\u4e8e\u8fd4\u56dedataset\u957f\u5ea6":5,"\u5927\u5199\u5b57\u6bcd":5,"\u5927\u5c0f":5,"\u5927\u6570\u636e\u96c6\u7fa4":5,"\u5929":5,"\u5931\u6548":5,"\u5931\u6548\u65f6\u95f4":5,"\u5931\u8d25":5,"\u5982":5,"\u59821":5,"\u59821024":5,"\u59821851623xxxx":5,"\u5982\u4e0d\u4f20\u6b64\u53c2\u6570":5,"\u5982\u4e2d\u56fd\u4e3a86\u62160086":5,"\u5982\u4f55\u67e5\u8be2securitygroupid\u8bf7\u53c2\u89c1":5,"\u5982\u5237\u65b0\u6587\u4ef6\u76ee\u5f55a\u4e0b\u9762img":5,"\u5982\u5237\u65b0\u76ee\u5f55a\u4e0b\u6240\u6709\u6587\u4ef6":5,"\u5982\u6309\u6708":5,"\u5982\u679c\u4e0d\u4f20\u5165":5,"\u5982\u679c\u4e0d\u4f20\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684\u4e1a\u52a1\u7ec4":5,"\u5982\u679c\u4e0d\u4f20\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684\u5b50\u7f51":5,"\u5982\u679c\u4e0d\u4f20\u5219\u4f7f\u7528\u9ed8\u8ba4\u7684vpc":5,"\u5982\u679c\u4e0d\u6307\u5b9a":5,"\u5982\u679c\u4e0d\u8f93\u5165\u5219\u4f7f\u7528\u9ed8\u8ba4\u7b7e\u540d":5,"\u5982\u679c\u4e3a\u7a7a":5,"\u5982\u679c\u4ece\u5e93\u5907\u4efd\u5f00\u5173\u8bbe\u5b9a\u4e3a\u6253\u5f00":5,"\u5982\u679c\u4ece\u5e93\u843d\u540e\u53ef\u80fd\u4f1a\u7981\u6b62\u63d0\u5347":5,"\u5982\u679c\u4f20\u4e86\u544a\u8b66\u6a21\u677fid":5,"\u5982\u679c\u521b\u5efauhost\u5b9e\u4f8b\u65f6loginmode\u4e3apassword":5,"\u5982\u679c\u5236\u5b9a\u4e86offset":5,"\u5982\u679c\u586b\u4e86backupid":5,"\u5982\u679c\u586b\u5199":5,"\u5982\u679c\u6307\u5b9a":5,"\u5982\u679c\u6307\u5b9a\u4e3atrue":5,"\u5982\u679c\u6307\u5b9a\u5219\u83b7\u53d6\u5355\u4e2adb\u5b9e\u4f8b\u7684\u63cf\u8ff0":5,"\u5982\u679c\u6307\u5b9a\u5219\u83b7\u53d6\u63cf\u8ff0":5,"\u5982\u679c\u6307\u5b9adbid":5,"\u5982\u679c\u64cd\u4f5c\u6210\u529f":5,"\u5982\u679c\u662f\u5217\u8868\u64cd\u4f5c":5,"\u5982\u679c\u6709\u503c\u8868\u793a\u4e13\u533a\u4e2d\u7684db\u914d\u7f6e\u5347\u964d\u7ea7":5,"\u5982\u679c\u6709\u8be5\u9009\u9879":5,"\u5982\u679c\u6709endtim":5,"\u5982\u679c\u672a\u6307\u5b9agroupid":5,"\u5982\u679c\u6ca1\u4f20":5,"\u5982\u679c\u6ca1\u6709endtim":5,"\u5982\u679c\u843d\u540e\u60c5\u51b5\u4e0b":5,"\u5982\u679c\u8981\u4f20\u5165\u591a\u4e2a\u6587\u4ef6\u540d":5,"\u5982\u679c\u8ba1\u8d39\u5355\u4f4d\u662f":5,"\u5982\u679c\u8bf7\u6c42\u53c2\u6570type\u4e3a0":5,"\u5982\u679c\u8fd9\u4e2a\u53c2\u6570\u5b58\u5728\u8fd9\u8bf4\u660e\u662f\u5728\u4e13\u533a\u4e2d\u521b\u5efadb":5,"\u5982\u679cloginmode\u4e3akeypair":5,"\u5982\u679cname\u4e0d\u586b\u5199":5,"\u5982\u679ctag\u4e0d\u586b\u5199":5,"\u5982\u679ctype\u4e3a1":5,"\u5982\u679ctype\u4e3a2":5,"\u5982\u679cudbid\u4e0d\u4e3a\u7a7a\u5219\u53ea\u67e5\u770b\u6b64\u4e13\u533a\u4e0b\u9762\u7684db":5,"\u5982\u679cusessd\u4e3atru":5,"\u5982\u6ca1\u6709\u8d4b\u503c":5,"\u5982\u9700\u9000\u8d39\u6b64\u5904\u4e3a\u8d1f\u503c":5,"\u5982\u9999\u6e2f":5,"\u5982cn":5,"\u5982cpu\u6838\u5fc3\u6570":5,"\u5982hk":5,"\u5982month":5,"\u5982mysql":5,"\u5982org":5,"\u5b50\u5e10\u53f7\u5fc5\u987b\u586b\u5199":5,"\u5b50\u7f51":5,"\u5b50\u7f51\u5173\u8054\u7684ipv6\u7f51\u6bb5":5,"\u5b50\u7f51\u540d\u79f0":5,"\u5b50\u7f51\u603b\u6570\u91cf":5,"\u5b50\u7f51\u63a9\u7801":5,"\u5b50\u7f51\u6a21\u5f0f":5,"\u5b50\u7f51\u7684\u603b\u6570":5,"\u5b50\u7f51\u7c7b\u578b":5,"\u5b50\u7f51\u7f51\u5173":5,"\u5b50\u7f51\u7f51\u6bb5":5,"\u5b50\u7f51\u7f51\u7edc\u53f7\u4f4d\u6570":5,"\u5b50\u7f51\u7f51\u7edc\u5730\u5740":5,"\u5b50\u7f51id":5,"\u5b50\u7f51id\u6570\u7ec4":5,"\u5b57\u6570\u4e0d\u8d85\u8fc7128":5,"\u5b57\u6570\u4e0d\u8d85\u8fc7500":5,"\u5b57\u6bb5\u4e2d\u7684\u57df\u540d":5,"\u5b57\u6bb5\u89c4\u8303":5,"\u5b57\u6bb5\u8fd4\u56de\u4e3a\u7a7a":5,"\u5b57\u6bcd":5,"\u5b57\u7b26\u90fd\u6309\u4e00\u4e2a\u5b57\u8ba1":5,"\u5b57\u8282":5,"\u5b58\u50a8\u7c7b\u578b":5,"\u5b58\u50a8\u7c7b\u578b\u522b\u540d":5,"\u5b58\u50a8\u7c7b\u578b\u7684\u603b\u6570":5,"\u5b89\u5168\u7ec4":5,"\u5b89\u5168\u7ec4\u540d\u79f0":5,"\u5b89\u5168\u7ec4\u7684":5,"\u5b89\u5168\u7ec4\u7684\u603b\u6570":5,"\u5b89\u5168\u7ec4\u89c4\u5219":5,"\u5b89\u5168\u7ec4\u89c4\u5219id":5,"\u5b89\u5168\u7ec4id":5,"\u5b89\u88c5":5,"\u5b89\u88c5\u5931\u8d25":5,"\u5b9a\u4e49\u76d1\u542c\u7684\u534f\u8bae\u548c\u7aef\u53e3\u4ee5\u53ca\u8d1f\u8f7d\u5747\u8861\u7b97\u6cd5":5,"\u5b9e\u4f8b":5,"\u5b9e\u4f8b\u540d\u79f0":5,"\u5b9e\u4f8b\u6240\u5728\u53ef\u7528\u533a":5,"\u5b9e\u4f8b\u6240\u5728\u7684\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u5b9e\u4f8b\u6240\u5728\u7684\u5b50\u7f51":5,"\u5b9e\u4f8b\u72b6\u6001":5,"\u5b9e\u4f8b\u7684\u65b0\u540d\u5b57":5,"\u5b9e\u4f8b\u7684\u65b0\u5bc6\u7801":5,"\u5b9e\u4f8b\u7684\u90e8\u7f72\u7c7b\u578b":5,"\u5b9e\u4f8b\u7684id":5,"\u5b9e\u4f8bid":5,"\u5b9e\u540d\u8ba4\u8bc1\u72b6\u6001":5,"\u5ba1\u6838\u4e2d":5,"\u5ba1\u6838\u5931\u8d25\u539f\u56e0":5,"\u5ba1\u6838\u672a\u901a\u8fc7":5,"\u5ba1\u6838\u901a\u8fc7":5,"\u5ba2\u6237\u7f51\u5173\u540d\u79f0":5,"\u5ba2\u6237\u7f51\u5173id":5,"\u5ba2\u6237\u7f51\u5173ip\u5730\u5740":5,"\u5ba2\u6237\u81ea\u5b9a\u4e49":5,"\u5ba2\u6237vpn\u7f51\u5173\u7684\u8d44\u6e90id":5,"\u5bb9\u5668":5,"\u5bb9\u5668\u96c6\u7fa4":5,"\u5bb9\u91cf\u5355\u4f4dgb":5,"\u5bb9\u91cf\u5927\u5c0f":5,"\u5bb9\u91cf\u8c03\u6574\u4e2d":5,"\u5bb9\u91cf\u8c03\u6574\u5931\u8d25":5,"\u5bbd\u83b7\u53d6\u7684\u65f6\u95f4\u70b9":5,"\u5bbf\u4e3b\u673a\u7c7b\u578b":5,"\u5bc6\u7801":5,"\u5bc6\u7801\u683c\u5f0f\u4f7f\u7528base64\u7f16\u7801":5,"\u5bc6\u7801\u957f\u5ea6\u96506":5,"\u5bc6\u7801\u9700\u4f7f\u7528base64\u8fdb\u884c\u7f16\u7801":5,"\u5bf9\u4e8e":5,"\u5bf9\u4e8e\u5185\u5b58\u5347\u7ea7\u65e0\u9700\u5173\u95ed\u5b9e\u4f8b":5,"\u5bf9\u5e94\u7684\u4e91\u786c\u76d8":5,"\u5bf9\u5e94\u7684\u5b9e\u4f8bid":5,"\u5bf9\u5e94\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5bf9\u5e94\u7684db\u540d\u79f0":5,"\u5bf9\u5e94\u78c1\u76d8\u5236\u4f5c\u5feb\u7167\u65f6\u6240\u6302\u8f7d\u7684\u4e3b\u673a":5,"\u5bf9\u5e94\u78c1\u76d8\u662f\u5426\u5904\u4e8e\u53ef\u7528\u72b6\u6001":5,"\u5bf9\u6bd4\u65b9\u5f0f":5,"\u5bf9\u7aef\u7f51\u5173\u540d\u5b57":5,"\u5bf9\u7aef\u7f51\u5173id":5,"\u5bf9master\u5219\u4e3a\u7a7a":5,"\u5bf9mongodb\u5219\u662f\u526f\u672c\u96c6id":5,"\u5bf9mysql\u7684slave\u800c\u8a00\u662fmaster\u7684dbid":5,"\u5bfc\u5165\u4e2d":5,"\u5bfc\u5165\u5de5\u4f5c\u6d41\u5b9a\u4e49":5,"\u5bfc\u5165\u7684\u914d\u7f6e\u5185\u5bb9\u91c7\u7528base64\u7f16\u7801":5,"\u5bfc\u5165udb\u914d\u7f6e":5,"\u5bfc\u51fa\u5de5\u4f5c\u6d41\u5b9a\u4e49":5,"\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684\u7248\u672c\u53f7":5,"\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684id":5,"\u5c06\u4e00\u4e2a\u53ef\u7528\u7684udisk\u6302\u8f7d\u5230\u67d0\u53f0\u4e3b\u673a\u4e0a":5,"\u5c06\u5c1a\u672a\u4f7f\u7528\u7684\u5f39\u6027ip\u7ed1\u5b9a\u5230\u6307\u5b9a\u7684\u8d44\u6e90":5,"\u5c06\u5f39\u6027ip\u4ece\u8d44\u6e90\u4e0a\u89e3\u7ed1":5,"\u5c06\u65b0\u521b\u5efa\u7684db\u6062\u590d\u5230\u6307\u5b9adb\u67d0\u4e2a\u6307\u5b9a\u65f6\u95f4\u70b9":5,"\u5c06\u67d0\u4e2a\u5feb\u7167\u5185\u7684\u6570\u636e\u56de\u6eda\u5230\u539f\u4e91\u786c\u76d8":5,"\u5c06\u9632\u706b\u5899\u5e94\u7528\u5230\u8d44\u6e90\u4e0a":5,"\u5c06eip\u52a0\u5165\u5171\u4eab\u5e26\u5bbd":5,"\u5c06eip\u79fb\u51fa\u5171\u4eab\u5e26\u5bbd":5,"\u5c06ssl\u8bc1\u4e66\u7ed1\u5b9a\u5230vserver":5,"\u5c0f\u4e8e\u7b49\u4e8e32\u4e2a\u5b57":5,"\u5c0f\u4e8e\u7b49\u4e8e600\u4e2a\u5b57":5,"\u5c0f\u5199\u5b57\u6bcd":5,"\u5c0f\u65f6":5,"\u5c0f\u65f6\u4e0d\u751f\u6548":5,"\u5c55\u793a\u5b50\u7f51\u8d44\u6e90":5,"\u5c5e\u6027":5,"\u5de5\u4fe1\u90e8\u5907\u6848\u7f51\u7ad9\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"\u5df2\u5173\u95ed":5,"\u5df2\u51bb\u7ed3":5,"\u5df2\u5220\u9664":5,"\u5df2\u542f\u7528":5,"\u5df2\u5e9f\u5f03":5,"\u5df2\u6302\u8f7d":5,"\u5df2\u6709\u4e3b\u673a\u7684\u4e1a\u52a1\u7ec4\u603b\u4e2a\u6570":5,"\u5df2\u7533\u8bf7\u7684\u77ed\u4fe1\u7b7e\u540did":5,"\u5df2\u7981\u7528":5,"\u5df2\u7ed1\u5b9a":5,"\u5df2\u7ed1\u5b9a\u7684\u8d44\u6e90\u540d\u79f0":5,"\u5df2\u7ed1\u5b9a\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5df2\u7ed1\u5b9a\u8d44\u6e90\u5b9e\u4f8b\u7684\u5e26\u5bbd\u8ba1\u8d39\u5f39\u6027ip\u9644\u52a0\u4e34\u65f6\u5e26\u5bbd\u5305":5,"\u5df2\u7ed1\u5b9a\u8d44\u6e90\u7684\u8d44\u6e90id":5,"\u5df2\u89e3\u7ed1":5,"\u5df2\u9500\u6bc1":5,"\u5e26\u5bbd":5,"\u5e26\u5bbd\u4fe1\u606f":5,"\u5e26\u5bbd\u4fee\u6539\u4e2d":5,"\u5e26\u5bbd\u503c":5,"\u5e26\u5bbd\u5305\u6240\u7ed1\u5b9a\u5f39\u6027ip\u7684\u8d44\u6e90id":5,"\u5e26\u5bbd\u5305\u6709\u6548\u65f6\u957f":5,"\u5e26\u5bbd\u5305\u7684\u4e34\u65f6\u5e26\u5bbd\u503c":5,"\u5e26\u5bbd\u5305\u7684\u8d44\u6e90id":5,"\u5e26\u5bbd\u5305\u8d44\u6e90id":5,"\u5e26\u5bbd\u5927\u5c0f":5,"\u5e26\u5bbd\u65e5\u5cf0\u503c":5,"\u5e26\u5bbd\u6a21\u5f0f":5,"\u5e26\u5bbd\u7c7b\u578b":5,"\u5e26\u5bbd\u83b7\u53d6\u7684\u65f6\u95f4\u70b9":5,"\u5e26\u5bbd\u8ba1\u8d39":5,"\u5e26\u5bbd\u8ba1\u8d39\u6a21\u5f0f":5,"\u5e73\u53f0\u521b\u5efa\u65f6\u95f4":5,"\u5e73\u53f0\u9ed8\u8ba4\u63d0\u4f9b\u7684\u955c\u50cf":5,"\u5e74\u8303\u56f4":5,"\u5e76\u4e14quantity\u4e3a0":5,"\u5e76\u53ef\u6839\u636e\u6570\u636e\u4e2d\u5fc3":5,"\u5e76\u91ca\u653e":5,"\u5e76\u91cd\u65b0\u63d0\u4ea4\u5ba1\u6838":5,"\u5e7f\u4e1c":5,"\u5e7f\u5dde\u7684\u5bb9\u91cf\u578b\u5fc5\u987b\u4e3a1024\u7684\u6574\u6570\u500d":5,"\u5e94\u7528\u5546\u5e97\u540e\u53f0\u5f00\u53d1\u8005\u7ba1\u7406\u622a\u56fe":5,"\u5e9f\u5f03":5,"\u5efa\u8bae\u4e0d\u518d\u4f7f\u7528":5,"\u5efa\u8bae\u5347\u7ea7\u4e3a1":5,"\u5efa\u8bae\u53d1\u9001\u5b8c\u77ed\u4fe1\u4ee5\u540e":5,"\u5efa\u8bae\u540e\u7eed\u4e0d\u518d\u4f7f\u7528":5,"\u5efa\u8baen\u4ece1\u5f00\u59cb\u987a\u6b21":5,"\u5f00\u542f":5,"\u5f00\u542f\u4e2d":5,"\u5f00\u542f\u5931\u8d25":5,"\u5f00\u542f\u6216\u8005\u5173\u95edudb\u4ece\u5e93\u5907\u4efd":5,"\u5f00\u542f\u65b9\u821f":5,"\u5f00\u542f\u70ed\u5347\u7ea7":5,"\u5f00\u542f\u7f51\u7edc\u589e\u5f3a1":5,"\u5f00\u542f\u7f51\u7edc\u589e\u5f3a2":5,"\u5f00\u542f\u865a\u62df\u673a":5,"\u5f00\u59cb":5,"\u5f00\u59cb\u5206\u914dcname\u65f6\u95f4":5,"\u5f00\u59cb\u65f6\u95f4":5,"\u5f00\u901a\u5171\u4eab\u5e26\u5bbd":5,"\u5f39\u6027\u7f51\u5361":5,"\u5f39\u6027ip":5,"\u5f39\u6027ip\u4ed8\u8d39\u65b9\u5f0f":5,"\u5f39\u6027ip\u4ef7\u683c":5,"\u5f39\u6027ip\u5730\u5740":5,"\u5f39\u6027ip\u662f\u5426\u5230\u671f":5,"\u5f39\u6027ip\u7684\u4e1a\u52a1\u7ec4\u6807\u8bc6":5,"\u5f39\u6027ip\u7684\u521b\u5efa\u65f6\u95f4":5,"\u5f39\u6027ip\u7684\u5230\u671f\u65f6\u95f4":5,"\u5f39\u6027ip\u7684\u540d\u79f0":5,"\u5f39\u6027ip\u7684\u5907\u6ce8":5,"\u5f39\u6027ip\u7684\u5916\u7f51\u5e26\u5bbd":5,"\u5f39\u6027ip\u7684\u5e26\u5bbd":5,"\u5f39\u6027ip\u7684\u5e26\u5bbd\u503c":5,"\u5f39\u6027ip\u7684\u5e26\u5bbd\u7c7b\u578b":5,"\u5f39\u6027ip\u7684\u7ebf\u8def":5,"\u5f39\u6027ip\u7684\u7ebf\u8def\u5982\u4e0b":5,"\u5f39\u6027ip\u7684\u8ba1\u8d39\u6a21\u5f0f":5,"\u5f39\u6027ip\u7684\u8d44\u6e90\u7ed1\u5b9a\u72b6\u6001":5,"\u5f39\u6027ip\u7684\u8d44\u6e90id":5,"\u5f39\u6027ip\u7684\u8d44\u6e90id\u5982\u679c\u4e3a\u7a7a":5,"\u5f39\u6027ip\u7684\u8fd0\u8425\u5546\u4fe1\u606f":5,"\u5f39\u6027ip\u7684id":5,"\u5f39\u6027ip\u8ba1\u8d39\u65b9\u5f0fr":5,"\u5f39\u6027ip\u8bf7\u6c42\u7ed1\u5b9a\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5f39\u6027ip\u8bf7\u6c42\u7ed1\u5b9a\u7684\u8d44\u6e90id":5,"\u5f39\u6027ip\u8bf7\u6c42\u89e3\u7ed1\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u5f39\u6027ip\u8bf7\u6c42\u89e3\u7ed1\u7684\u8d44\u6e90id":5,"\u5f39\u6027ip\u8d44\u6e90id":5,"\u5f3a\u5236\u63d0\u5347\u4e22\u5931\u6570\u636e":5,"\u5f53":5,"\u5f53\u5065\u5eb7\u68c0\u67e5\u7c7b\u578b\u4e3a\u7aef\u53e3\u68c0\u67e5\u65f6":5,"\u5f53\u524d\u4ec5\u652f\u6301\u5220\u9664vpc\u7f51\u6bb5":5,"\u5f53\u524d\u4ec5\u652f\u6301mysql":5,"\u5f53\u524d\u53ea\u652f\u6301\u4e00\u4e2a\u5185\u7f51ip":5,"\u5f53\u524d\u652f\u6301mysql\u548cpg":5,"\u5f53\u524d\u6587\u4ef6\u7cfb\u7edf\u5df2\u521b\u5efa\u7684\u6302\u8f7d\u70b9\u6570\u76ee":5,"\u5f53\u524d\u78c1\u76d8\u652f\u6301\u7684\u5907\u4efd\u6a21\u5f0f\u53c2\u8003":5,"\u5f53\u524d\u7f51\u5361\u7684mac":5,"\u5f53\u524d\u8ba1\u8d39\u65b9\u5f0f":5,"\u5f53\u524deip\u4ee3\u91d1\u5238id":5,"\u5f53\u524deip\u7684\u6743\u91cd":5,"\u5f53\u534f\u8bae\u4e3a":5,"\u5f53\u53ea\u83b7\u53d6\u8fd9\u4e2a\u7279\u5b9adbid\u7684\u4fe1\u606f\u65f6":5,"\u5f53\u586b\u5199\u4e86machinetype\u65f6":5,"\u5f53\u5bfc\u51fa\u67d0\u4e9b\u6570\u636e\u9047\u5230\u95ee\u9898\u540e":5,"\u5f53\u60a8\u662f\u4ee3\u7406\u5e76\u4f7f\u7528\u7b2c\u4e09\u65b9\u7684\u7b7e\u540d\u65f6":5,"\u5f53\u8bf7\u6c42\u6ca1\u6709\u586b\u5199zone\u65f6":5,"\u5f53\u955c\u50cf\u652f\u6301cloud":5,"\u5f53bandwidthtyp":5,"\u5f53cento":5,"\u5f53db\u7c7b\u578b":5,"\u5f53db\u7c7b\u578b\u4e3amongodb\u65f6":5,"\u5f53lb\u4e3a\u5185\u7f51\u7c7b\u578b\u65f6":5,"\u5f53lb\u4e3a\u5916\u7f51\u7c7b\u578b\u65f6":5,"\u5f53monitortype\u4e3apath\u65f6":5,"\u5f53monitortype\u4e3aport\u65f6":5,"\u5f53purpose\u4e3a3":5,"\u5f53purpose\u4e3a3\u65f6":5,"\u5f53retcode\u4e0d\u4e3a0\u65f6":5,"\u5f53udisk\u6302\u8f7d\u6210\u529f\u540e":5,"\u5f53ulbtype\u4e3aoutermode\u65f6":5,"\u5f7b\u5e95\u5220\u9664":5,"\u5f85\u5ba1\u6838":5,"\u5f85\u5e9f\u5f03":5,"\u5f85\u6062\u590d\u7684\u8d44\u6e90id":5,"\u5f85\u67e5\u7684\u786c\u4ef6\u9694\u79bb\u7ec4id":5,"\u5f85\u7eed\u7eed\u7684\u8d44\u6e90id":5,"\u5fae\u4fe1\u8f6c\u8d26":5,"\u5fc5\u586b":5,"\u5fc5\u987b\u4ee5":5,"\u5fc5\u987b\u540c\u65f6\u4f20zone":5,"\u5fc5\u987b\u548czone\u5728\u540c\u4e00region":5,"\u5fc5\u987b\u586b\u5199":5,"\u5fc5\u987b\u586b\u5199minimalcpuplatform\u5b57\u6bb5":5,"\u5fc5\u987b\u586btrue":5,"\u5fc5\u987b\u662f10gb\u7684\u6574\u6570\u500d":5,"\u5fc5\u987b\u8bbe\u7f6e":5,"\u5feb\u7167\u5236\u4f5c\u65f6\u95f4":5,"\u5feb\u7167\u540d\u79f0":5,"\u5feb\u7167\u5907\u4efd\u5373\u7269\u7406\u5907\u4efd":5,"\u5feb\u7167\u5907\u4efd\u5907\u4efd\u9ed1\u540d\u5355\u4e0b\u65e0\u6548":5,"\u5feb\u7167\u63cf\u8ff0":5,"\u5feb\u7167\u7248\u672c":5,"\u5feb\u7167\u72b6\u6001":5,"\u5feb\u7167\u7684\u6e90udisk\u7684id":5,"\u5feb\u7167\u7684\u6e90udisk\u7684nam":5,"\u5feb\u7167\u7684udisk\u7684id":5,"\u5feb\u7167id":5,"\u6027\u80fd\u578b\u6587\u4ef6\u7cfb\u7edfsize\u6700\u5c0f\u4e3a100gb":5,"\u603b\u4e2a\u6570":5,"\u603b\u4ef7\u683c":5,"\u603b\u6570":5,"\u603b\u6570\u636e\u91cf\u5927\u5c0f\u4e0d\u8d85\u591a16k":5,"\u603b\u7684\u4ed3\u5e93\u6570\u91cf":5,"\u603b\u7684\u6570\u636e\u76d8\u5b58\u50a8\u7a7a\u95f4":5,"\u6062\u590d\u4e2d":5,"\u6062\u590d\u5230\u67d0\u4e2a\u65f6\u95f4\u70b9\u7684\u65f6\u95f4\u6233":5,"\u6062\u590d\u56de\u6536\u7ad9\u8d44\u6e90":5,"\u6062\u590d\u5931\u8d25":5,"\u610f\u4e49\u4e3a0":5,"\u610f\u4e49\u5206":5,"\u6210\u529f":5,"\u6216":5,"\u6216\u767b\u5f55\u7528\u6237\u4e2d\u5fc3\u67e5\u770b":5,"\u6216\u8005":5,"\u6216\u8005\u628a\u8bc1\u4e66":5,"\u6216\u8005\u81ea\u5236\u955c\u50cf":5,"\u6216\u8005master":5,"\u6240\u521b\u5efa\u5e26\u5bbd\u5305\u7684\u8d44\u6e90id":5,"\u6240\u521b\u5efa\u9879\u76ee\u7684id":5,"\u6240\u5728\u53ef\u7528\u533a":5,"\u6240\u5c5e\u5730\u57df":5,"\u6240\u5c5e\u7684\u4e1a\u52a1\u7ec4id":5,"\u6240\u5c5e\u7684\u5b50\u7f51id":5,"\u6240\u5c5e\u7684\u8d1f\u8f7d\u5747\u8861":5,"\u6240\u5c5e\u884c\u4e1a":5,"\u6240\u5c5evoc\u540d\u5b57":5,"\u6240\u5c5evpcid":5,"\u6240\u5c5evpn\u7f51\u5173id":5,"\u6240\u5c5evserverid":5,"\u6240\u5e94\u7528\u8d44\u6e90id":5,"\u6240\u6709\u7b26\u5408\u6761\u4ef6\u7684uhost\u5b9e\u4f8b":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u5728ulb\u4e2d\u7684\u5bf9\u8c61id":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u670d\u52a1\u7aef\u53e3":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u7684\u7c7b\u578b":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aef\u8d44\u6e90\u7684\u8d44\u6e90id":5,"\u6240\u6dfb\u52a0\u7684\u540e\u7aefrs\u6743\u91cd":5,"\u6240\u6dfb\u52a0\u7684ssl\u8bc1\u4e66\u7c7b\u578b":5,"\u6240\u7ed1\u5b9a\u5f39\u6027ip\u7684\u8d44\u6e90id":5,"\u6240\u7ed1\u5b9aulb\u5b9e\u4f8bid":5,"\u6240\u7ed1\u5b9avserver\u5b9e\u4f8bid":5,"\u6240\u91ca\u653e\u5f39\u6027ip\u5fc5\u987b\u4e3a\u975e\u7ed1\u5b9a\u72b6\u6001":5,"\u624b\u52a8":5,"\u624b\u52a8\u751f\u6210":5,"\u624b\u673a\u53f7\u7801":5,"\u624d\u53ef\u8fdb\u884c":5,"\u6253\u5f00":5,"\u6269\u5bb9\u5dee\u4ef7":5,"\u6279\u91cf\u521b\u5efa\u4e0d\u4f1a\u8fd4\u56de":5,"\u6279\u91cf\u521b\u5efa\u8be5\u53c2\u6570\u65e0\u6548":5,"\u6279\u91cf\u6dfb\u52a0vserver\u540e\u7aef\u8282\u70b9":5,"\u6279\u91cf\u83b7\u53d6\u52a0\u901f\u57df\u540d\u914d\u7f6e":5,"\u628aufile\u7684\u955c\u50cf\u6587\u4ef6\u5bfc\u5165\u5230uhost":5,"\u62a2\u5360\u578b\u4e91\u4e3b\u673a":5,"\u62a2\u5360\u6027\u4e91\u4e3b\u673a":5,"\u62a5\u6587\u8f6c\u53d1":5,"\u62a5\u6587\u8f6c\u53d1\u4e0b\u6709":5,"\u62a5\u6587\u8f6c\u53d1\u7684vserver\u4e0b\u8868\u793a\u56de\u8bdd\u4fdd\u6301\u7684\u65f6\u95f4":5,"\u62a5\u6587\u8f6c\u53d1vserver\u53ea\u652f\u6301\u4fee\u6539\u4e3a":5,"\u62c9\u53d6\u6240\u6709\u673a\u623f\u7684\u914d\u7f6e\u6587\u4ef6":5,"\u62d2\u6536\u56det":5,"\u62d2\u7edd":5,"\u6302\u8f7d\u4e2d":5,"\u6302\u8f7d\u7684\u8bbe\u5907\u540d\u79f0":5,"\u6302\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u6302\u8f7d\u7684uhost\u5b9e\u4f8bid":5,"\u6302\u8f7d\u7684uhost\u7684id":5,"\u6302\u8f7d\u7684uhost\u7684ip":5,"\u6302\u8f7d\u7684uhost\u7684nam":5,"\u6307\u505c\u6b62\u5904\u4e8e\u8fd0\u884c\u72b6\u6001\u7684uhost\u5b9e\u4f8b":5,"\u6307\u5b9a\u4ece\u65b9\u821f\u6062\u590d\u7684\u5907\u4efd\u65f6\u95f4\u70b9":5,"\u6307\u5b9a\u5185\u7f51ip":5,"\u6307\u5b9a\u5916\u7f51ip":5,"\u6307\u5b9a\u5bbf\u4e3b\u673a\u521b\u5efa":5,"\u6307\u5b9a\u5e93mysql":5,"\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3":5,"\u6307\u5b9a\u662f\u5426\u662f\u5426\u4f7f\u7528ssd":5,"\u6307\u5b9a\u8868citi":5,"\u6307\u5b9aclasstyp":5,"\u6307\u5b9adbid\u65f6\u65e0\u9700\u586b\u5199classtyp":5,"\u6307\u5b9adbid\u7528\u4e8e\u83b7\u53d6\u8be5db\u7684\u4fe1\u606f":5,"\u6307\u5b9aip":5,"\u6307\u5b9aoffset":5,"\u6307\u5b9aset\u521b\u5efa":5,"\u6307\u5b9asubnetid\u65f6\u5fc5\u586b":5,"\u6307\u5b9avip\u6240\u5c5e\u7684vpc":5,"\u6307\u5b9avpn\u8fde\u63a5\u7684\u5ba2\u6237\u7f51\u6bb5":5,"\u6307\u5b9avpn\u8fde\u63a5\u7684\u672c\u5730\u5b50\u7f51":5,"\u6307\u5f53\u524d\u81ea\u5b9a\u4e49\u955c\u50cf\u7684\u6765\u6e90\u955c\u50cf":5,"\u63091\u5206\u949f":5,"\u6309\u5929":5,"\u6309\u5c0f\u65f6":5,"\u6309\u5c0f\u65f6\u4ed8\u8d39":5,"\u6309\u5c0f\u65f6\u4ed8\u8d39\u548c\u8bd5\u7528\u8fd9\u4e24\u79cd\u4ed8\u8d39\u6a21\u5f0f\u9700\u8981\u5f00\u901a\u6743\u9650":5,"\u6309\u5c0f\u65f6\u540e\u4ed8\u8d39":5,"\u6309\u5c0f\u65f6\u8d2d\u4e70":5,"\u6309\u5c0f\u65f6\u9884\u4ed8\u8d39":5,"\u6309\u5e74":5,"\u6309\u5e74\u4ed8\u8d39":5,"\u6309\u65f6":5,"\u6309\u65f6\u4ed8\u8d39":5,"\u6309\u6708":5,"\u6309\u6708\u4ed8\u8d39":5,"\u6309\u6708\u4ed8\u8d39\u7684\u8d44\u6e90\u4f20":5,"\u6309\u6708\u540e\u4ed8\u8d39":5,"\u6309\u7167\u6bcf66\u4e2a\u8fdb\u884c\u5207\u5272":5,"\u6309\u9700":5,"\u6309\u9700\u4ed8\u8d39":5,"\u6392\u961f\u4e2d":5,"\u63a5\u53d7":5,"\u63a5\u53e3\u8fd4\u56de\u6d88\u606f":5,"\u63cf\u8ff0":5,"\u63cf\u8ff0\u5de5\u4f5c\u6d41\u5b9a\u4e49\u7684base64\u5b57\u7b26\u4e32":5,"\u63d0\u4ea4\u4efb\u52a1\u65f6\u8fd4\u56de\u7684\u4efb\u52a1id":5,"\u63d0\u4ea4\u9884\u53d6\u4efb\u52a1":5,"\u63d0\u5347\u4e3a\u72ec\u5e93\u8fdb\u884c\u4e2d":5,"\u63d0\u793a\u4fe1\u606f":5,"\u642d\u914d\u4f7f\u7528":5,"\u64cd\u4f5c\u540d\u79f0":5,"\u64cd\u4f5c\u65f6\u95f4":5,"\u64cd\u4f5c\u7cfb\u7edf\u540d\u79f0":5,"\u64cd\u4f5c\u7cfb\u7edf\u5e73\u53f0":5,"\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u522b":5,"\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b":5,"\u64cd\u4f5c\u7cfb\u7edf\u8be6\u7ec6\u7248\u672c":5,"\u652f\u4ed8\u5468\u671f":5,"\u652f\u4ed8\u5b9d":5,"\u652f\u4ed8\u65b9\u5f0f":5,"\u652f\u6301":5,"\u652f\u6301100":5,"\u652f\u6301\u4e24\u7c7b\u64cd\u4f5c":5,"\u652f\u6301\u4ee5\u6570\u7ec4\u7684\u65b9\u5f0f":5,"\u652f\u6301\u503c":5,"\u652f\u6301\u5173\u673a\u4e0d\u6536\u8d39":5,"\u652f\u6301\u5730\u57df":5,"\u652f\u6301\u591a\u4e2a\u6e90\u7ad9ip":5,"\u652f\u6301\u591a\u503c\u4f20\u5165":5,"\u652f\u6301\u6b63\u5219":5,"\u652f\u6301\u6b63\u5219\u8868\u8fbe\u5f0f":5,"\u652f\u6301udpn\u7684\u5730\u57df\u4e4b\u4e00":5,"\u6539":5,"\u6539\u6807\u5fd7":5,"\u6539\u914d\u6210\u529f\u7684\u78c1\u76d8id":5,"\u653e\u5165\u56de\u6536\u7ad9":5,"\u653f\u5e9c":5,"\u6570\u503c\u5bf9\u5e94\u7684\u7248\u672c\u5982\u4e0b":5,"\u6570\u5b57":5,"\u6570\u5b57\u4ee5\u53ca":5,"\u6570\u5b57\u4ee5\u53ca\u7b26\u53f7":5,"\u6570\u5b57\u548c\u7b26\u53f7":5,"\u6570\u5b57\u7b49\u90fd\u8ba1\u4e3a1\u4e2a\u5b57":5,"\u6570\u5b57\u8868\u793adh\u7ec4":5,"\u6570\u5b57\u8d8a\u5927\u4f18\u5148\u7ea7\u8d8a\u9ad8":5,"\u6570\u636e\u4e2d\u5fc3\u540d\u79f0":5,"\u6570\u636e\u4e2d\u5fc3id":5,"\u6570\u636e\u4ed3\u5e93":5,"\u6570\u636e\u504f\u79fb\u91cf":5,"\u6570\u636e\u5206\u9875\u503c":5,"\u6570\u636e\u5e93":5,"\u6570\u636e\u5e93\u578b":5,"\u6570\u636e\u5e93\u5ba1\u8ba1":5,"\u6570\u636e\u65b9\u821f":5,"\u6570\u636e\u65b9\u821f\u6a21\u5f0f":5,"\u6570\u636e\u76d8":5,"\u6570\u636e\u76d8\u4e0d\u652f\u6301\u7f29\u5bb9":5,"\u6570\u636e\u76d8\u5927\u5c0f":5,"\u6570\u636e\u76d8\u7c7b\u578b":5,"\u6570\u636e\u8282\u70b9":5,"\u6570\u7ec4":5,"\u6570\u7ec4\u542b\u6709\u4e0b\u5217\u5143\u7d20\u503c":5,"\u6570\u7ec4\u7b49\u90fd\u8ba1\u4e3a\u4e00\u4e2a\u5b57":5,"\u6570\u91cf":5,"\u6570\u9519\u8bef":5,"\u6587\u4ef6\u5217\u8868\u8d77\u59cb":5,"\u6587\u4ef6\u5217\u8868\u957f\u5ea6":5,"\u6587\u4ef6\u5927\u5c0f\u4e0d\u8d85\u8fc74":5,"\u6587\u4ef6\u7cfb\u7edf\u5141\u8bb8\u521b\u5efa\u7684\u6700\u5927\u6302\u8f7d\u70b9\u6570\u76ee":5,"\u6587\u4ef6\u7cfb\u7edf\u521b\u5efa\u65f6\u95f4":5,"\u6587\u4ef6\u7cfb\u7edf\u534f\u8bae":5,"\u6587\u4ef6\u7cfb\u7edf\u540d\u79f0":5,"\u6587\u4ef6\u7cfb\u7edf\u5907\u6ce8\u4fe1\u606f":5,"\u6587\u4ef6\u7cfb\u7edf\u5927\u5c0f":5,"\u6587\u4ef6\u7cfb\u7edf\u5b58\u50a8\u7c7b\u578b":5,"\u6587\u4ef6\u7cfb\u7edf\u5f53\u524d\u4f7f\u7528\u5bb9\u91cf":5,"\u6587\u4ef6\u7cfb\u7edf\u603b\u6570":5,"\u6587\u4ef6\u7cfb\u7edf\u6240\u5c5e\u4e1a\u52a1\u7ec4":5,"\u6587\u4ef6\u7cfb\u7edf\u6269\u5bb9":5,"\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d\u70b9\u72b6\u6001":5,"\u6587\u4ef6\u7cfb\u7edf\u8fc7\u671f\u65f6\u95f4":5,"\u6587\u4ef6\u7cfb\u7edfid":5,"\u65ad\u5f00":5,"\u65ad\u7535\u7269\u7406\u4e91\u4e3b\u673a":5,"\u65ad\u7535\u865a\u62df\u673a":5,"\u65b0":5,"\u65b0\u52a0\u5761":5,"\u65b0\u5efavpc\u4e92\u901a\u5173\u7cfb":5,"\u65b0\u673a\u623f\u53ea\u63d0\u4f9bssd\u8d44\u6e90":5,"\u65b0\u6d6a\u652f\u4ed8":5,"\u65b0\u7684\u540d\u79f0":5,"\u65b0\u7684\u6a21\u677f\u5185\u5bb9":5,"\u65b0\u7684\u6a21\u677f\u540d\u79f0":5,"\u65b0\u7684\u77ed\u4fe1\u7b7e\u540d\u540d\u79f0":5,"\u65b0\u7684\u9879\u76ee\u540d\u79f0":5,"\u65b0\u914d\u7f6e\u53c2\u6570\u7ec4\u540d\u79f0":5,"\u65b0\u914d\u7f6e\u53c2\u6570\u7ec4id":5,"\u65b9\u5411":5,"\u65b9\u821f\u662f\u5426\u5f00\u542f":5,"\u65b9\u821f\u673a\u578b":5,"\u65e0":5,"\u65e0\u4ee3\u8868\u6b63\u5e38\u521b\u5efa":5,"\u65e0\u5907\u4efd":5,"\u65e0\u6548":5,"\u65e0\u6548\u4ee3\u8868\u8282\u70b9\u670d\u52a1\u5f02\u5e38":5,"\u65e0\u70ed\u5907":5,"\u65e0\u9700\u586b\u5199":5,"\u65e0\u9700\u7b49\u5f85\u5b9e\u4f8b\u6b63\u5e38\u5173\u95ed":5,"\u65e0id":5,"\u65e5\u5fd7\u5305id":5,"\u65e5\u5fd7\u65f6\u95f4unixtim":5,"\u65e5\u5fd7\u7c7b\u578b":5,"\u65e5\u5fd7id":5,"\u65e7":5,"\u65f6":5,"\u65f6\u4e3a\u5fc5\u8981\u53c2\u6570":5,"\u65f6\u6307\u5b9a\u5065\u5eb7\u68c0\u67e5\u53d1\u9001\u8bf7\u6c42\u65f6\u7684\u8def\u5f84":5,"\u65f6\u6307\u5b9a\u5065\u5eb7\u68c0\u67e5\u53d1\u9001\u8bf7\u6c42\u65f6http":5,"\u65f6\u65e0\u9700\u6b64\u53c2\u6570":5,"\u65f6\u6709\u6548":5,"\u65f6\u95f4":5,"\u65f6\u95f4\u6233":5,"\u65f6\u95f4\u7c92\u5ea6":5,"\u662f":5,"\u662f\u5426\u4e3a\u9ed8\u8ba4\u7f51\u5361":5,"\u662f\u5426\u4e3a\u9ed8\u8ba4\u9879\u76ee":5,"\u662f\u5426\u4f18\u5148\u9075\u5faa\u6e90\u7ad9\u5934\u90e8\u7f13\u5b58\u7b56\u7565":5,"\u662f\u5426\u4f7f\u7528\u5f3a\u5236\u624b\u6bb5\u5173\u95eddb":5,"\u662f\u5426\u4f7f\u7528\u9ed1\u540d\u5355\u5907\u4efd":5,"\u662f\u5426\u4f7f\u7528ssd":5,"\u662f\u5426\u4fdd\u7559\u6570\u636e\u76d8":5,"\u662f\u5426\u5141\u8bb8\u591a\u70b9\u6302\u8f7d":5,"\u662f\u5426\u5220\u9664\u6302\u8f7d\u7684\u6570\u636e\u76d8":5,"\u662f\u5426\u52a0\u5bc6":5,"\u662f\u5426\u53ef\u66f4\u6539":5,"\u662f\u5426\u5b50\u5e10\u6237":5,"\u662f\u5426\u5b89\u88c5uga":5,"\u662f\u5426\u5c5e\u4e8e\u5730\u57df\u7ea7\u522b":5,"\u662f\u5426\u5f00\u542f\u5f02\u6b65\u9ad8\u53ef\u7528":5,"\u662f\u5426\u5f00\u542f\u6570\u636e\u65b9\u821f":5,"\u662f\u5426\u5f00\u542f\u65b9\u821f\u7279\u6027":5,"\u662f\u5426\u5f00\u542f\u9ad8\u53ef\u7528":5,"\u662f\u5426\u5f00\u542fpfs\u529f\u80fd":5,"\u662f\u5426\u5f3a\u5236":5,"\u662f\u5426\u5f3a\u5236\u5bfc\u51fa\u5176\u4ed6\u5269\u4f59\u6570\u636e\u9ed8\u8ba4\u662ffalse\u9700\u8981\u540c\u65f6\u8bbe\u7f6ebackupdate\u5b57\u6bb5":5,"\u662f\u5426\u5ffd\u7565\u53c2\u6570\u7f13\u5b58":5,"\u662f\u5426\u6253\u5f00\u6570\u636e\u65b9\u821f":5,"\u662f\u5426\u6388\u6743":5,"\u662f\u5426\u64cd\u4f5c\u6210\u529f":5,"\u662f\u5426\u652f\u6301\u514b\u9686":5,"\u662f\u5426\u652f\u6301\u5f00\u542f\u65b9\u821f":5,"\u662f\u5426\u652f\u6301\u5feb\u7167":5,"\u662f\u5426\u652f\u6301\u6570\u636e\u65b9\u821f":5,"\u662f\u5426\u652f\u6301\u7d27\u6025\u767b\u5f55":5,"\u662f\u5426\u652f\u6301raid":5,"\u662f\u5426\u662f\u4ef2\u88c1\u8282\u70b9":5,"\u662f\u5426\u662f\u52a0\u5bc6\u76d8":5,"\u662f\u5426\u662f\u52a0\u5bc6\u76d8\u5feb\u7167":5,"\u662f\u5426\u662f\u5730\u57df\u7ea7\u522b\u7684\u914d\u7f6e\u6587\u4ef6":5,"\u662f\u5426\u662f\u5f39\u6027\u78c1\u76d8":5,"\u662f\u5426\u662f\u5f39\u6027\u7f51\u5361":5,"\u662f\u5426\u662f\u7cfb\u7edf\u76d8":5,"\u662f\u5426\u662f\u8d22\u52a1\u8d26\u53f7":5,"\u662f\u5426\u662f\u8de8\u673a\u623furedi":5,"\u662f\u5426\u6709\u8d22\u52a1\u6743\u9650":5,"\u662f\u5426\u6709natgw":5,"\u662f\u5426\u67e5\u770b\u4e13\u533a\u91cc\u9762db":5,"\u662f\u5426\u7528\u6237\u5f53\u524d\u9ed8\u8ba4\u6570\u636e\u4e2d\u5fc3":5,"\u662f\u5426\u76f4\u63a5\u5220\u9664":5,"\u662f\u5426\u7f13\u5b58":5,"\u662f\u5426\u81ea\u52a8\u5907\u4efd":5,"\u662f\u5426\u81ea\u52a8\u7eed\u8d39":5,"\u662f\u5426\u81ea\u52a8\u9500\u6237":5,"\u662f\u5426\u8d85\u7ea7\u7ba1\u7406\u5458":5,"\u662f\u5426\u8fc7\u671f":5,"\u662f\u5426\u8fd4\u56de\u4ef7\u683c":5,"\u662f\u5426\u8fd4\u56de\u5b50\u7f51\u7684\u53ef\u7528ip\u6570":5,"\u662f\u5426\u9009\u53d6\u4e13\u533a\u4e2d\u914d\u7f6e":5,"\u662f\u5426\u91ca\u653e\u7ed1\u5b9a\u7684eip":5,"\u662f\u5426\u9501\u4e3b\u5e93":5,"\u662f\u5426\u9700\u8981\u81ea\u52a8\u5907\u4efd":5,"\u662f\u6570\u636e\u76d8":5,"\u662f\u7cfb\u7edf\u76d8":5,"\u662f\u9ed8\u8ba4\u7f51\u5361":5,"\u663e\u793a\u6570\u91cf":5,"\u663e\u793amemcach":5,"\u666e\u901a":5,"\u666e\u901a\u4e91\u4e3b\u673a":5,"\u666e\u901a\u4e91\u76d8\u7684\u7ec4\u5408\u652f\u6301\u5f00\u542f\u65b9\u821f":5,"\u666e\u901a\u5347\u7ea7\u4e3a\u65b9\u821f\u673a\u578b":5,"\u666e\u901a\u5355\u70b9\u5b9e\u4f8b":5,"\u666e\u901a\u5355\u70b9\u5b9e\u4f8bha":5,"\u666e\u901a\u5e26\u5bbd\u7c7b\u578b":5,"\u666e\u901a\u6570\u636e\u76d8":5,"\u666e\u901a\u672c\u5730\u76d8":5,"\u666e\u901a\u7248udb\u5b9e\u4f8b":5,"\u666e\u901a\u76d8":5,"\u666e\u901a\u7cfb\u7edf\u76d8":5,"\u666e\u901adb\u5347\u7ea7\u4e3a\u9ad8\u53ef\u7528":5,"\u666e\u901audb\u5207\u6362\u4e3a\u9ad8\u53ef\u7528":5,"\u6682\u4e0d\u652f\u6301":5,"\u6682\u65f6\u4e0d\u5bf9\u5916\u5f00\u653e":5,"\u6682\u65f6\u652f\u630120":5,"\u6682\u65f6\u652f\u630120g":5,"\u6682\u672a\u5bf9\u5916\u5f00\u653e":5,"\u6682\u672a\u652f\u6301":5,"\u66f4\u6539\u7269\u7406\u673a\u4fe1\u606f":5,"\u66f4\u65b0\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219":5,"\u66f4\u65b0\u4e2d":5,"\u66f4\u65b0\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219":5,"\u66f4\u65b0\u544a\u8b66\u6a21\u677f\u89c4\u5219":5,"\u66f4\u65b0\u5b50\u7f51\u4fe1\u606f":5,"\u66f4\u65b0\u5f39\u6027ip\u540d\u79f0":5,"\u66f4\u65b0\u65f6\u95f4":5,"\u66f4\u65b0\u8def\u7531\u8868\u57fa\u672c\u4fe1\u606f":5,"\u66f4\u65b0\u955c\u50cf\u4ed3\u5e93":5,"\u66f4\u65b0\u9632\u706b\u5899\u89c4\u5219":5,"\u66f4\u65b0udb\u914d\u7f6e\u53c2\u6570\u9879":5,"\u66f4\u65b0ulb\u540d\u5b57\u4e1a\u52a1\u7ec4\u5907\u6ce8\u7b49\u5c5e\u6027\u5b57\u6bb5":5,"\u66f4\u65b0ulb\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b":5,"\u66f4\u65b0vpc\u7f51\u6bb5":5,"\u66f4\u65b0vserver\u5b9e\u4f8b\u5c5e\u6027":5,"\u6700\u4f4ecpu\u5e73\u53f0":5,"\u6700\u53f3\u8fb9\u7684\u4e00\u4f4d":5,"\u6700\u53f3\u8fb9\u7684\u4e00\u4f4d\u4e3a\u661f\u671f\u5929\u7684\u5907\u4efd\u5f00\u5173":5,"\u6700\u5927100":5,"\u6700\u592710000000":5,"\u6700\u5927500000":5,"\u6700\u5927\u4e0d\u8d85\u8fc720t":5,"\u6700\u5927\u503c\u53d7\u5730\u57df\u9650\u5236":5,"\u6700\u5927\u503c\u8bf7\u53c2\u8003":5,"\u6700\u5927\u57df\u540d\u6570\u91cf":5,"\u6700\u5927\u6570\u91cf\u4e3a10\u53f0":5,"\u6700\u5c0f\u503c\u4e3a1":5,"\u6700\u5c0f\u8fde\u63a5\u6570":5,"\u6700\u5c11100":5,"\u6700\u65b0push\u7684tag":5,"\u6700\u8fd15\u5206\u949f\u5e26\u5bbd\u7528\u91cf":5,"\u6708\u4ed8\u65f6":5,"\u6708\u8303\u56f4":5,"\u6709\u56de\u6536\u7ad9\u6743\u9650":5,"\u6709\u591a\u4e2a\u53c2\u6570\u65f6":5,"\u6709\u6548":5,"\u6709\u6b64\u9879\u4ee3\u8868\u4ece\u5907\u4efd\u4e2d\u521b\u5efa":5,"\u6709\u9519\u8bef\u65f6\u8fd4\u56de\u5185\u5bb9":5,"\u670d\u52a1\u5668\u8bc1\u4e66\u5fc5\u4f20":5,"\u670d\u52a1\u5668\u8bc1\u4e66id":5,"\u670d\u52a1\u8282\u70b9":5,"\u670d\u52a1\u8282\u70b9\u6240\u5c5e\u7684":5,"\u670d\u52a1\u8282\u70b9\u6240\u5c5e\u7684\u8d1f\u8f7d\u5747\u8861":5,"\u670d\u52a1\u8282\u70b9\u66b4\u9732\u7684\u670d\u52a1\u7aef\u53e3\u53f7":5,"\u670d\u52a1\u8282\u70b9\u7684":5,"\u670d\u52a1\u8282\u70b9\u7684\u5185\u7f51":5,"\u670d\u52a1\u8282\u70b9\u7684\u6743\u91cd":5,"\u670d\u52a1\u8282\u70b9\u7684\u8d44\u6e90":5,"\u670d\u52a1\u8282\u70b9\u7684\u8d44\u6e90\u540d\u79f0":5,"\u672a\u5206\u7ec4\u663e\u793a\u4e3a":5,"\u672a\u542f\u7528":5,"\u672a\u5f00\u542f\u65b9\u821f":5,"\u672a\u5f00\u542f\u70ed\u5347\u7ea7":5,"\u672a\u652f\u6301":5,"\u672a\u77e5":5,"\u672a\u7ed1\u5b9a":5,"\u672a\u8fc7\u671f":5,"\u672a\u9009\u62e9\u8ba1\u8d39\u65b9\u5f0f":5,"\u672c\u5730\u666e\u901a\u76d8\u652f\u63010":5,"\u672c\u5730\u76d8":5,"\u672c\u5730\u78c1\u76d8":5,"\u672c\u5730ssd\u76d8":5,"\u672c\u6b21\u63d0\u4ea4\u53d1\u9001\u7684\u77ed\u4fe1\u7684\u552f\u4e00id":5,"\u672c\u6b21\u63d0\u4ea4url\u5bf9\u5e94\u7684\u4efb\u52a1id":5,"\u672c\u6b21\u6700\u5927\u521b\u5efa\u4e3b\u673a\u6570\u91cf":5,"\u673a\u5173\u4e8b\u4e1a\u5355\u4f4d":5,"\u673a\u578b":5,"\u673a\u578b\u522b\u540d":5,"\u673a\u578b\u7531\u5e73\u53f0\u7ba1\u7406\u5458\u4fee\u6539\u548c\u6307\u5b9a":5,"\u673a\u623f\u5730\u57df\u4ee3\u53f7":5,"\u6743\u91cd":5,"\u6743\u91cd\u6700\u5927\u7684\u4e3a\u5f53\u524d\u7684\u51fa\u53e3ip":5,"\u6743\u9650\u4f4d\u63a7\u5236\u53ef\u8fbe8000":5,"\u6743\u9650\u4f4d\u63a7\u5236\u53ef\u8fbe8t":5,"\u6765\u6e90\u4e8e":5,"\u679a\u4e3e\u4e3a":5,"\u679a\u4e3e\u503c":5,"\u679a\u4e3e\u503c\u4e3a":5,"\u679a\u4e3e\u7c7b\u578b":5,"\u67b6\u6784":5,"\u67b6\u6784\u540d\u79f0":5,"\u67e5\u8be2\u4e3b\u5907redi":5,"\u67e5\u8be2\u4e3b\u5907redis\u5907\u4efd":5,"\u67e5\u8be2\u4e3b\u673a\u673a\u578b":5,"\u67e5\u8be2\u5230\u7684\u603b\u6570\u91cf":5,"\u67e5\u8be2\u533a\u57df":5,"\u67e5\u8be2\u56de\u6536\u7ad9\u8d44\u6e90":5,"\u67e5\u8be2\u5b50\u7f51\u4fe1\u606f":5,"\u67e5\u8be2\u5b58\u50a8\u7c7b\u578b":5,"\u67e5\u8be2\u5b89\u5168\u7ec4\u4fe1\u606f":5,"\u67e5\u8be2\u5e26\u5bbd\u533a\u57df":5,"\u67e5\u8be2\u64cd\u4f5c\u65e5\u5fd7":5,"\u67e5\u8be2\u67d0\u4e00\u4e2a\u7c7b\u578bdb":5,"\u67e5\u8be2\u6bcf\u65e5\u6d41\u91cf\u603b\u503c":5,"\u67e5\u8be2\u6d41\u91cf\u533a\u57df":5,"\u67e5\u8be2\u7684\u7ed3\u675f\u65f6\u95f4":5,"\u67e5\u8be2\u7684\u8d77\u59cb\u65f6\u95f4":5,"\u67e5\u8be2\u786c\u4ef6\u9694\u79bb\u7ec4\u5217\u8868":5,"\u67e5\u8be2\u79df\u6237\u4fe1\u606f":5,"\u67e5\u8be2\u7c92\u5ea6":5,"\u67e5\u8be2\u865a\u62df\u673a":5,"\u67e5\u8be2\u8bc1\u4e66":5,"\u67e5\u8be2vpc\u4fe1\u606f":5,"\u6807\u51c6\u4e3b\u5907\u7248":5,"\u6807\u51c6\u5927\u5bb9\u91cf\u673a\u578b":5,"\u6807\u51c6\u673a\u578b":5,"\u6807\u51c6\u955c\u50cf":5,"\u6807\u8bc6\u6b20\u8d39\u7684\u6570\u7ec4":5,"\u6807\u8bc6\u865a\u62df\u673a":5,"\u6838\u67e5\u5931\u8d25\u4e0d\u8fd4\u56de":5,"\u6838\u67e5\u6210\u529f\u8fd4\u56de\u503c\u4e3a\u53ef\u4ee5\u56de\u6863\u5230\u7684\u6700\u8fd1\u65f6\u523b":5,"\u6838\u67e5db\u662f\u5426\u53ef\u4ee5\u4f7f\u7528\u56de\u6863\u529f\u80fd":5,"\u6838\u67e5db\u662f\u5426\u53ef\u4ee5\u5347\u7ea7\u4e3a\u9ad8\u53ef\u7528":5,"\u6839\u636e\u4e00\u5f20\u73b0\u6709\u8def\u7531\u8868\u590d\u5236\u4e00\u5f20\u65b0\u7684\u8def\u7531\u8868":5,"\u6839\u636e\u53c2\u6570\u7c7b\u578b":5,"\u6839\u636e\u63d0\u4f9b\u4fe1\u606f":5,"\u6839\u636e\u8d44\u6e90\u4f7f\u7528\u91cf\u521b\u5efa\u6307\u5b9a\u6570\u91cf\u7684uphost\u7269\u7406\u4e91\u4e3b\u673a\u5b9e\u4f8b":5,"\u6839\u636e\u8fc7\u6ee4\u6761\u4ef6\u5f97\u5230\u7684\u603b\u6570":5,"\u6839\u636emonitortype\u786e\u8ba4":5,"\u6839\u636epersistencetype\u786e\u5b9a":5,"\u6839\u636epersistencetype\u786e\u8ba4":5,"\u6839\u636euhost\u5b9e\u4f8b\u914d\u7f6e":5,"\u683c\u5f0f":5,"\u683c\u5f0f\u4e3a":5,"\u683c\u5f0f\u4e3a\u533a\u57df\u822a\u7a7a\u6e2f\u56fd\u9645\u901a\u7528\u4ee3\u7801":5,"\u683c\u5f0f\u4e3ahttp":5,"\u683c\u5f0f\u4e3aunix":5,"\u683c\u5f0f\u4e3aunix\u65f6\u95f4\u6233":5,"\u68c0\u67e5":5,"\u68c0\u67e5\u65f6\u4e3a\u5fc5\u586b\u9879":5,"\u6a21\u578b\u5b9a\u4e49":5,"\u6a21\u677f\u4e2d\u7684\u53d8\u91cf\u586b\u5199\u683c\u5f0f":5,"\u6a21\u677f\u53c2\u6570\u4e2a\u6570\u4e0e\u6a21\u677f\u4e0d\u5339\u914d":5,"\u6a21\u677f\u53c2\u6570\u6570\u7ec4":5,"\u6a21\u677f\u540d\u79f0\u548c\u6a21\u677f\u5185\u5bb9\u5fc5\u987b\u63d0\u4f9b\u4e00\u4e2a":5,"\u6a21\u677f\u7c7b\u578b":5,"\u6a21\u677f\u8bf4\u660e":5,"\u6a21\u677fid":5,"\u6b63\u5728\u5904\u7406":5,"\u6b63\u5728\u88ab\u514b\u9686\u4e2d":5,"\u6b63\u5e38":5,"\u6b64\u53c2\u6570\u4f200":5,"\u6b64\u53c2\u6570\u5fc5\u586b":5,"\u6b64\u5904\u586b\u5199\u8f6c\u6362\u540e\u7684\u5b57\u7b26\u4e32":5,"\u6b64\u5904\u8fd4\u56de\u548cbasicimagename\u4e00\u81f4":5,"\u6b64\u5b57\u6bb5\u4e3a\u7a7a":5,"\u6b64\u5b57\u6bb5\u4f20\u5165\u81ea\u5b9a\u4e49\u4f1a\u8bdd\u4fdd\u6301string":5,"\u6b64\u5b57\u6bb5\u5c55\u793a\u7528\u6237\u81ea\u5b9a\u4e49\u4f1a\u8bddstring":5,"\u6b64\u5b57\u6bb5\u65e0\u610f\u4e49":5,"\u6b64\u65f6setid\u4e3a\u5fc5\u586b":5,"\u6b65\u957f":5,"\u6b65\u957f10":5,"\u6b65\u957f\u4e3a10":5,"\u6bb5\u5f62\u5f0f":5,"\u6bcf\u4e00\u4f4d\u4e3a\u4e00\u5468\u4e2d\u4e00\u5929\u7684\u5907\u4efd\u60c5\u51b5":5,"\u6bcf\u4e2a\u4e2d\u6587":5,"\u6bcf\u4e2a\u6c49\u5b57":5,"\u6bcf\u4e2a\u8282\u70b9\u7684\u5185\u5b58\u5927\u5c0f":5,"\u6bcf\u5468\u5907\u4efd\u6570\u91cf":5,"\u6bcf\u5468\u5fc5\u987b\u81f3\u5c11\u8bbe\u7f6e\u4e24\u5929\u5907\u4efd":5,"\u6bcf\u6b21\u83b7\u53d6\u6570\u91cf":5,"\u6bcf\u79cd\u6587\u4ef6\u7684\u503c\u5982\u4e0b":5,"\u6bd4\u5982":5,"\u6bd4\u598210":5,"\u6bd4\u5982cento":5,"\u6bd4\u5982local":5,"\u6bd4\u5982uvnet":5,"\u6ca1\u6709\u7c92\u5ea6":5,"\u6ca1\u6709slave":5,"\u6cc9\u5dde\u4e3a\u79fb\u52a8\u5355\u7ebfcn":5,"\u6cd5\u5170\u514b\u798f":5,"\u6ce8\u610f":5,"\u6ce8\u610f\u53ea\u6709ssd\u7248\u672c\u7684mysql\u5b9e\u4f8b\u652f\u6301\u8bbe\u7f6e\u4e3asnapshot":5,"\u6ce8\u610f\u73b0\u5728\u53ea\u6709ssd":5,"\u6d1b\u6749\u77f6":5,"\u6d1b\u6749\u77f6\u7b49":5,"\u6d3b\u8dc3\u7684\u96a7\u9053\u6570\u91cf":5,"\u6d3b\u8dc3\u7684\u96a7\u9053id":5,"\u6d41\u91cf\u4ed8\u8d39":5,"\u6d41\u91cf\u547d\u4e2d\u7387":5,"\u6d41\u91cf\u83b7\u53d6\u7684\u65f6\u95f4\u70b9":5,"\u6d41\u91cf\u8ba1\u8d39":5,"\u6d41\u91cf\u8ba1\u8d39\u6a21\u5f0f":5,"\u6d4b\u8bd5url":5,"\u6d77\u5916\u673a\u623f":5,"\u6d88\u8017\u77ed\u4fe1\u6761\u6570":5,"\u6dfb\u52a0":5,"\u6dfb\u52a0\u540e\u7aef\u670d\u52a1\u8282\u70b9":5,"\u6dfb\u52a0\u7684\u767d\u540d\u5355\u8d44\u6e90\u540d\u79f0":5,"\u6dfb\u52a0\u7684routeruleid\u586b\u4efb\u610f\u975e\u7a7a\u5b57\u7b26\u4e32":5,"\u6dfb\u52a0\u7f51\u6bb5\u8bf7\u53c2\u8003":5,"\u6dfb\u52a0nat\u7f51\u5173\u767d\u540d\u5355":5,"\u6dfb\u52a0ulb\u540e\u7aef\u8d44\u6e90\u5b9e\u4f8b":5,"\u6dfb\u52a0vpc\u7f51\u6bb5":5,"\u6e05\u9664udb\u5b9e\u4f8b\u7684log":5,"\u6e20\u9053ucdn":5,"\u6e90\u53c2\u6570\u7ec4id":5,"\u6e90\u5730\u5740":5,"\u6e90\u5b9e\u4f8b\u7684id":5,"\u6e90\u786c\u76d8id":5,"\u6e90\u7ad9\u534f\u8baehttp":5,"\u6e90\u7ad9ip\u5373cdn\u670d\u52a1\u5668\u56de\u6e90\u8bbf\u95ee\u7684ip\u5730\u5740":5,"\u6e90\u955c\u50cfid":5,"\u6e90vpc\u6240\u5728\u5730\u57df":5,"\u6e90vpc\u6240\u5728\u9879\u76eeid":5,"\u6e90vpc\u77edid":5,"\u6ee1\u8db3\u6761\u4ef6\u5907\u4efd\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u57df\u540d\u4e2a\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u5e26\u5bbd\u5305\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u5f39\u6027ip\u5e26\u5bbd\u603b\u548c":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u5f39\u6027ip\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684\u955c\u50cf\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684phost\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684ssl\u8bc1\u4e66\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684ulb\u603b\u6570":5,"\u6ee1\u8db3\u6761\u4ef6\u7684vserver\u603b\u6570":5,"\u70ed\u5347\u7ea7":5,"\u70ed\u5347\u7ea7\u7279\u6027":5,"\u70ed\u5907":5,"\u7236\u9879\u76ee\u540d\u79f0":5,"\u7236\u9879\u76eeid":5,"\u7248\u672c\u7684":5,"\u7269\u7406\u4e91\u4e3b\u673a":5,"\u7269\u7406\u4e91\u4e3b\u673a\u72b6\u6001":5,"\u7269\u7406\u5907\u4efd":5,"\u7269\u7406\u5907\u4efd\u6b64\u53c2\u6570\u65e0\u6548":5,"\u7269\u7406\u673a":5,"\u7269\u7406\u673a\u540d\u79f0":5,"\u7269\u7406\u673a\u5907\u6ce8":5,"\u7269\u7406\u673a\u5e8f\u5217\u53f7":5,"\u7269\u7406\u673a\u7c7b\u578b":5,"\u7269\u7406\u673a\u8d44\u6e90id":5,"\u7269\u7406ip":5,"\u7269\u7406ip\u540d\u79f0":5,"\u7269\u7406ip\u7684":5,"\u7269\u7406ip\u7684id":5,"\u7269\u7406ip\u7ebf\u8def":5,"\u7279\u6b8a\u72b6\u6001\u6807\u8bc6":5,"\u7279\u6b8a\u7b26\u53f7":5,"\u72b6\u6001":5,"\u72b6\u6001\u6807\u8bb0":5,"\u72b6\u6001\u7684\u5b50\u7f51":5,"\u72b6\u6001\u7684\u5b89\u5168\u7ec4\u7684id":5,"\u72b6\u6001\u7684id":5,"\u72b6\u6001\u7684vpc":5,"\u72b6\u6001\u7801":5,"\u72b6\u6001\u7801\u9ed8\u8ba4\u60c5\u51b5\u53ea\u7f13\u5b58200\u7c7b\u72b6\u6001\u7801":5,"\u72b6\u6001\u8bf4\u660e":5,"\u73b0\u4ef7":5,"\u751f\u6210\u81ea\u5b9a\u4e49\u955c\u50cf":5,"\u751f\u6548\u65f6\u95f4":5,"\u7528":5,"\u7528\u4e8e\u57df\u540d\u521b\u5efa\u52a0\u901f\u65f6\u7684\u6d4b\u8bd5":5,"\u7528\u4e8e\u63a7\u5236\u663e\u793a\u54ea\u4e9b\u673a\u623f\u5730\u57df\u53ef\u4ee5\u4f7f\u7528ssh\u7279\u6027":5,"\u7528\u4e8e\u8bbe\u7f6ecname\u8bb0\u5f55":5,"\u7528\u4e8e\u8bc1\u660e\u670d\u52a1\u5668\u7684\u8eab\u4efd":5,"\u7528\u4e8e\u9a8c\u8bc1\u5ba2\u6237\u7aef\u8bc1\u4e66\u7684\u7b7e\u540d":5,"\u7528\u5206\u9694\u7b26\u8868\u793a":5,"\u7528\u5355\u5f15\u53f7\u5305\u542b":5,"\u7528\u6237\u521b\u5efa\u52a0\u901f\u7684\u57df\u540d":5,"\u7528\u6237\u521d\u59cb\u5316\u811a\u672c":5,"\u7528\u6237\u53ef\u901a\u8fc7\u6307\u5b9a\u64cd\u4f5c\u7cfb\u7edf\u7c7b\u578b":5,"\u7528\u6237\u540d\u4e0b\u603b\u7684\u5907\u4efd\u4e2a\u6570":5,"\u7528\u6237\u5728\u6b64\u6570\u636e\u4e2d\u5fc3\u7684\u6743\u9650\u4f4d":5,"\u7528\u6237\u624b\u673a":5,"\u7528\u6237\u6298\u540e\u4ef7":5,"\u7528\u6237\u72b6\u6001":5,"\u7528\u6237\u7684\u8bc1\u4e66":5,"\u7528\u6237\u7ec4":5,"\u7528\u6237\u81ea\u5b9a\u4e49":5,"\u7528\u6237\u81ea\u5b9a\u4e49\u6570\u636e":5,"\u7528\u6237\u81ea\u5b9a\u4e49\u9632\u706b\u5899":5,"\u7528\u6237\u81ea\u5b9a\u4e49kei":5,"\u7528\u6237\u90ae\u7bb1":5,"\u7528\u6237db\u7ec4\u7684\u6570\u91cf":5,"\u7528\u6237id":5,"\u7528\u9017\u53f7\u5206\u9694":5,"\u7533\u8bf7\u4e2d":5,"\u7533\u8bf7\u5185\u7f51vip":5,"\u7533\u8bf7\u5230\u7684":5,"\u7533\u8bf7\u5230\u7684eip\u8d44\u6e90id":5,"\u7533\u8bf7\u5230\u7684vip\u5730\u5740":5,"\u7533\u8bf7\u5916\u7f51ip":5,"\u7533\u8bf7\u5f39\u6027ip":5,"\u7533\u8bf7\u6570\u91cf":5,"\u7533\u8bf7\u7684eip\u7684id":5,"\u7535\u4fe1":5,"\u7535\u6e90\u72b6\u6001":5,"\u7535\u8bdd\u53f7\u7801\u6570\u7ec4":5,"\u7535\u8bdd\u53f7\u7801\u683c\u5f0f\u4e3a":5,"\u7559\u7a7a\u8fd4\u56de\u5168\u90e8":5,"\u7626\u8138\u7b56\u7565":5,"\u767b\u5f55\u5bc6\u7801":5,"\u767d\u540d\u5355\u8d44\u6e90\u7684\u5185\u7f51ip\u5730\u5740":5,"\u767d\u540d\u5355id":5,"\u7684\u4e3b\u673a1":5,"\u7684\u63cf\u8ff0\u4fee\u6539\u4e3a":5,"\u7684\u6574\u6570":5,"\u7684\u76d1\u542c\u534f\u8bae":5,"\u7684\u76d1\u542c\u534f\u8bae\u4e3a":5,"\u7684\u76d1\u542c\u7aef\u53e3":5,"\u7684\u7c7b\u578b":5,"\u7684\u865a\u62df\u673a\u8d44\u6e90":5,"\u7684\u8d44\u6e90\u72b6\u6001":5,"\u7684\u8d44\u6e90id":5,"\u7684id":5,"\u76d1\u542c\u5668\u6240\u5c5e\u7684\u8d1f\u8f7d\u5747\u8861":5,"\u76d1\u542c\u5668\u7c7b\u578b":5,"\u76d1\u542c\u7aef\u53e3":5,"\u76d1\u63a7\u503c":5,"\u76d1\u63a7\u6307\u6807":5,"\u76d1\u63a7\u6307\u6807\u540d\u79f0":5,"\u76d1\u63a7\u65f6\u95f4":5,"\u76ee\u524d\u4e3b\u8981\u53ef\u7528\u533a":5,"\u76ee\u524d\u4ec5\u652f\u63011":5,"\u76ee\u524d\u4ec5\u652f\u6301\u9ed8\u8ba4\u914d\u7f6eid":5,"\u76ee\u524d\u4ec5\u652f\u6301normal":5,"\u76ee\u524d\u4ec5\u9009\u62e9\u666e\u901a\u672c\u5730\u76d8":5,"\u76ee\u524d\u4ec5\u90e8\u5206\u53ef\u7528\u533a\u652f\u6301":5,"\u76ee\u524d\u5305\u542bnetenhnc":5,"\u76ee\u524d\u53ea\u652f\u6301pem\u683c\u5f0f":5,"\u76ee\u524d\u53ea\u80fd\u8f93\u5165\u6570\u636e\u5e93\u914d\u7f6e\u6307\u5b9a\u89c4\u683c\u53c2\u6570":5,"\u76ee\u524d\u652f\u6301":5,"\u76ee\u524d\u652f\u6301\u4ee5\u4e0b\u51e0\u6863":5,"\u76ee\u524d\u652f\u6301bgp":5,"\u76ee\u524d\u652f\u6301n1":5,"\u76ee\u524did\u7684\u53d6\u503c\u8303\u56f4\u4e3a":5,"\u76ee\u5f55\u8981\u4ee5":5,"\u76ee\u6807\u5730\u57df":5,"\u76ee\u6807\u7aef\u53e3":5,"\u76ee\u6807\u955c\u50cf\u540d\u79f0":5,"\u76ee\u6807\u955c\u50cf\u63cf\u8ff0":5,"\u76ee\u6807\u955c\u50cfid":5,"\u76ee\u6807\u9879\u76eeid":5,"\u76ee\u7684\u5730\u5740":5,"\u76ee\u7684\u7f51\u6bb5":5,"\u76ee\u7684\u9879\u76eeid":5,"\u76ee\u7684vpc\u6240\u5728\u5730\u57df":5,"\u76ee\u7684vpc\u6240\u5728\u9879\u76eeid":5,"\u76ee\u7684vpc\u77edid":5,"\u76ee\u7684vpc\u9879\u76eeid":5,"\u76f4\u63a5\u5173\u95eduhost\u5b9e\u4f8b\u7535\u6e90":5,"\u76f8\u540c":5,"\u7701\u4efd":5,"\u771f\u5b9e\u4e3b\u673aip":5,"\u77ed\u4fe1\u5b57\u6570\u8d85\u8fc770\u4e2a\u540e":5,"\u77ed\u4fe1\u6700\u5927\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7600\u4e2a\u5b57":5,"\u77ed\u4fe1\u6a21\u677f\u5185\u5bb9":5,"\u77ed\u4fe1\u6a21\u677f\u540d\u79f0":5,"\u77ed\u4fe1\u6a21\u677f\u72b6\u6001":5,"\u77ed\u4fe1\u6a21\u677f\u7528\u9014\u7c7b\u578b":5,"\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u539f\u56e0\u8bf4\u660e":5,"\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u77ed\u4fe1\u6a21\u677f\u7981\u6b62\u4ec5\u5305\u62ec\u53d8\u91cf\u7684\u60c5\u51b5":5,"\u77ed\u4fe1\u6a21\u677fid":5,"\u77ed\u4fe1\u7b7e\u540d\u540d\u79f0":5,"\u77ed\u4fe1\u7b7e\u540d\u6388\u6743\u59d4\u6258\u6587\u4ef6":5,"\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u539f\u56e0":5,"\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u65f6\u7684\u5de5\u5355id":5,"\u77ed\u4fe1\u7b7e\u540d\u7684\u8d44\u8d28\u8bc1\u660e\u6587\u4ef6":5,"\u77ed\u4fe1\u7b7e\u540did":5,"\u786c\u4ef6\u9694\u79bb\u7ec4\u540d\u79f0":5,"\u786c\u4ef6\u9694\u79bb\u7ec4id":5,"\u786c\u76d8":5,"\u786c\u76d8\u5347\u7ea7\u540e\u7684\u5bb9\u91cf":5,"\u786c\u76d8\u72b6\u6001":5,"\u786c\u76d8\u8ba1\u8d39\u6a21\u5f0f":5,"\u786c\u76d8id":5,"\u78c1\u76d8":5,"\u78c1\u76d8\u540d\u79f0":5,"\u78c1\u76d8\u5907\u4efd\u65b9\u6848":5,"\u78c1\u76d8\u5927\u5c0f":5,"\u78c1\u76d8\u5c5e\u6027":5,"\u78c1\u76d8\u6570\u91cf":5,"\u78c1\u76d8\u662f\u5426\u52a0\u5bc6":5,"\u78c1\u76d8\u7684":5,"\u78c1\u76d8\u76d8\u7b26":5,"\u78c1\u76d8\u7a7a\u95f4":5,"\u78c1\u76d8\u7a7a\u95f4\u5927\u5c0f":5,"\u78c1\u76d8\u7c7b\u578b":5,"\u78c1\u76d8id":5,"\u78c1\u76d8io\u6027\u80fd":5,"\u793a\u4f8b":5,"\u793e\u4f1a\u4fe1\u7528\u4ee3\u7801\u8bc1\u4e66":5,"\u7981\u7528":5,"\u7981\u752822\u7aef\u53e3":5,"\u7981\u7528\u4e2d":5,"\u7981\u7528\u8d1f\u8f7d\u5747\u8861\u7684\u5355\u4e2a\u670d\u52a1\u8282\u70b9":5,"\u79c1\u6709\u4e13\u533a\u4e3b\u673a":5,"\u79c1\u94a5":5,"\u79c1\u94a5\u5185\u5bb9":5,"\u79d2":5,"\u79df\u6237\u540d\u79f0":5,"\u79df\u6237\u7684":5,"\u79df\u6237\u7684\u8d26\u6237id":5,"\u79df\u6237id":5,"\u79f0\u547c":5,"\u79fb\u51fa\u5171\u4eab\u5e26\u5bbd\u540e":5,"\u79fb\u9664\u8d1f\u8f7d\u5747\u8861\u7684\u5355\u4e2a\u670d\u52a1\u8282\u70b9":5,"\u7a7a\u95f2\u8fde\u63a5\u7684\u56de\u6536\u65f6\u95f4":5,"\u7a7a\u95f4\u540d\u79f0":5,"\u7a7a\u95f4\u7c7b\u578b":5,"\u7aef\u53e3":5,"\u7aef\u53e3\u53f7":5,"\u7aef\u53e3\u68c0\u67e5":5,"\u7aef\u53e3\u8303\u56f4\u4e3a":5,"\u7b26\u53f7":5,"\u7b26\u5408\u6761\u4ef6\u7684\u5171\u4eab\u5e26\u5bbd\u603b\u6570":5,"\u7b26\u5408\u6761\u4ef6\u7684\u5ba2\u6237vpn\u7f51\u5173\u603b\u6570":5,"\u7b26\u5408\u90fd\u8ba1\u4e3a\u4e00\u4e2a\u5b57":5,"\u7b2c\u4e00\u4e2a\u53c2\u6570\u4ee3\u8868\u534f\u8bae":5,"\u7b2c\u4e09\u4e2a\u53c2\u6570\u4e3aip":5,"\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4ee3\u8868\u7aef\u53e3\u53f7":5,"\u7b2c\u4e94\u4e2a\u53c2\u6570\u4f18\u5148\u7ea7":5,"\u7b2c\u516d\u4e2a\u53c2\u6570\u4e3a\u8be5\u6761\u89c4\u5219\u7684\u81ea\u5b9a\u4e49\u5907\u6ce8":5,"\u7b2c\u56db\u4e2a\u53c2\u6570\u4e3aaccept":5,"\u7b2cn\u4e2a\u7f51\u5361\u5bf9\u5e94\u7684ipv6\u5730\u5740":5,"\u7b2cn\u5757\u7f51\u5361\u4e2dipv6\u5bf9\u5e94\u7684\u5171\u4eab\u5e26\u5bbdid":5,"\u7b49":5,"\u7b49\u5b57\u6837":5,"\u7b49\u5f85\u5904\u7406":5,"\u7b7e\u540d\u5185\u5bb9":5,"\u7b7e\u540d\u5ba1\u6838\u5931\u8d25\u539f\u56e0":5,"\u7b7e\u540d\u72b6\u6001":5,"\u7b7e\u540d\u7528\u9014":5,"\u7b7e\u540d\u7684\u8d44\u8d28\u8bc1\u660e\u6587\u4ef6\u7c7b\u578b":5,"\u7b7e\u540d\u7c7b\u578b":5,"\u7b7e\u540did":5,"\u7b7e\u540did\u548c\u7b7e\u540d\u81f3\u5c11\u9700\u586b\u51991\u9879":5,"\u7ba1\u7406\u5458":5,"\u7ba1\u7406\u5458\u5bc6\u7801":5,"\u7ba1\u7406\u5458\u5e10\u6237\u540d":5,"\u7ba1\u7406\u5458\u6dfb\u52a0\u8d26\u53f7":5,"\u7ba1\u7406\u5458\u7ed9\u79df\u6237\u5145\u503c":5,"\u7c7b\u578b":5,"\u7cbe\u786e\u5230\u5c0f\u6570\u70b9\u540e2\u4f4d":5,"\u7cfb\u7edf\u4f1a\u81ea\u52a8\u6dfb\u52a0":5,"\u7cfb\u7edf\u540d\u79f0":5,"\u7cfb\u7edf\u5927\u5c0f":5,"\u7cfb\u7edf\u76d8":5,"\u7cfb\u7edf\u76d8\u4e0d\u652f\u6301\u7f29\u5bb9":5,"\u7cfb\u7edf\u76d8\u5927\u5c0f":5,"\u7cfb\u7edf\u76d8\u72b6\u6001":5,"\u7cfb\u7edf\u76d8\u7c7b\u578b":5,"\u7cfb\u7edf\u7c7b\u578b":5,"\u7cfb\u7edf\u901a\u77e5\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u7ebf\u8def":5,"\u7ebf\u8def\u5e26\u5bbd\u4e0a\u9650":5,"\u7ebf\u8def\u76f8\u5173\u4fe1\u606f\u53ca\u7269\u7406\u7f51\u7edc\u8054\u901a\u6027":5,"\u7ec4\u4ef6\u4fe1\u606f":5,"\u7ec4\u540d\u79f0":5,"\u7ec4\u7684\u603b\u7684\u8282\u70b9\u4e2a\u6570":5,"\u7ec4\u7684id":5,"\u7ec4\u7ec7\u673a\u6784\u4ee3\u7801\u8bc1\u4e66":5,"\u7ec4\u81ea\u52a8\u5907\u4efd\u5f00\u59cb\u65f6\u95f4":5,"\u7ec4id":5,"\u7ed1\u5b9a\u4e2d":5,"\u7ed1\u5b9a\u4e86\u8be5\u8def\u7531\u8868\u7684\u5b50\u7f51\u6570\u91cf":5,"\u7ed1\u5b9a\u544a\u8b66\u6a21\u677f":5,"\u7ed1\u5b9a\u544a\u8b66\u6a21\u677f\u5931\u8d25\u53ea\u4f1a\u5728\u540e\u53f0\u6709\u65e5\u5fd7":5,"\u7ed1\u5b9a\u5b50\u7f51\u7684\u8def\u7531\u8868":5,"\u7ed1\u5b9a\u5b89\u5168\u7ec4":5,"\u7ed1\u5b9a\u7269\u7406":5,"\u7ed1\u5b9a\u7684\u5171\u4eab\u5e26\u5bbdid":5,"\u7ed1\u5b9a\u7684\u865a\u62df\u673a\u8d44\u6e90id":5,"\u7ed1\u5b9a\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u7ed1\u5b9a\u7684\u8d44\u6e90id":5,"\u7ed1\u5b9a\u786c\u76d8":5,"\u7ed1\u5b9a\u8be5\u9632\u706b\u5899\u7684\u8d44\u6e90id":5,"\u7ed1\u5b9a\u8d44\u6e90\u603b\u6570":5,"\u7ed1\u5b9a\u8d44\u6e90\u7684\u7c7b\u578b":5,"\u7ed1\u5b9a\u8d44\u6e90\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u7ed1\u5b9a\u8d44\u6e90\u7c7b\u578b":5,"\u7ed1\u5b9a\u8d44\u6e90id":5,"\u7ed1\u5b9a\u9632\u706b\u5899\u7ec4\u7684\u8d44\u6e90\u7c7b\u578b":5,"\u7ed1\u5b9a\u9632\u706b\u5899\u7ec4\u7684\u8d44\u6e90id":5,"\u7ed1\u5b9aucoudstack\u5916\u7f51ip":5,"\u7ed3\u5c3e":5,"\u7ed3\u675f\u65f6\u95f4":5,"\u7eed\u8d39\u56de\u6536\u7ad9\u8d44\u6e90":5,"\u7f13\u5b58":5,"\u7f13\u5b58\u65f6\u95f4":5,"\u7f13\u5b58\u65f6\u95f4\u7684\u5355\u4f4d":5,"\u7f13\u5b58\u89c4\u5219\u63cf\u8ff0":5,"\u7f13\u5b58host":5,"\u7f16\u7801":5,"\u7f16\u8f91udb\u5b9e\u4f8b\u7684\u5907\u4efd\u9ed1\u540d\u5355":5,"\u7f3a\u7701\u503c":5,"\u7f3a\u7701\u503c\u4e3a":5,"\u7f51\u5361":5,"\u7f51\u5361\u5347\u964d\u7ea7":5,"\u7f51\u5361id":5,"\u7f51\u6bb5":5,"\u7f51\u7ad9\u540d\u79f0":5,"\u7f51\u7edc\u589e\u5f3a":5,"\u7f51\u7edc\u589e\u5f3a1":5,"\u7f51\u7edc\u589e\u5f3a2":5,"\u7f51\u7edc\u589e\u5f3a\u7279\u6027":5,"\u7f51\u7edc\u589e\u5f3a\u7b49":5,"\u7f51\u7edc\u72b6\u6001":5,"\u7f51\u7edc\u73af\u5883":5,"\u7f51\u7edc\u76d8":5,"\u7f51\u7edcid":5,"\u8054\u901a":5,"\u81ea\u5236\u955c\u50cf":5,"\u81ea\u5236\u955c\u50cfid":5,"\u81ea\u52a8":5,"\u81ea\u52a8\u5206\u914d":5,"\u81ea\u52a8\u5907\u4efd\u5f00\u59cb\u65f6\u95f4":5,"\u81ea\u52a8\u751f\u6210":5,"\u81ea\u52a8\u751f\u6210kei":5,"\u81ea\u52a8\u7eed\u8d39":5,"\u81ea\u52a8\u9009\u62e9\u52a0\u5bc6\u76d8":5,"\u81ea\u5b9a\u4e49\u955c\u50cf":5,"\u81ea\u7136\u6570":5,"\u81ea\u7528":5,"\u81f3\u5c116\u4f4d":5,"\u81f3\u5c11\u524d\u4e00\u5929":5,"\u8282\u70b9\u5206\u914d\u7684\u670d\u52a1\u7aef\u53e3":5,"\u8282\u70b9\u6a21\u5f0f":5,"\u8282\u70b9\u7684\u865a\u62dfip\u5730\u5740":5,"\u8282\u70b9\u7684\u914d\u7f6eid":5,"\u82e5\u4e0d\u4f20\u503c":5,"\u82e5\u4e0d\u4f20\u5165\u56fd\u9645\u533a\u53f7":5,"\u82e5\u4e0d\u586b\u5199":5,"\u82e5\u4e0d\u6307\u5b9a\u5219\u8fd4\u56de\u5f53\u524d\u6570\u636e\u4e2d\u5fc3\u4e2d\u6240\u6709\u7684\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u82e5\u4e0d\u6307\u5b9a\u5219\u8fd4\u56de\u5f53\u524d\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u4e0b\u6240\u6709vserver\u7684\u4fe1\u606f":5,"\u82e5\u4e3a\u7a7a":5,"\u82e5\u586b\u5199":5,"\u82e5\u5bfc\u5165\u63a7\u5236\u53f0\u4e0a\u6ca1\u6709\u7684\u64cd\u4f5c\u7cfb\u7edf":5,"\u82e5\u5f00\u901a\u4e86\u6570\u636e\u65b9\u821f":5,"\u82e5\u6307\u5b9a\u5219\u8fd4\u56de\u4e1a\u52a1\u7ec4\u4e0b\u6240\u6709\u5ba2\u6237vpn\u7f51\u5173\u4fe1\u606f":5,"\u82e5\u6307\u5b9a\u5219\u8fd4\u56de\u6307\u5b9a\u7684\u4e1a\u52a1\u7ec4\u4e0b\u7684\u6240\u6709vpn\u7f51\u5173\u7684\u4fe1\u606f":5,"\u82e5\u6307\u5b9a\u5219\u8fd4\u56de\u6307\u5b9a\u7684\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u82e5\u6307\u5b9a\u5219\u8fd4\u56de\u6307\u5b9a\u7684vserver\u5b9e\u4f8b\u7684\u4fe1\u606f":5,"\u82e5\u6307\u5b9a\u7684\u6a21\u677fid\u5ba1\u6838\u672a\u901a\u8fc7":5,"\u82e5\u65e0\u6b64\u5b57\u6bb5\u5219\u4e0d\u505a\u4fee\u6539":5,"\u82e5\u6a21\u677fid\u6307\u5b9a\u7684\u6a21\u677f\u65e0\u53ef\u53d8\u53c2\u6570":5,"\u82e5\u6ca1\u6709\u7533\u8bf7\u9ed8\u8ba4\u7b7e\u540d\u4e0d\u5141\u8bb8\u53d1\u9001":5,"\u82e5\u76f4\u63a5\u901a\u8fc7\u57fa\u7840\u955c\u50cf\u521b\u5efa":5,"\u82e5\u7ed1\u5b9aeip":5,"\u82e5\u8be5\u503c\u4e3a\u7a7a":5,"\u82e5\u8d85\u8fc712\u5c0f\u65f6\u672a\u8fd4\u56de":5,"\u82e5\u8f93\u5165\u6b64\u5b57\u6bb5":5,"\u82e5\u8f93\u5165\u7684\u7b7e\u540d\u6ca1\u6709\u7533\u8bf7":5,"\u82e5\u9700\u8981\u8bf7\u7533\u8bf7\u5f00\u901a\u76f8\u5173\u6743\u9650":5,"\u82f1\u6587":5,"\u8303\u56f4":5,"\u8303\u56f4\u662f":5,"\u83b7\u53d6":5,"\u83b7\u53d6\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u4fe1\u606f":5,"\u83b7\u53d6\u4e13\u7ebf\u5347\u7ea7\u4ef7\u683c":5,"\u83b7\u53d6\u4e3b\u5907redis\u5907\u4efd\u4e0b\u8f7d\u94fe\u63a5":5,"\u83b7\u53d6\u4e3b\u673a\u6216\u4e3b\u673a\u5217\u8868\u4fe1\u606f":5,"\u83b7\u53d6\u5171\u4eab\u5e26\u5bbd\u4fe1\u606f":5,"\u83b7\u53d6\u5185\u7f51vip\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u52a0\u901f\u57df\u540d\u539f\u59cb\u65e5\u5fd7":5,"\u83b7\u53d6\u52a0\u901f\u57df\u540d\u6d41\u91cf\u4f7f\u7528\u4fe1\u606f":5,"\u83b7\u53d6\u53c2\u6570\u7ec4\u8be6\u7ec6\u53c2\u6570\u4fe1\u606f":5,"\u83b7\u53d6\u56de\u6e90\u5e26\u5bbd\u6570\u636e":5,"\u83b7\u53d6\u57df\u540d\u5237\u65b0\u4efb\u52a1\u72b6\u6001":5,"\u83b7\u53d6\u57df\u540d\u547d\u4e2d\u7387":5,"\u83b7\u53d6\u57df\u540d\u5e26\u5bbd\u6570\u636e":5,"\u83b7\u53d6\u57df\u540d\u72b6\u6001\u7801\u76d1\u63a7":5,"\u83b7\u53d6\u57df\u540d\u8be6\u7ec6\u72b6\u6001\u7801\u76d1\u63a7":5,"\u83b7\u53d6\u57df\u540d\u8bf7\u6c42\u6570":5,"\u83b7\u53d6\u57df\u540d\u9884\u53d6\u5f00\u542f\u72b6\u6001":5,"\u83b7\u53d6\u5916\u7f51ip\u4ef7\u683c":5,"\u83b7\u53d6\u5916\u7f51ip\u7684\u4fe1\u606f":5,"\u83b7\u53d6\u5b50\u7f51\u4fe1\u606f":5,"\u83b7\u53d6\u5ba2\u6237vpn\u7f51\u5173\u4fe1\u606f":5,"\u83b7\u53d6\u5df2\u7ecf\u5b58\u5728\u7684uhost\u5b9e\u4f8b\u7684\u5b58\u50a8\u5feb\u7167\u5217\u8868":5,"\u83b7\u53d6\u5e26\u5bbd\u7528\u91cf\u4fe1\u606f":5,"\u83b7\u53d6\u5f39\u6027ip\u4ef7\u683c":5,"\u83b7\u53d6\u5f39\u6027ip\u4fe1\u606f":5,"\u83b7\u53d6\u5f39\u6027ip\u5e26\u5bbd\u6539\u52a8\u4ef7\u683c":5,"\u83b7\u53d6\u5f39\u6027ip\u8ba1\u8d39\u6a21\u5f0f":5,"\u83b7\u53d6\u5f53\u524d\u652f\u6301\u7684\u4e13\u7ebf\u7ebf\u8def\u5217\u8868":5,"\u83b7\u53d6\u6240\u6709\u8ba1\u8d39\u6a21\u5f0f\u7684\u4ef7\u683c":5,"\u83b7\u53d6\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u7684\u4e1a\u52a1\u7ec4\u5217\u8868":5,"\u83b7\u53d6\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u955c\u50cf\u5217\u8868":5,"\u83b7\u53d6\u6307\u5b9auhost\u5b9e\u4f8b\u7684\u7ba1\u7406vnc\u914d\u7f6e\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u6587\u4ef6\u7cfb\u7edf\u5217\u8868":5,"\u83b7\u53d6\u6700\u65e9\u53ef\u56de\u6863\u65f6\u95f4\u70b9":5,"\u83b7\u53d6\u67d0\u5730\u57df\u4e0b\u7684\u5e26\u5bbd\u5305\u4fe1\u606f":5,"\u83b7\u53d6\u6d41\u91cf\u4fe1\u606f":5,"\u83b7\u53d6\u7269\u7406\u4e91\u4e3b\u673a\u955c\u50cf\u5217\u8868":5,"\u83b7\u53d6\u7269\u7406\u673a\u4ef7\u683c\u5217\u8868":5,"\u83b7\u53d6\u7269\u7406\u673a\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u7269\u7406\u673atag\u5217\u8868":5,"\u83b7\u53d6\u7269\u7406ip\u4fe1\u606f":5,"\u83b7\u53d6\u7528\u6237\u4fe1\u606f":5,"\u83b7\u53d6\u7528\u6237\u5728\u5404\u6570\u636e\u4e2d\u5fc3\u7684\u6743\u9650\u7b49\u4fe1\u606f":5,"\u83b7\u53d6\u77ed\u4fe1\u53d1\u9001\u56de\u6267\u4fe1\u606f":5,"\u83b7\u53d6\u786c\u76d8\u4ef7\u683c":5,"\u83b7\u53d6\u786c\u76d8\u4fe1\u606f":5,"\u83b7\u53d6\u865a\u62df\u673a\u4ef7\u683c":5,"\u83b7\u53d6\u865a\u62df\u673a\u76d1\u63a7\u4fe1\u606f\u8c03\u7528\u4e3e\u4f8b":5,"\u83b7\u53d6\u8d1f\u8f7d\u5747\u8861":5,"\u83b7\u53d6\u8d1f\u8f7d\u5747\u8861\u4fe1\u606f":5,"\u83b7\u53d6\u8d1f\u8f7d\u5747\u8861\u670d\u52a1\u7684\u670d\u52a1\u8282\u70b9\u4fe1\u606f":5,"\u83b7\u53d6\u8d44\u6e90\u5176\u4ed6\u4fe1\u606f":5,"\u83b7\u53d6\u8d44\u6e90\u76d1\u63a7\u4fe1\u606f":5,"\u83b7\u53d6\u8def\u7531\u8868\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6\u955c\u50cf\u4ed3\u5e93":5,"\u83b7\u53d6\u955c\u50cf\u4ed3\u5e93\u4e0b\u7684\u955c\u50cf":5,"\u83b7\u53d6\u955c\u50cf\u4fe1\u606f":5,"\u83b7\u53d6\u955c\u50cfid":5,"\u83b7\u53d6\u955c\u50cftag":5,"\u83b7\u53d6\u9632\u706b\u5899\u7ec4\u4fe1\u606f":5,"\u83b7\u53d6\u9632\u706b\u5899\u7ec4\u6240\u7ed1\u5b9a\u8d44\u6e90\u7684\u5916\u7f51ip":5,"\u83b7\u53d6\u9879\u76ee\u5217\u8868":5,"\u83b7\u53d6\u9884\u53d6\u4efb\u52a1\u72b6\u6001":5,"\u83b7\u53d6globalssh\u5b9e\u4f8b\u5217\u8868":5,"\u83b7\u53d6globalssh\u8986\u76d6\u7684\u5730\u533a\u5217\u8868":5,"\u83b7\u53d6nat\u7f51\u5173\u4fe1\u606f":5,"\u83b7\u53d6nat\u7f51\u5173\u767d\u540d\u5355\u4fe1\u606f":5,"\u83b7\u53d6ssl\u8bc1\u4e66\u4fe1\u606f":5,"\u83b7\u53d6udb\u5907\u4efd\u4e0b\u8f7d\u5730\u5740":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u4fe1\u606f":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u5347\u964d\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u5907\u4efd\u72b6\u6001":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u72b6\u6001":5,"\u83b7\u53d6udb\u5b9e\u4f8b\u7684\u5907\u4efd\u9ed1\u540d\u5355":5,"\u83b7\u53d6udb\u6307\u5b9a\u65f6\u95f4\u6bb5\u7684binlog\u5217\u8868":5,"\u83b7\u53d6udb\u652f\u6301\u7684\u7c7b\u578b\u4fe1\u606f":5,"\u83b7\u53d6udb\u6700\u65e9\u53ef\u56de\u6863\u7684\u65f6\u95f4\u70b9":5,"\u83b7\u53d6udb\u7684binlog\u5907\u4efd\u5730\u5740":5,"\u83b7\u53d6udb\u7684slowlog\u5907\u4efd\u5730\u5740":5,"\u83b7\u53d6udisk\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udisk\u5b9e\u4f8b":5,"\u83b7\u53d6udisk\u5b9e\u4f8b\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6udisk\u5feb\u7167":5,"\u83b7\u53d6uhost\u5b9e\u4f8b\u5347\u7ea7\u914d\u7f6e\u7684\u4ef7\u683c":5,"\u83b7\u53d6uhost\u5b9e\u4f8b\u7684\u4ef7\u683c":5,"\u83b7\u53d6ulb\u4e0b\u7684vserver\u7684\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6ulb\u8be6\u7ec6\u4fe1\u606f":5,"\u83b7\u53d6umem\u5185\u5b58\u7a7a\u95f4\u5217\u8868":5,"\u83b7\u53d6umem\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6umem\u5b9e\u4f8b\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6umemcache\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6umemcache\u7ec4\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6uredis\u5347\u7ea7\u4ef7\u683c\u4fe1\u606f":5,"\u83b7\u53d6vpc\u4e92\u901a\u4fe1\u606f":5,"\u83b7\u53d6vpc\u4fe1\u606f":5,"\u83b7\u53d6vpn\u96a7\u9053\u4fe1\u606f":5,"\u865a\u62df\u673a":5,"\u865a\u62df\u673a\u521b\u5efa\u65f6\u95f4":5,"\u865a\u62df\u673a\u540d\u79f0":5,"\u865a\u62df\u673a\u72b6\u6001":5,"\u865a\u62df\u673a\u7684":5,"\u865a\u62df\u673a\u7684\u76d1\u63a7\u6307\u6807\u679a\u4e3e\u503c\u4e3a":5,"\u865a\u62df\u673a\u76d1\u63a7\u6307\u6807\u679a\u4e3e\u503c":5,"\u865a\u62df\u673a\u7c7b\u578b":5,"\u865a\u62df\u673a\u7c7b\u578b\u522b\u540d":5,"\u865a\u62df\u673a\u8ba1\u8d39\u6a21\u5f0f":5,"\u865a\u62df\u673a\u8fc7\u671f\u65f6\u95f4":5,"\u865a\u62df\u673aid":5,"\u865a\u62df\u7f51\u5361":5,"\u865a\u62dfcpu\u6838\u6570":5,"\u865a\u62dfip":5,"\u884c\u4e1a\u955c\u50cf":5,"\u884c\u4e1a\u955c\u50cf\u7c7b\u578b":5,"\u8868\u793a":5,"\u8868\u793a\u4e2d\u56fd":5,"\u8868\u793a\u4ece\u5e93\u5907\u4efd\u5f00\u5173\u6253\u5f00":5,"\u8868\u793a\u4f7f\u7528\u5feb\u7167":5,"\u8868\u793a\u4f7f\u7528\u903b\u8f91\u5907\u4efd":5,"\u8868\u793a\u4fee\u6539\u914d\u7f6e\u4e2d":5,"\u8868\u793a\u4fee\u6539\u9632\u706b\u5899\u4e2d":5,"\u8868\u793a\u5173\u673a":5,"\u8868\u793a\u5173\u673a\u4e2d":5,"\u8868\u793a\u5177\u4f53\u9519\u8bef\u63cf\u8ff0":5,"\u8868\u793a\u5185\u5b58\u4f7f\u7528\u7387":5,"\u8868\u793a\u5185\u7f51":5,"\u8868\u793a\u521d\u59cb\u5316":5,"\u8868\u793a\u5347\u7ea7":5,"\u8868\u793a\u53ea\u62c9\u53d6\u8de8\u53ef\u7528\u533a\u7684\u76f8\u5173\u914d\u7f6e\u6587\u4ef6":5,"\u8868\u793a\u53ef\u7528\u533a1":5,"\u8868\u793a\u5426":5,"\u8868\u793a\u542f\u52a8\u4e2d":5,"\u8868\u793a\u5916\u7f51":5,"\u8868\u793a\u5c0f\u65f6":5,"\u8868\u793a\u5df2\u5220\u9664":5,"\u8868\u793a\u5df2\u9500\u6bc1":5,"\u8868\u793a\u5e73\u5747\u8d1f\u8f7d1\u5206\u949f":5,"\u8868\u793a\u5e74":5,"\u8868\u793a\u5f00\u542f\u4f1a\u8bdd\u4fdd\u6301":5,"\u8868\u793a\u6253\u5f00\u661f\u671f\u516d\u548c\u661f\u671f\u4e94\u7684\u81ea\u52a8\u5907\u4efd\u529f\u80fd":5,"\u8868\u793a\u6570\u636e\u76d8":5,"\u8868\u793a\u65ad\u7535\u4e2d":5,"\u8868\u793a\u662f":5,"\u8868\u793a\u662f\u5171\u4eab\u5e26\u5bbd":5,"\u8868\u793a\u666e\u901a":5,"\u8868\u793a\u666e\u901a\u673a\u578b":5,"\u8868\u793a\u6700\u540e\u4e00\u6b21\u5207\u6362\u7684\u8ba1\u8d39\u65b9\u5f0f":5,"\u8868\u793a\u6708":5,"\u8868\u793a\u7269\u7406\u7f51":5,"\u8868\u793a\u78c1\u76d8\u5199\u541e\u5410":5,"\u8868\u793a\u78c1\u76d8\u5199\u6b21\u6570":5,"\u8868\u793a\u78c1\u76d8\u8bfb\u541e\u5410":5,"\u8868\u793a\u78c1\u76d8\u8bfb\u6b21\u6570":5,"\u8868\u793a\u7981\u7528\u8fde\u63a5\u4fdd\u6301":5,"\u8868\u793a\u7a7a\u95f4\u4f7f\u7528\u7387":5,"\u8868\u793a\u7b49\u5f85\u91cd\u88c5\u7cfb\u7edf":5,"\u8868\u793a\u7cfb\u52171":5,"\u8868\u793a\u7cfb\u52172":5,"\u8868\u793a\u7cfb\u7edf\u76d8":5,"\u8868\u793a\u7f51\u5361\u5165\u5305\u91cf":5,"\u8868\u793a\u7f51\u5361\u5165\u5e26\u5bbd":5,"\u8868\u793a\u7f51\u5361\u51fa\u5305\u91cf":5,"\u8868\u793a\u7f51\u5361\u51fa\u5e26\u5bbd":5,"\u8868\u793a\u8fc1\u79fb\u4e2d":5,"\u8868\u793a\u8fd0\u884c":5,"\u8868\u793a\u91cd\u542f\u4e2d":5,"\u8868\u793a\u91cd\u88c5\u4e2d":5,"\u8868\u793a\u9500\u6bc1\u4e2d":5,"\u8868\u793a\u963b\u585e\u8fdb\u7a0b\u6570":5,"\u8868\u793acpu\u4f7f\u7528\u7387":5,"\u8868\u793assd":5,"\u8868\u793atcp\u8fde\u63a5\u6570":5,"\u88ab\u4f7f\u7528\u4e2d":5,"\u88ab\u514b\u9686\u7684\u8def\u7531\u8868id":5,"\u88ab\u5220\u9664\u7684\u786c\u76d8id":5,"\u88ab\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684\u7248\u672c\u53f7":5,"\u88ab\u5bfc\u51fa\u5de5\u4f5c\u6d41\u7684id":5,"\u88ab\u7981\u7528":5,"\u88ab\u7cfb\u7edf\u5360\u7528":5,"\u88ab\u7ed1\u5b9a\u7684\u8d44\u6e90\u5fc5\u987b\u5904\u4e8e\u8fd0\u884c\u4e2d\u6216\u6709\u6548\u72b6\u6001":5,"\u88abssh\u8bbf\u95ee\u7684eip":5,"\u88abssh\u8bbf\u95ee\u7684ip":5,"\u88abssh\u8bbf\u95ee\u7684ip\u6240\u5728\u5730\u533a":5,"\u8981\u5220\u9664\u7684udisk\u7684id":5,"\u8981\u52a0\u5165\u5171\u4eab\u5e26\u5bbd\u7684eip\u7684\u8d44\u6e90id":5,"\u8981\u5347\u7ea7\u7684\u7a7a\u95f4\u7684groupid":5,"\u8981\u67e5\u8be2\u7684\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u89c1":5,"\u89c4\u5219":5,"\u89c4\u5219\u6570\u91cf":5,"\u89c4\u5219id":5,"\u89c4\u683c\u8c03\u6574\u5dee\u4ef7":5,"\u89c4\u8303\u793a\u4f8b":5,"\u89e3\u7ed1\u4e2d":5,"\u89e3\u7ed1\u544a\u8b66\u6a21\u677f":5,"\u89e3\u7ed1\u5916\u7f51ip":5,"\u89e3\u7ed1\u5b89\u5168\u7ec4":5,"\u89e3\u7ed1\u7269\u7406ip":5,"\u89e3\u7ed1\u7684\u8d44\u6e90id":5,"\u89e3\u7ed1eip":5,"\u89e3\u7ed1eip\u540e":5,"\u89e3\u7ed1ucloustack\u786c\u76d8":5,"\u8ba1\u7b97\u7aef\u53e3":5,"\u8ba1\u8d39\u65b9\u5f0f":5,"\u8ba1\u8d39\u65f6\u957f":5,"\u8ba1\u8d39\u65f6\u95f4\u5355\u4f4d":5,"\u8ba1\u8d39\u6a21\u5f0f":5,"\u8ba1\u8d39\u6a21\u5f0f\u4e3adynamic\u65f6":5,"\u8ba1\u8d39\u7c7b\u578b":5,"\u8bbe\u5b9a\u4e1a\u52a1\u7ec4":5,"\u8bbe\u5b9a\u5b9e\u4f8b\u540d\u79f0":5,"\u8bbe\u5b9a\u5bc6\u7801":5,"\u8bbe\u7f6e\u5f39\u6027ip\u8ba1\u8d39\u6a21\u5f0f":5,"\u8bbe\u7f6e\u89c4\u5219\u8bf7\u53c2\u7167disktyp":5,"\u8bbe\u7f6eudisk\u6570\u636e\u65b9\u821f\u7684\u72b6\u6001":5,"\u8bbf\u95ee\u8be5\u57df\u540d\u53ef\u5c31\u8fd1\u63a5\u5165":5,"\u8bc1\u4e66\u5185\u5bb9":5,"\u8bc1\u4e66\u5185\u5bb9\u4f20\u8fc7\u6765":5,"\u8bc1\u4e66\u5185\u5bb9\u7684\u8fc7\u671f\u65f6\u95f4":5,"\u8bc1\u4e66\u540d":5,"\u8bc1\u4e66\u540d\u79f0":5,"\u8bc1\u4e66\u603b\u4e2a\u6570":5,"\u8bc1\u4e66\u6307\u7eb9":5,"\u8bc1\u4e66\u63cf\u8ff0":5,"\u8bc1\u4e66\u7c7b\u578b":5,"\u8bc1\u4e66id":5,"\u8bc1\u4e66id\u5217\u8868":5,"\u8bd5\u7528":5,"\u8be5\u4e1a\u52a1\u7ec4\u4e2d\u5305\u542b\u7684\u4e3b\u673a\u4e2a\u6570":5,"\u8be5\u503c\u4e0d\u751f\u6548":5,"\u8be5\u503c\u4e3a\u7a7a":5,"\u8be5\u503c\u53ef\u4ee5\u901a\u8fc7describeudbbackup\u83b7\u53d6":5,"\u8be5\u503c\u53ef\u4ee5\u901a\u8fc7describeudbinstance\u83b7\u53d6":5,"\u8be5\u503c\u53ef\u901a\u8fc7describeudbinstance\u83b7\u53d6":5,"\u8be5\u5904\u663e\u793a\u4e3a\u5171\u4eab\u5e26\u5bbd\u503c":5,"\u8be5\u5904\u663e\u793a\u8fd9\u4e2a\u5f39\u6027ip\u7684\u5e26\u5bbd":5,"\u8be5\u5b57\u6bb5\u65e0\u6548":5,"\u8be5\u5f39\u6027ip\u4e0d\u4f1a\u88ab\u4f7f\u7528":5,"\u8be5\u5feb\u7167\u7684\u5bc6\u6587\u5bc6\u94a5":5,"\u8be5\u5feb\u7167\u7684cmk":5,"\u8be5\u5feb\u7167cmk\u7684\u72b6\u6001":5,"\u8be5\u76d8\u5feb\u7167\u4e0a\u9650":5,"\u8be5\u76d8\u5feb\u7167\u4e2a\u6570":5,"\u8be5\u76d8\u7684\u5bc6\u6587\u5bc6\u94a5":5,"\u8be5\u76d8\u7684cmk":5,"\u8be5\u76d8cmk\u7684\u72b6\u6001":5,"\u8be5\u914d\u7f6e\u6587\u4ef6\u662f\u5426\u662f\u5730\u57df\u7ea7\u522b\u914d\u7f6e\u6587\u4ef6":5,"\u8be5\u9879\u4e3a\u5fc5\u586b\u9879":5,"\u8be5\u9879\u5fc5\u586b":5,"\u8be5vpc\u4e0b\u62e5\u6709\u7684\u5b50\u7f51\u6570\u76ee":5,"\u8be6\u89c1describeuredisversion\u8fd4\u56de\u7ed3\u679c":5,"\u8be6\u89c1param":5,"\u8be6\u8be2\u6280\u672f\u652f\u6301":5,"\u8bf4\u660e\u5982\u4e0b":5,"\u8bf4\u660e\u67e5\u770b\u6574\u4e2a\u53ef\u7528\u533a\u7684\u4e13\u533a\u7684db":5,"\u8bf7\u52ff\u5c06\u591a\u4e2a\u7ed1\u5b9a\u5728\u540c\u4e00\u8d44\u6e90\u7684\u5f39\u6027ip\u8bbe\u7f6e\u4e3a\u76f8\u540c\u6743\u91cd":5,"\u8bf7\u53c2\u8003":5,"\u8bf7\u53c2\u8003\u63a7\u5236\u53f0":5,"\u8bf7\u53c2\u8003\u63a7\u5236\u53f0\u7684\u955c\u50cf\u7248\u672c":5,"\u8bf7\u53c2\u8003describecoupon\u63a5\u53e3":5,"\u8bf7\u53c2\u8003describeumemcachegroup\u63a5\u53e3":5,"\u8bf7\u53c2\u8003describeuredisgroup\u63a5\u53e3":5,"\u8bf7\u6b63\u786e\u63d0\u4ea4\u9700\u8981\u5237\u65b0\u7684\u57df\u540d":5,"\u8bf7\u6c42\u4e2d\u7684protocolversion\u5b57\u6bb5\u4e3a0\u6216\u6ca1\u6709\u8be5\u5b57\u6bb5\u65f6":5,"\u8bf7\u6c42\u4e2d\u7684protocolversion\u5b57\u6bb5\u4e3a1\u65f6":5,"\u8bf7\u6c42\u4ee3\u7406":5,"\u8bf7\u6c42\u4ee3\u7406\u53ea\u652f\u6301\u4fee\u6539\u4e3a":5,"\u8bf7\u6c42\u4ee3\u7406\u6a21\u5f0f\u4e0b\u6709":5,"\u8bf7\u6c42\u4ee3\u7406\u7684vserver\u4e0b\u8868\u793a\u7a7a\u95f2\u8fde\u63a5\u7684\u56de\u6536\u65f6\u95f4":5,"\u8bf7\u6c42\u521b\u5efa\u7ec4\u7684\u540d\u79f0":5,"\u8bf7\u6c42\u534f\u8bae\u7248\u672c":5,"\u8bf7\u6c42\u6570\u547d\u4e2d\u7387":5,"\u8bf7\u8054\u7cfb\u60a8\u7684\u5ba2\u6237\u7ecf\u7406":5,"\u8bf7\u901a\u8fc7":5,"\u8bf7\u901a\u8fc7describecoupon\u63a5\u53e3\u67e5\u8be2":5,"\u8bf7\u9075\u7167":5,"\u8c03\u6574\u4e3b\u5907redis\u5bb9\u91cf":5,"\u8c03\u6574\u5171\u4eab\u5e26\u5bbd\u7684\u5e26\u5bbd\u503c":5,"\u8c03\u6574\u5185\u5b58\u7a7a\u95f4\u5bb9\u91cf":5,"\u8c03\u6574\u540e\u4e13\u7ebf\u5e26\u5bbd":5,"\u8c03\u6574\u540e\u5927\u5c0f":5,"\u8c03\u6574\u540e\u7684\u5e26\u5bbd":5,"\u8c03\u6574\u540e\u7684ssh\u767b\u9646\u7aef\u53e3":5,"\u8c03\u6574\u5916\u7f51ip\u5e26\u5bbd":5,"\u8c03\u6574\u5e26\u5bbd\u540e\u7684eip\u4ef7\u683c":5,"\u8c03\u6574\u5f39\u6027ip\u7684\u5916\u7f51\u5e26\u5bbd":5,"\u8c03\u6574\u7684\u76ee\u6807\u5e26\u5bbd\u503c":5,"\u8c03\u6574udisk\u5bb9\u91cf":5,"\u8c03\u7528\u63a5\u53e3createusmssignature\u7533\u8bf7\u77ed\u4fe1\u7b7e\u540d":5,"\u8c03\u7528\u63a5\u53e3createusmstemplate\u7533\u8bf7\u77ed\u4fe1\u6a21\u677f":5,"\u8c03\u7528\u63a5\u53e3deleteusmssignature\u5220\u9664\u77ed\u4fe1\u7b7e\u540d":5,"\u8c03\u7528\u63a5\u53e3deleteusmstemplate\u5220\u9664\u77ed\u4fe1\u6a21\u677f":5,"\u8c03\u7528\u63a5\u53e3queryusmssignature\u67e5\u8be2\u77ed\u4fe1\u7b7e\u540d\u7533\u8bf7\u72b6\u6001":5,"\u8c03\u7528\u63a5\u53e3queryusmstemplate\u67e5\u8be2\u77ed\u4fe1\u6a21\u677f\u7533\u8bf7\u72b6\u6001":5,"\u8c03\u7528\u63a5\u53e3updateusmssignature\u4fee\u6539\u672a\u901a\u8fc7\u5ba1\u6838\u7684\u77ed\u4fe1\u7b7e\u540d":5,"\u8c03\u7528\u63a5\u53e3updateusmstemplate\u4fee\u6539\u672a\u901a\u8fc7\u5ba1\u6838\u7684\u77ed\u4fe1\u6a21\u677f":5,"\u8c03\u7528\u65b9\u5f0f\u4e3e\u4f8b":5,"\u8c03\u7528\u8be5api":5,"\u8d1f\u8f7d\u5747\u8861":5,"\u8d1f\u8f7d\u5747\u8861\u5668":5,"\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684id":5,"\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8bid":5,"\u8d1f\u8f7d\u5747\u8861\u7684":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u4e1a\u52a1\u7ec4\u540d\u79f0":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u5065\u5eb7\u68c0\u67e5\u7c7b\u578b":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u5185\u7f51":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u540d\u5b57":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u5907\u6ce8":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u5916\u7f51":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u8c03\u5ea6\u7b97\u6cd5":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u8d44\u6e90\u540d\u79f0":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u8d44\u6e90id":5,"\u8d1f\u8f7d\u5747\u8861\u7684\u8fde\u63a5\u7a7a\u95f2\u8d85\u65f6\u65f6\u95f4":5,"\u8d1f\u8f7d\u5747\u8861\u7c7b\u578b":5,"\u8d1f\u8f7d\u5747\u8861\u8d44\u6e90id":5,"\u8d1f\u8f7d\u5747\u8861id":5,"\u8d1f\u8f7d\u5747\u8861vserver\u76d1\u542c\u5668id":5,"\u8d26\u53f7\u5bc6\u7801":5,"\u8d26\u53f7\u90ae\u7bb1":5,"\u8d26\u6237\u4f59\u989d":5,"\u8d26\u6237\u521b\u5efa\u65f6\u95f4":5,"\u8d26\u6237id":5,"\u8d2d\u4e70\u5230\u6708\u5e95":5,"\u8d2d\u4e70\u53f0\u6570":5,"\u8d2d\u4e70\u6570\u91cf":5,"\u8d2d\u4e70\u65f6\u957f":5,"\u8d2d\u4e70\u6d41\u91cf\u7684\u533a\u57df":5,"\u8d2d\u4e70\u7684\u65f6\u957f":5,"\u8d2d\u4e70db\u5b9e\u4f8b\u6570\u91cf":5,"\u8d2d\u4e70udisk\u5927\u5c0f":5,"\u8d2d\u4e70udisk\u7684\u65f6\u957f":5,"\u8d2d\u4e70umem\u5927\u5c0f":5,"\u8d2d\u4e70umem\u7684\u65f6\u957f":5,"\u8d2d\u4e70umemcache\u5927\u5c0f":5,"\u8d2d\u4e70umemcache\u7684\u65f6\u957f":5,"\u8d2d\u4e70uredis\u5927\u5c0f":5,"\u8d44\u6e90":5,"\u8d44\u6e90\u521b\u5efa\u65f6\u95f4\u6233":5,"\u8d44\u6e90\u540d\u79f0":5,"\u8d44\u6e90\u552f\u4e00\u6807\u8bc6":5,"\u8d44\u6e90\u5b9e\u4f8b\u7684\u7c7b\u578b":5,"\u8d44\u6e90\u5b9e\u4f8b\u7684\u8d44\u6e90\u540d\u79f0":5,"\u8d44\u6e90\u5b9e\u4f8b\u7684\u8d44\u6e90id":5,"\u8d44\u6e90\u662f\u5426\u8fc7\u671f":5,"\u8d44\u6e90\u6709\u6548\u671f":5,"\u8d44\u6e90\u72b6\u6001":5,"\u8d44\u6e90\u7684":5,"\u8d44\u6e90\u7684\u552f\u4e00\u6807\u8bc6":5,"\u8d44\u6e90\u7684ipv6\u5730\u5740":5,"\u8d44\u6e90\u77ed":5,"\u8d44\u6e90\u7c7b\u578b":5,"\u8d44\u6e90\u7cfb\u7edf\u4e2d":5,"\u8d44\u6e90\u7ed1\u5b9a\u6570\u91cf":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u5b9e\u4f8b\u7684\u7c7b\u578b":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u5b9e\u4f8b\u7684\u8d44\u6e90\u540d\u79f0":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u5b9e\u4f8b\u7684\u8d44\u6e90id":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u540d\u79f0":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u5b9e\u4f8b\u540d\u79f0":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u5b9e\u4f8bid":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684\u7c7b\u578b":5,"\u8d44\u6e90\u7ed1\u5b9a\u7684\u865a\u62df\u7f51\u5361\u7684id":5,"\u8d44\u6e90\u8fc7\u671f\u65f6\u95f4\u6233":5,"\u8d44\u6e90id":5,"\u8d44\u6e90ip":5,"\u8d77\u59cb\u65f6\u95f4":5,"\u8d85\u8fc7\u6700\u5927\u7248\u672c\u4f1a\u8fd4\u56de\u9519\u8bef":5,"\u8de8\u53ef\u7528\u533a\u9ad8\u53ef\u7528\u5907\u5e93\u6240\u5728\u53ef\u7528\u533a":5,"\u8de8\u53ef\u7528\u533a\u9ad8\u53ef\u7528db\u7684\u5907\u5e93\u6240\u5728\u533a\u57df":5,"\u8de8\u673a\u623f\u9ad8\u53ef\u7528\u5907\u5e93\u6240\u5728\u53ef\u7528\u533a":5,"\u8de8\u673a\u623furedi":5,"\u8def\u5f84":5,"\u8def\u5f84\u68c0\u67e5":5,"\u8def\u5f84\u6a21\u5f0f":5,"\u8def\u7531\u4e0b\u4e00\u8df3id":5,"\u8def\u7531\u7b56\u7565\u589e":5,"\u8def\u7531\u8868\u540d\u79f0":5,"\u8def\u7531\u8868\u5907\u6ce8":5,"\u8def\u7531\u8868\u6240\u5c5evpc":5,"\u8def\u7531\u8868\u7c7b\u578b":5,"\u8def\u7531\u8868id":5,"\u8def\u7531\u89c4\u5219\u5907\u6ce8":5,"\u8def\u7531\u89c4\u5219\u7c7b\u578b":5,"\u8def\u7531id":5,"\u8f6c\u53d1\u89c4\u5219\u7684id":5,"\u8f6c\u6d41\u91cf\u8ba1\u8d39":5,"\u8f6e\u8be2":5,"\u8f93\u5165":5,"\u8f93\u5165\u4e0d\u5e26\u5355\u4f4d":5,"\u8f93\u5165\u53c2\u6570\u4e3aother":5,"\u8f93\u5165\u6709\u6548\u7684":5,"\u8f93\u5165\u6709\u6548\u7684\u6307\u5b9a\u5185\u7f51":5,"\u8f93\u5165\u6709\u6548\u7684\u865a\u62df\u673a":5,"\u8f93\u5165\u6709\u6548\u7684\u89c4\u5219":5,"\u8fc7\u671f":5,"\u8fc7\u671f\u65f6\u95f4":5,"\u8fc7\u6ee4\u6761\u4ef6":5,"\u8fd0\u7ef4\u65f6\u95f40":5,"\u8fd0\u8425\u5546\u4fe1\u606f":5,"\u8fd0\u8425\u5546\u4fe1\u606f\u5982":5,"\u8fd0\u884c":5,"\u8fd0\u884c\u4e2d":5,"\u8fd0\u884c\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8b\u7684\u4e3b\u673a\u673a\u578b":5,"\u8fd0\u884cnat\u7f51\u5173\u5b9e\u4f8b\u7684\u4e3b\u673a\u673a\u578b":5,"\u8fd4\u56de":5,"\u8fd4\u56de\u4fe1\u606f\u63cf\u8ff0":5,"\u8fd4\u56de\u503c\u4e2d\u7684diskset":5,"\u8fd4\u56de\u503c\u5e26\u5bbd\u503c\u6570\u636e":5,"\u8fd4\u56de\u503c\u8fd4\u56de\u6307\u5b9a\u65f6\u95f4\u533a\u95f4\u5185\u7684cdn\u56de\u6e90\u7684\u8bf7\u6c42\u6b21\u6570\u4e4b\u548c":5,"\u8fd4\u56de\u503c\u8fd4\u56de\u6307\u5b9a\u65f6\u95f4\u533a\u95f4\u5185\u7684cdn\u6536\u5230\u7684\u8bf7\u6c42\u6b21\u6570\u4e4b\u548c":5,"\u8fd4\u56de\u503c\u8fd4\u56de\u6307\u5b9a\u65f6\u95f4\u533a\u95f4\u5185cdn\u7684\u5e26\u5bbd\u5cf0\u503c":5,"\u8fd4\u56de\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u7684\u603b\u4e2a\u6570":5,"\u8fd4\u56de\u521b\u5efa\u5916\u7f51ip\u7684":5,"\u8fd4\u56de\u521b\u5efa\u6570\u636e\u76d8\u7684":5,"\u8fd4\u56de\u521b\u5efa\u7684\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219id":5,"\u8fd4\u56de\u521b\u5efa\u7684\u7269\u7406ip\u7684id":5,"\u8fd4\u56de\u521b\u5efa\u7684\u8d1f\u8f7d\u5747\u8861id":5,"\u8fd4\u56de\u521b\u5efa\u7684nat\u7f51\u5173id":5,"\u8fd4\u56de\u521b\u5efa\u7684rsid":5,"\u8fd4\u56de\u521b\u5efa\u7684vsid":5,"\u8fd4\u56de\u521b\u5efa\u865a\u62df\u673a\u7684":5,"\u8fd4\u56de\u56de\u6536\u7ad9\u8d44\u6e90\u7684\u603b\u4e2a\u6570":5,"\u8fd4\u56de\u5f53\u524d\u8d1f\u8f7d\u5747\u8861":5,"\u8fd4\u56de\u6240\u6709\u652f\u6301\u5730\u533a":5,"\u8fd4\u56de\u63cf\u8ff0":5,"\u8fd4\u56de\u63cf\u8ff0\u4fe1\u606f":5,"\u8fd4\u56de\u652f\u6301\u67d0\u79cd\u5b9e\u4f8b\u7c7b\u578b\u7684db\u7c7b\u578b":5,"\u8fd4\u56de\u652f\u6301\u67d0\u79cd\u78c1\u76d8\u7c7b\u578b\u7684db\u7c7b\u578b":5,"\u8fd4\u56de\u6570\u636e\u504f\u79fb\u91cf":5,"\u8fd4\u56de\u6570\u636e\u5206\u9875\u503c":5,"\u8fd4\u56de\u6570\u636e\u957f\u5ea6":5,"\u8fd4\u56de\u6d88\u606f":5,"\u8fd4\u56de\u72b6\u6001\u63cf\u8ff0":5,"\u8fd4\u56de\u72b6\u6001\u7801\u63cf\u8ff0":5,"\u8fd4\u56de\u73b0\u6709\u5916\u7f51ip\u603b\u6570":5,"\u8fd4\u56de\u73b0\u6709\u7269\u7406ip\u603b\u6570":5,"\u8fd4\u56de\u73b0\u6709\u79df\u6237\u603b\u6570":5,"\u8fd4\u56de\u7684":5,"\u8fd4\u56de\u76d1\u63a7\u4fe1\u606f\u6761\u6570":5,"\u8fd4\u56de\u7801":5,"\u8fd4\u56de\u78c1\u76d8\u603b\u4e2a\u6570":5,"\u8fd4\u56de\u865a\u62df\u673a\u603b\u4e2a\u6570":5,"\u8fd4\u56de\u8be5\u5b9e\u4f8b\u6240\u5728\u96c6\u7fa4\u4e2d\u7684\u89d2\u8272":5,"\u8fd4\u56de\u8be5\u76d8\u6240\u505a\u5feb\u7167":5,"\u8fd4\u56de\u8be5\u8d1f\u8f7d\u5747\u8861\u4e0bvserver\u7684\u603b\u4e2a\u6570":5,"\u8fd4\u56de\u8d1f\u8f7d\u5747\u8861\u603b\u4e2a\u6570":5,"\u8fd4\u56de\u8fd0\u7ef4\u65f6\u95f4":5,"\u8fd4\u56de\u955c\u50cf\u7684\u603b\u4e2a\u6570":5,"\u8fd4\u56denat\u7f51\u5173\u603b\u4e2a\u6570":5,"\u8fd4\u56denat\u7f51\u5173\u767d\u540d\u5355\u8d44\u6e90\u603b\u4e2a\u6570":5,"\u8fd8\u9700\u8981\u5728\u4e3b\u673a\u5185\u90e8\u8fdb\u884c\u6587\u4ef6\u7cfb\u7edf\u64cd\u4f5c":5,"\u8fd9\u4e24\u5957\u7b2c\u4e8c\u5957\u53c2\u6570\u7684\u4f18\u5148\u7ea7\u66f4\u9ad8":5,"\u8fde\u63a5":5,"\u8fde\u7eed\u89e6\u53d1\u6b21\u6570":5,"\u9000\u8ba2\u4fe1\u606f":5,"\u9000\u8ba2\u56de\u590dd":5,"\u9000\u8ba2\u56de\u590dn":5,"\u9000\u8ba2\u56de\u590dt":5,"\u9000\u8ba2\u56de\u590dtd":5,"\u9000\u8ba2\u56ded":5,"\u9000\u8ba2\u56det":5,"\u9000\u8ba2\u56detd":5,"\u9000\u8d39":5,"\u9002\u7528\u4e8e\u4e00\u6b21\u67e5\u8be2\u4e00\u4e2a\u5b50\u7f51\u4fe1\u606f":5,"\u9002\u7528\u4e8e\u4e00\u6b21\u67e5\u8be2\u591a\u4e2a\u5b50\u7f51\u4fe1\u606f":5,"\u9009\u62e9\u52a0\u5bc6\u76d8\u65f6\u5fc5\u586b":5,"\u9009\u62e9\u9ed8\u8ba4\u7684\u5907\u4efd\u65b9\u5f0f":5,"\u9009\u9879":5,"\u901a\u77e5\u7c7b":5,"\u901a\u77e5\u7ec4id":5,"\u901a\u8fc7\u5b50\u7f51\u7b5b\u9009\u4e3b\u673a":5,"\u901a\u8fc7\u786c\u4ef6\u9694\u79bb\u7ec4\u7b5b\u9009\u4e3b\u673a":5,"\u901a\u8fc7\u865a\u62df\u673a\u5bfc\u51fa\u7684\u955c\u50cf":5,"\u901a\u8fc7describeroutetable\u62ff\u5230":5,"\u901a\u8fc7vpc\u7b5b\u9009\u4e3b\u673a":5,"\u90a3\u4e48\u53ea\u62c9\u53d6\u8fd9\u4e2a\u5907\u4efd\u7684\u8bb0\u5f55":5,"\u90a3\u4e48\u628a\u8fd9\u4e2adbid\u5b9e\u4f8b\u7684\u6240\u6709\u4ece\u5e93\u4fe1\u606f\u4e00\u8d77\u62c9\u53d6\u5e76\u8fd4\u56de":5,"\u90e8\u5206\u5f02\u5e38":5,"\u914d\u7f6e\u4e2d":5,"\u914d\u7f6e\u5185\u5bb9":5,"\u914d\u7f6e\u53c2\u6570\u7ec4\u540d\u79f0":5,"\u914d\u7f6e\u53c2\u6570\u7ec4id":5,"\u914d\u7f6e\u5931\u8d25":5,"\u914d\u7f6e\u5931\u8d25restart":5,"\u914d\u7f6e\u6587\u4ef6\u5b50\u7c7b\u578b":5,"\u914d\u7f6e\u6587\u4ef6\u7684\u540d\u5b57":5,"\u914d\u7f6e\u6587\u4ef6\u7684\u63cf\u8ff0":5,"\u914d\u7f6e\u670d\u52a1\u5668\u7684dbid":5,"\u914d\u7f6e\u8282\u70b9":5,"\u914d\u7f6eid":5,"\u914d\u7f6einstancetyp":5,"\u914d\u7f6eusessd\u548cssdtyp":5,"\u91c7\u7528\u65f6\u95f4\u6233":5,"\u91c7\u7528utc\u8ba1\u65f6\u65f6\u95f4\u6233":5,"\u91ca\u653e":5,"\u91ca\u653e\u5f39\u6027ip\u8d44\u6e90":5,"\u91ca\u653evip\u8d44\u6e90":5,"\u91cc\u7684\u57df\u540d":5,"\u91cd\u542f\u4e2d":5,"\u91cd\u542f\u5355\u673amemcach":5,"\u91cd\u542f\u7269\u7406\u673a":5,"\u91cd\u542f\u865a\u62df\u673a":5,"\u91cd\u542fudb\u5b9e\u4f8b":5,"\u91cd\u547d\u540d\u7684udisk\u7684id":5,"\u91cd\u547d\u540dudb\u5b9e\u4f8b":5,"\u91cd\u547d\u540dudisk":5,"\u91cd\u547d\u540dudisk\u7684nam":5,"\u91cd\u65b0\u542f\u52a8uhost\u5b9e\u4f8b":5,"\u91cd\u65b0\u5b89\u88c5\u6307\u5b9auhost\u5b9e\u4f8b\u7684\u64cd\u4f5c\u7cfb\u7edf":5,"\u91cd\u7f6e\u865a\u62df\u673a\u5bc6\u7801":5,"\u91cd\u7f6euhost\u5b9e\u4f8b\u7684\u7ba1\u7406\u5458\u5bc6\u7801":5,"\u91cd\u88c5\u7269\u7406\u673a\u64cd\u4f5c\u7cfb\u7edf":5,"\u91cd\u88c5\u7cfb\u7edf":5,"\u91cf\u5927\u5c0f":5,"\u9488\u5bf9\u975e\u79c1\u6709\u5b50\u7f51\u4e3b\u673a":5,"\u94f6\u884c\u8f6c\u8d26":5,"\u9500\u6bc1\u4e2d":5,"\u9500\u6bc1\u65f6\u95f4":5,"\u9500\u6bc1\u8d44\u6e90":5,"\u9519\u8bef\u4fe1\u606f":5,"\u9519\u8bef\u63cf\u8ff0":5,"\u9519\u8bef\u7684\u65f6\u5019\u8fd4\u56de":5,"\u955c\u50cf":5,"\u955c\u50cf\u4ed3\u5e93\u540d\u79f0":5,"\u955c\u50cf\u4ed3\u5e93\u63cf\u8ff0":5,"\u955c\u50cf\u4ed3\u5e93\u662f\u5426\u516c\u5f00":5,"\u955c\u50cf\u4ed3\u5e93\u662f\u5426\u5916\u7f51\u53ef\u4ee5\u8bbf\u95ee":5,"\u955c\u50cf\u4ed3\u5e93\u7c7b\u578b":5,"\u955c\u50cf\u540d\u79f0":5,"\u955c\u50cf\u5927\u5c0f":5,"\u955c\u50cf\u5e02\u573a":5,"\u955c\u50cf\u63cf\u8ff0":5,"\u955c\u50cf\u66f4\u65b0\u65f6\u95f4":5,"\u955c\u50cf\u683c\u5f0f":5,"\u955c\u50cf\u72b6\u6001":5,"\u955c\u50cf\u7684":5,"\u955c\u50cf\u7c7b\u522b":5,"\u955c\u50cf\u7c7b\u578b":5,"\u955c\u50cf\u7cfb\u7edf\u53d1\u884c\u7248\u672c":5,"\u955c\u50cf\u88ab\u4e0b\u8f7d\u6b21\u6570":5,"\u955c\u50cfid":5,"\u955c\u50cfid\u8fdb\u884c\u8fc7\u6ee4":5,"\u957f\u5ea6":5,"\u957f\u5ea6\u4e3a2":5,"\u957f\u5ea6\u8981\u6c42\u4e3a6":5,"\u9632\u706b\u5899\u4e1a\u52a1\u7ec4":5,"\u9632\u706b\u5899\u52a8\u4f5c":5,"\u9632\u706b\u5899\u540d\u79f0":5,"\u9632\u706b\u5899\u5907\u6ce8":5,"\u9632\u706b\u5899\u63cf\u8ff0":5,"\u9632\u706b\u5899\u7ec4\u521b\u5efa\u65f6\u95f4":5,"\u9632\u706b\u5899\u7ec4\u7c7b\u578b":5,"\u9632\u706b\u5899\u7ed1\u5b9a\u8d44\u6e90\u6570\u91cf":5,"\u9632\u706b\u5899\u89c4\u5219":5,"\u9632\u706b\u5899\u89c4\u5219\u5907\u6ce8":5,"\u9632\u706b\u5899\u8d44\u6e90id":5,"\u9632\u706b\u5899id":5,"\u9650\u5236\u5b57\u7b26\u957f\u5ea6100":5,"\u9650\u5236\u5b57\u7b26\u957f\u5ea630":5,"\u9650linux\u7cfb\u7edf":5,"\u9694\u79bb\u7ec4id":5,"\u96a7\u9053\u540d\u79f0":5,"\u96a7\u9053id":5,"\u96c6\u6210\u8f6f\u4ef6\u540d\u79f0":5,"\u9700\u4e0e\u7b7e\u540d\u7c7b\u578b\u4fdd\u6301\u4e00\u81f4":5,"\u9700\u5148\u8fdb\u884cbase64\u7f16\u7801\u683c\u5f0f\u8f6c\u6362":5,"\u9700\u586b\u5199projectid":5,"\u9700\u5f00\u542f\u6743\u9650":5,"\u9700\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u53cauhostid":5,"\u9700\u6307\u5b9aoffset":5,"\u9700\u786e\u4fdd\u5e73\u53f0\u5df2\u914d\u7f6e\u7269\u7406":5,"\u9700\u7ed3\u5408isboot\u786e\u5b9a\u5177\u4f53\u78c1\u76d8\u7c7b\u578b":5,"\u9700\u8981":5,"\u9700\u8981\u4fdd\u7559\u7684vpc\u7f51\u6bb5":5,"\u9700\u8981\u5217\u51fa\u7684\u5907\u4efd\u6587\u4ef6\u7c7b\u578b":5,"\u9700\u8981\u521b\u5efa\u7684\u5de5\u4f5c\u6d41\u540d\u79f0":5,"\u9700\u8981\u521b\u5efa\u7684\u5de5\u4f5c\u6d41namespac":5,"\u9700\u8981\u5347\u7ea7\u7684\u7a7a\u95f4\u7684groupid":5,"\u9700\u8981\u5347\u7ea7\u7684\u7a7a\u95f4\u7684spaceid":5,"\u9700\u8981\u5378\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u9700\u8981\u540c\u65f6\u5305\u542b\u4e24\u9879\u6216\u4ee5\u4e0a":5,"\u9700\u8981\u540c\u65f6\u8bbe\u7f6ebackupdate\u5b57\u6bb5":5,"\u9700\u8981\u548c":5,"\u9700\u8981\u5907\u4efd\u6587\u4ef6":5,"\u9700\u8981\u5927\u4e8e\u539fsize":5,"\u9700\u8981\u6062\u590d\u7684\u76d8id":5,"\u9700\u8981\u6302\u8f7d\u7684udisk\u5b9e\u4f8bid":5,"\u9700\u8981\u6307\u5b9a\u6570\u636e\u4e2d\u5fc3\u53cauhostid\u4e24\u4e2a\u53c2\u6570\u7684\u503c":5,"\u9700\u8981\u6307\u5b9amongo\u7684\u89d2\u8272":5,"\u9700\u8981\u66f4\u65b0\u7684vsid":5,"\u9700\u8981\u6dfb\u52a0\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u7684\u8d1f\u8f7d\u5747\u8861\u5b9e\u4f8bid":5,"\u9700\u8981\u6dfb\u52a0\u5185\u5bb9\u8f6c\u53d1\u7b56\u7565\u7684vserver\u5b9e\u4f8bid":5,"\u9700\u8981\u7ed9\u51fa\u6570\u636e\u4e2d\u5fc3":5,"\u9700\u8981\u83b7\u53d6\u7684\u5185\u5bb9\u5237\u65b0\u7684\u72b6\u6001":5,"\u9700\u8981\u83b7\u53d6\u7684\u5185\u5bb9\u9884\u70ed\u7684\u72b6\u6001":5,"\u9700\u8981\u8bbe\u7f6e\u6570\u636e\u65b9\u821f\u7684udisk\u7684id":5,"\u9700\u8981\u8fd4\u56de\u7684\u5171\u4eab\u5e26\u5bbdid":5,"\u975e\u5171\u4eab\u5e26\u5bbd":5,"\u975e\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f":5,"\u975e\u5171\u4eab\u5e26\u5bbd\u6a21\u5f0f\u5fc5\u987b\u6307\u5b9a\u975e0mbps\u5e26\u5bbd":5,"\u975e\u52a0\u5bc6\u76d8":5,"\u975e\u8d1f\u6574\u6570":5,"\u975e\u8d44\u6e90\u81ea\u8eabid":5,"\u975e\u9ed8\u8ba4\u9879\u76ee\u8d44\u6e90":5,"\u975essd\u8d44\u6e90\u4e0d\u518d\u63d0\u4f9b":5,"\u9879\u76ee\u4e0b\u6210\u5458\u6570\u91cf":5,"\u9879\u76ee\u4e0b\u8d44\u6e90\u6570\u91cf":5,"\u9879\u76ee\u540d\u79f0":5,"\u9879\u76ee\u603b\u6570":5,"\u9879\u76eeid":5,"\u9884\u4ed8\u8d39":5,"\u9884\u53d6\u4efb\u52a1\u6ca1\u6709":5,"\u9884\u70ed\u4efb\u52a1\u7684\u603b\u6570":5,"\u9884\u70edurl\u5217\u8868":5,"\u9999\u6e2f":5,"\u9999\u6e2f\u5bb9\u91cf\u578b\u5fc5\u987b\u4e3a100\u7684\u6574\u6570\u500d":5,"\u9a8c\u8bc1\u7801\u7c7b":5,"\u9a8c\u8bc1\u7801\u7c7b\u77ed\u4fe1\u6a21\u677f":5,"\u9ad8":5,"\u9ad8\u53ef\u7528":5,"\u9ad8\u53ef\u7528\u67b6\u6784":5,"\u9ad8\u53ef\u7528\u7248udb\u5b9e\u4f8b":5,"\u9ad8\u53ef\u7528\u90e8\u7f72\u5b9e\u4f8b":5,"\u9ad8\u6027\u80fdumem":5,"\u9ed1\u540d\u5355":5,"\u9ed8\u8ba4":5,"\u9ed8\u8ba40":5,"\u9ed8\u8ba41\u70b9":5,"\u9ed8\u8ba41g":5,"\u9ed8\u8ba41gb":5,"\u9ed8\u8ba420":5,"\u9ed8\u8ba424\u5c0f\u65f6":5,"\u9ed8\u8ba427017":5,"\u9ed8\u8ba43\u70b9":5,"\u9ed8\u8ba47\u6b21":5,"\u9ed8\u8ba480":5,"\u9ed8\u8ba4\u4e0d\u4f7f\u7528":5,"\u9ed8\u8ba4\u4e0d\u5199":5,"\u9ed8\u8ba4\u4e0d\u5206\u914dipv6":5,"\u9ed8\u8ba4\u4e0d\u586b":5,"\u9ed8\u8ba4\u4e0d\u5e26\u5916\u7f51":5,"\u9ed8\u8ba4\u4e0d\u66f4\u6539":5,"\u9ed8\u8ba4\u4e0d\u8fd4\u56de":5,"\u9ed8\u8ba4\u4e0e\u6e90vpc\u540c\u5730\u57df":5,"\u9ed8\u8ba4\u4e0e\u6e90vpc\u540c\u9879\u76ee":5,"\u9ed8\u8ba4\u4e3a":5,"\u9ed8\u8ba4\u4e3a0":5,"\u9ed8\u8ba4\u4e3a1":5,"\u9ed8\u8ba4\u4e3a1\u53f0":5,"\u9ed8\u8ba4\u4e3a20":5,"\u9ed8\u8ba4\u4e3a24":5,"\u9ed8\u8ba4\u4e3a50":5,"\u9ed8\u8ba4\u4e3a\u4e0d\u66f4\u6539":5,"\u9ed8\u8ba4\u4e3a\u5168\u90e8\u5730\u57df":5,"\u9ed8\u8ba4\u4e3a\u5168\u90e8\u8d44\u6e90\u7c7b\u578b":5,"\u9ed8\u8ba4\u4e3a\u5168\u90e8\u9879\u76ee":5,"\u9ed8\u8ba4\u4e3a\u52a0\u901f\u57df\u540d":5,"\u9ed8\u8ba4\u4e3a\u542f\u7528":5,"\u9ed8\u8ba4\u4e3a\u5f53\u524d\u5730\u57df\u7684\u9ed8\u8ba4\u5b50\u7f51":5,"\u9ed8\u8ba4\u4e3a\u5f53\u524d\u5730\u57df\u7684\u9ed8\u8ba4vpc":5,"\u9ed8\u8ba4\u4e3a\u6309\u6708\u4ed8\u8d39":5,"\u9ed8\u8ba4\u4e3a\u6708\u4ed8":5,"\u9ed8\u8ba4\u4e3a\u6807\u51c6\u955c\u50cf":5,"\u9ed8\u8ba4\u4e3a\u6e90vpc\u6240\u5728\u5730\u57df":5,"\u9ed8\u8ba4\u4e3a\u6e90vpc\u6240\u5728\u9879\u76eeid":5,"\u9ed8\u8ba4\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u4e3a\u7acb\u5373\u5f00\u901a":5,"\u9ed8\u8ba4\u4e3a\u7cfb\u7edf\u81ea\u52a8\u5206\u914d\u5185\u7f51":5,"\u9ed8\u8ba4\u4e3a\u83b7\u53d6\u4e09\u79cd\u4ef7\u683c":5,"\u9ed8\u8ba4\u4e3a\u8fd4\u56de\u6240\u6709\u9632\u706b\u5899":5,"\u9ed8\u8ba4\u4e3abandwidth":5,"\u9ed8\u8ba4\u4e3adatadisk":5,"\u9ed8\u8ba4\u4e3adefault":5,"\u9ed8\u8ba4\u4e3adynam":5,"\u9ed8\u8ba4\u4e3afals":5,"\u9ed8\u8ba4\u4e3alocaldisk":5,"\u9ed8\u8ba4\u4e3ams_redi":5,"\u9ed8\u8ba4\u4e3aphost":5,"\u9ed8\u8ba4\u4e3asubnet":5,"\u9ed8\u8ba4\u4e3atrue":5,"\u9ed8\u8ba4\u4e3avip":5,"\u9ed8\u8ba4\u4f1a\u83b7\u53d6\u53d1\u5e03\u7248\u672c\u5bf9\u5e94\u7684workflow":5,"\u9ed8\u8ba4\u4f7f\u7528\u4e3b\u5e93\u7684\u914d\u7f6e":5,"\u9ed8\u8ba4\u4f7f\u7528\u539f\u955c\u50cf":5,"\u9ed8\u8ba4\u503c":5,"\u9ed8\u8ba4\u503c1":5,"\u9ed8\u8ba4\u503c\u4e3a":5,"\u9ed8\u8ba4\u503c\u4e3a0":5,"\u9ed8\u8ba4\u503c\u4e3a1":5,"\u9ed8\u8ba4\u503c\u4e3a10":5,"\u9ed8\u8ba4\u503c\u4e3a20":5,"\u9ed8\u8ba4\u503c\u4e3a60":5,"\u9ed8\u8ba4\u503c\u4e3a80":5,"\u9ed8\u8ba4\u503c\u4e3a\u5f53\u524d\u5b9e\u4f8b\u7684\u5185\u5b58\u5927\u5c0f":5,"\u9ed8\u8ba4\u503c\u4e3a\u5f53\u524d\u5b9e\u4f8b\u7684\u6570\u636e\u76d8\u5927\u5c0f":5,"\u9ed8\u8ba4\u503c\u4e3a\u5f53\u524d\u5b9e\u4f8b\u7684cpu\u6838\u6570":5,"\u9ed8\u8ba4\u503c\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u503c\u4e3anormal":5,"\u9ed8\u8ba4\u503c\u662f\u8be5\u4e3b\u673a\u5f53\u524d\u6570\u636e\u76d8\u5927\u5c0f":5,"\u9ed8\u8ba4\u5168\u90e8":5,"\u9ed8\u8ba4\u5168\u90e8\u533a\u57df":5,"\u9ed8\u8ba4\u5168\u90e8\u57df\u540d":5,"\u9ed8\u8ba4\u5168\u90e8\u83b7\u53d6":5,"\u9ed8\u8ba4\u5173\u95ed":5,"\u9ed8\u8ba4\u5173\u95ed\u4f1a\u8bdd\u4fdd\u6301":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1\u7c7b\u578b\u4e0b\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1\u7c7b\u578b\u4e0b\u8fd4\u56de\u5f53\u524drs\u603b\u6570":5,"\u9ed8\u8ba4\u5185\u5bb9\u8f6c\u53d1\u89c4\u5219\u4e0b\u4e3a0":5,"\u9ed8\u8ba4\u524d\u4e00\u5929\u7684\u5f53\u524d\u65f6\u95f4":5,"\u9ed8\u8ba4\u5355\u4f4d\u79d2":5,"\u9ed8\u8ba4\u5373\u4e3a\u5916\u7f51\u6a21\u5f0f":5,"\u9ed8\u8ba4\u5f53":5,"\u9ed8\u8ba4\u662f":5,"\u9ed8\u8ba4\u662f\u52a0\u901f\u57df\u540d":5,"\u9ed8\u8ba4\u662ffals":5,"\u9ed8\u8ba4\u662fno":5,"\u9ed8\u8ba4\u662fnormal":5,"\u9ed8\u8ba4\u666e\u901a":5,"\u9ed8\u8ba4\u67e5\u8be2\u6240\u6709\u955c\u50cf":5,"\u9ed8\u8ba4\u6839\u636e\u914d\u7f6e\u673a\u578b":5,"\u9ed8\u8ba4\u7248\u672c3":5,"\u9ed8\u8ba4\u79fb\u51fa\u8be5\u5171\u4eab\u5e26\u5bbd\u4e0b\u6240\u6709\u7684eip":5,"\u9ed8\u8ba4\u8303\u56f41":5,"\u9ed8\u8ba4\u83b7\u53d6\u8d26\u53f7\u4e0b\u7684\u6240\u6709\u57df\u540d\u4fe1\u606f":5,"\u9ed8\u8ba4\u8fd4\u56de\u4e3a\u7a7a":5,"\u9ed8\u8ba4\u8fd4\u56de\u6240\u6709\u7c7b\u578b":5,"\u9ed8\u8ba4\u9009\u62e9\u6240\u6709\u72b6\u6001":5,"\u9ed8\u8ba4\u9009\u9879":5,"\u9ed8\u8ba4\u914d\u7f6eid":5,"\u9ed8\u8ba4\u975eweb\u9632\u706b\u5899":5,"\u9ed8\u8ba4disabl":5,"\u9ed8\u8ba4dynam":5,"\u9ed8\u8ba4fals":5,"\u9ed8\u8ba4http":5,"\u9ed8\u8ba4ipv4":5,"\u9ed8\u8ba4public":5,"\u9ed8\u8ba4raid10":5,"\u9ed8\u8ba4redi":5,"\u9ed8\u8ba4root":5,"\u9ed8\u8ba4web\u9632\u706b\u5899":5,"abroad\u4ee3\u8868\u6d77\u5916":5,"activity\u7684\u540d\u5b57":5,"activity\u7684\u7c7b\u578b":5,"activity\u7684\u8d85\u65f6\u65f6\u95f4":5,"activity\u7684\u8f93\u5165":5,"activity\u7684\u8f93\u51fa":5,"activity\u7684\u91cd\u8bd5\u6b21\u6570":5,"advanced\u8868\u793a\u6027\u80fd\u578b":5,"api\u652f\u6301":5,"app\u5e94\u7528\u7684\u5168\u79f0\u6216\u7b80\u79f0":5,"area\u548careacode\u4e24\u8005\u5fc5\u586b\u4e00\u4e2a":5,"area\u548careacode\u4e24\u8005\u5fc5\u586b\u5176\u4e2d\u4e4b\u4e00":5,"areacode\u533a\u57df\u5185\u603b\u4f7f\u7528\u6d41\u91cf":5,"areacode\u533a\u57df\u5185\u603b\u5269\u4f59\u6d41\u91cf":5,"areacode\u533a\u57df\u5185\u603b\u8d2d\u4e70\u6d41\u91cf":5,"bandwidth\u6309\u5e26\u5bbd\u4ed8\u8d39":5,"basic\u8868\u793a\u5bb9\u91cf\u578b":5,"bd\u5b9e\u4f8bid":5,"begintime\u4e5f\u53ef\u4ee5\u4e0d\u8d4b\u503c":5,"begintime\u5fc5\u987b\u8d4b\u503c":5,"begintime\u9ed8\u8ba4\u4e3a\u5f53\u524d\u65f6\u95f4\u524d\u4e00\u5929\u65f6\u95f4":5,"binlog\u5907\u4efd":5,"binlog\u6587\u4ef6\u540d":5,"binlog\u6587\u4ef6\u5927\u5c0f":5,"binlog\u6587\u4ef6\u751f\u6210\u65f6\u95f4":5,"binlog\u6587\u4ef6\u7ed3\u675f\u65f6\u95f4":5,"c\u6570\u636e\u4e2d\u5fc3\u6700\u5c0f\u652f\u63011024":5,"ca\u8bc1\u4e66":5,"ca\u8bc1\u4e66\u4e0d\u7528\u4f20\u9012":5,"ca\u8bc1\u4e66\u5206\u522b\u4f20\u8fc7\u6765":5,"ca\u8bc1\u4e66id":5,"cachettl\u548ccacheunit\u5f3a\u5236\u4e0d\u751f\u6548":5,"cdn\u56de\u5ba2\u6237\u6e90\u7ad9\u90e8\u5206":5,"cdn\u57df\u540d":5,"check\u4ee3\u8868\u5ba1\u6838\u4e2d":5,"checkfail\u4ee3\u8868\u5ba1\u6838\u5931\u8d25":5,"checksuccess\u4ee3\u8868\u5ba1\u6838\u901a\u8fc7":5,"class":[1,5],"cloudinit\u65b9\u5f0f\u4e0b":5,"cn\u4ee3\u8868\u56fd\u5185":5,"configsvr\u8282\u70b9\u548c\u4ece\u5907\u4efd\u6062\u590d\u5b9e\u4f8b":5,"cpu\u4e2a\u6570":5,"cpu\u4e3b\u9891":5,"cpu\u578b\u53f7":5,"cpu\u6838\u6570":5,"dataset\u4e2d\u7684\u5143\u7d20\u4e2a\u6570":5,"db\u5173\u95ed\u72b6\u6001\u4e0b\u5347\u964d\u7ea7":5,"db\u5907\u4efd\u6587\u4ef6\u540d\u79f0":5,"db\u5b9e\u4f8b\u4f7f\u7528\u7684\u914d\u7f6e\u53c2\u6570\u7ec4id":5,"db\u5b9e\u4f8b\u4fee\u6539\u65f6\u95f4":5,"db\u5b9e\u4f8b\u521b\u5efa\u65f6\u95f4":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u516c\u7f51\u7684\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u5185\u7f51\u7684\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u7684\u516c\u7f51\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efd\u6587\u4ef6\u7684\u5185\u7f51\u5730\u5740":5,"db\u5b9e\u4f8b\u5907\u4efdid":5,"db\u5b9e\u4f8b\u6240\u5728\u53ef\u7528\u533a":5,"db\u5b9e\u4f8b\u6570\u636e\u6587\u4ef6\u5927\u5c0f":5,"db\u5b9e\u4f8b\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f":5,"db\u5b9e\u4f8b\u7684id":5,"db\u5b9e\u4f8b\u78c1\u76d8\u5df2\u4f7f\u7528\u7a7a\u95f4":5,"db\u5b9e\u4f8b\u7c7b\u578b":5,"db\u5b9e\u4f8b\u7cfb\u7edf\u6587\u4ef6\u5927\u5c0f":5,"db\u5b9e\u4f8b\u865aip":5,"db\u5b9e\u4f8b\u865aip\u7684mac\u5730\u5740":5,"db\u5b9e\u4f8b\u89d2\u8272":5,"db\u5b9e\u4f8b\u8fc7\u671f\u65f6\u95f4":5,"db\u5b9e\u4f8bbinlog\u5907\u4efdid":5,"db\u5b9e\u4f8bid":5,"db\u72b6\u6001\u6807\u8bb0":5,"db\u7684\u9ed1\u540d\u5355\u5217\u8868":5,"db\u79cd\u7c7b":5,"db\u7c7b\u578bid":5,"db\u8d2d\u4e70\u591a\u5c11\u4e2a":5,"default":[1,5,6],"default\u5373\u4e3a\u672a\u5206\u7ec4":5,"delete\u4ee3\u8868\u5220\u9664\u52a0\u901f":5,"deleteing\u4ee3\u8868\u5220\u9664\u4e2d":5,"disable\u4ee3\u8868\u505c\u6b62\u52a0\u901f":5,"disable\u8868\u793a\u5173\u95ed":5,"disableing\u4ee3\u8868\u6b63\u5728\u505c\u6b62\u52a0\u901f\u4e2d":5,"disk\u6ce8\u91ca":5,"disks\u6570\u7ec4\u4e2d\u6709\u4e14\u53ea\u80fd\u6709\u4e00\u5757\u76d8\u662f\u7cfb\u7edf\u76d8":5,"download\u4ee3\u8868\u4e0b\u8f7d":5,"eip\u5e26\u5bbd\u503c":5,"eip\u7684\u5916\u7f51\u5e26\u5bbd":5,"eip\u7684\u8ba1\u8d39\u6a21\u5f0f":5,"eip\u7684\u8d44\u6e90id":5,"eip\u76d1\u63a7\u6307\u6807":5,"eip\u8d44\u6e90id":5,"eipset\u4e2d\u7684\u5143\u7d20\u4e2a\u6570":5,"enable\u4ee3\u8868\u52a0\u901f\u4e2d":5,"enable\u6216dis":5,"enableing\u4ee3\u8868\u6b63\u5728\u5f00\u542f\u52a0\u901f":5,"endtime\u9ed8\u8ba4\u4e3a\u5f53\u524d\u65f6\u95f4":5,"endtime\u9ed8\u8ba4\u5f53\u524d\u65f6\u95f4":5,"esp\u6216ah":5,"false\u4e3a\u5426":5,"false\u4e3a\u672a\u5f00\u542f":5,"false\u4e3a\u79c1\u6709":5,"false\u5173\u95ed":5,"false\u52a0\u5bc6\u5fc5\u987b\u4f20\u5165\u5bf9\u5e94\u7684\u7684kmskeyid":5,"false\u6807\u8bc6\u53ea\u89e3\u7ed1eip":5,"false\u8868\u793a\u4e0d\u4f7f\u7528":5,"false\u8bbe\u7f6e\u4e3a\u79c1\u6709":5,"feature\u65f6\u53ef\u586b\u5199\u6b64\u5b57\u6bb5":5,"file\u4ee3\u8868\u6587\u4ef6\u5237\u65b0":5,"float":[1,5],"function":[1,2],"getprojectlist\u63a5\u53e3":5,"globalssh\u7684\u5730\u533a\u7f16\u7801":5,"globalssh\u8986\u76d6\u7684\u5730\u533a":5,"gpu\u4e0ecpu":5,"gpu\u4e2a\u6570":5,"gpu\u5361\u6838\u5fc3\u6570":5,"gpu\u7c7b\u578b":5,"gputype\u76f8\u5173":5,"group\u7684id":5,"hadoop\u8282\u70b9":5,"http100\u6570\u91cf":5,"http101\u6570\u91cf":5,"http102\u6570\u91cf":5,"http200\u6570\u91cf":5,"http201\u6570\u91cf":5,"http202\u6570\u91cf":5,"http203\u6570\u91cf":5,"http204\u6570\u91cf":5,"http205\u6570\u91cf":5,"http206\u6570\u91cf":5,"http207\u6570\u91cf":5,"http300\u6570\u91cf":5,"http301\u6570\u91cf":5,"http302\u6570\u91cf":5,"http303\u6570\u91cf":5,"http304\u6570\u91cf":5,"http305\u6570\u91cf":5,"http306\u6570\u91cf":5,"http307\u6570\u91cf":5,"http400\u6570\u91cf":5,"http401\u6570\u91cf":5,"http402\u6570\u91cf":5,"http403\u6570\u91cf":5,"http404\u6570\u91cf":5,"http405\u6570\u91cf":5,"http406\u6570\u91cf":5,"http407\u6570\u91cf":5,"http408\u6570\u91cf":5,"http409\u6570\u91cf":5,"http410\u6570\u91cf":5,"http411\u6570\u91cf":5,"http412\u6570\u91cf":5,"http413\u6570\u91cf":5,"http414\u6570\u91cf":5,"http415\u6570\u91cf":5,"http416\u6570\u91cf":5,"http417\u6570\u91cf":5,"http418\u6570\u91cf":5,"http421\u6570\u91cf":5,"http422\u6570\u91cf":5,"http423\u6570\u91cf":5,"http424\u6570\u91cf":5,"http425\u6570\u91cf":5,"http426\u6570\u91cf":5,"http449\u6570\u91cf":5,"http451\u6570\u91cf":5,"http500\u6570\u91cf":5,"http501\u6570\u91cf":5,"http502\u6570\u91cf":5,"http503\u6570\u91cf":5,"http504\u6570\u91cf":5,"http505\u6570\u91cf":5,"http506\u6570\u91cf":5,"http507\u6570\u91cf":5,"http509\u6570\u91cf":5,"http510\u6570\u91cf":5,"http\u68c0\u67e5":5,"https\u534f\u8bae\u4e0b\u5fc5\u4f20":5,"https\u65f6\u6709\u6548":5,"ike\u52a0\u5bc6\u7b97\u6cd5":5,"ike\u5bf9\u7aefid\u6807\u8bc6":5,"ike\u672c\u5730id\u6807\u8bc6":5,"ike\u7248\u672c":5,"ike\u79d8\u94a5\u751f\u5b58\u65f6\u95f4":5,"ike\u8ba4\u8bc1\u7b97\u6cd5":5,"ike\u9884\u5171\u4eab\u79d8\u94a5":5,"ikedh\u7ec4":5,"ikev1\u534f\u5546\u6a21\u5f0f":5,"import":[3,4,6],"initializing\u8868\u793a\u5728\u521d\u59cb\u5316":5,"int":[1,2,5],"ip\u4fe1\u606f":5,"ip\u5730\u5740":5,"ip\u5730\u5740\u5bf9\u5e94\u7684\u5b50\u7f51":5,"ip\u5730\u5740\u5bf9\u5e94\u7684vpc":5,"ip\u5bf9\u5e94\u5e26\u5bbd":5,"ip\u5bf9\u5e94\u7684\u5e26\u5bbd":5,"ip\u6216\u8005\u63a9\u7801":5,"ip\u7248\u672c":5,"ip\u7c7b\u578b":5,"ip\u8d44\u6e90id":5,"ipsec\u4e2dsa\u7684\u751f\u5b58\u65f6\u95f4":5,"ipsec\u901a\u9053\u4e2d\u4f7f\u7528\u7684\u52a0\u5bc6\u7b97\u6cd5":5,"ipsec\u901a\u9053\u4e2d\u4f7f\u7528\u7684\u8ba4\u8bc1\u7b97\u6cd5":5,"ipv4\u6216\u8005ipv6":5,"isinudbc\u4e3atru":5,"kafka\u6d88\u606f\u961f\u5217":5,"keypair\u516c\u94a5":5,"lb\u540d\u79f0":5,"lb\u5b9e\u4f8b\u6240\u5728\u7684":5,"leastconn\u53ea\u5728\u8bf7\u6c42\u4ee3\u7406\u4e2d\u4f7f\u7528":5,"limit\u7528\u4e8e\u5217\u8868\u64cd\u4f5c":5,"listentype\u4e3apacketstransmit\u65f6\u8868\u793a\u8fde\u63a5\u4fdd\u6301\u7684\u65f6\u95f4":5,"listentype\u4e3arequestproxy\u65f6\u8868\u793a\u7a7a\u95f2\u8fde\u63a5\u7684\u56de\u6536\u65f6\u95f4":5,"loginmode\u4e0d\u53ef\u53d8\u66f4":5,"loginmode\u4e3akeypair\u65f6\u6b64\u9879\u5fc5\u987b":5,"mac\u5730\u5740":5,"machinetype\u4e3ag\u65f6\u5fc5\u586b":5,"master\u5b9e\u4f8b\u7684dbid":5,"master\u8282\u70b9":5,"memcache\u7248\u672c\u4fe1\u606f":5,"message\u4e2d\u663e\u793a\u5177\u4f53\u9519\u8bef\u63cf\u8ff0":5,"mongodb\u5219\u4e0d\u9002\u7528":5,"mongodb\u591a\u79cd\u89d2\u8272":5,"mongodb\u6309\u7248\u672c\u7ec6\u5206\u5404\u6709\u4e00\u4e2aid":5,"mongodb\u6309\u7248\u672c\u7ec6\u5206\u67091":5,"mongodb\u9ed8\u8ba427017":5,"mysql\u533a\u5206mast":5,"mysql\u5b9e\u4f8b\u652f\u6301\u7269\u7406\u5907\u4efd":5,"mysql\u9ed8\u8ba43306":5,"n\u4e3a\u81ea\u7136\u6570":5,"n\u4ece\u81ea\u7136\u65700\u5f00\u59cb":5,"n\u53ef\u4e3a0":5,"n\u5b57\u6bb5\u5fc5\u987b\u4ee5":5,"n\u65b9\u5f0f\u4f20\u5165":5,"name\u5fc5\u987b\u586b\u5199":5,"nat\u7684\u7c7b\u578b":5,"nat\u7c7b\u578b":5,"nat\u7f51\u5173":5,"nat\u7f51\u5173\u5b9e\u4f8b\u6240\u5728\u7684":5,"nat\u7f51\u5173\u5b9e\u4f8b\u6240\u5728\u7684\u5b50\u7f51":5,"nat\u7f51\u5173\u767d\u540d\u5355\u8d44\u6e90id":5,"nat\u7f51\u5173\u767d\u540d\u5355id":5,"nat\u7f51\u5173\u7684":5,"nat\u7f51\u5173\u7c7b\u578b":5,"nat\u7f51\u5173\u7ed1\u5b9a\u7684\u5b89\u5168\u7ec4id":5,"nat\u7f51\u5173id":5,"new":[1,3,4],"nfsv3\u8868\u793anf":5,"nfsv4\u8868\u793anf":5,"no\u4e3a\u4e0d\u53ef\u4ee5\u5347\u7ea7":5,"no\u4e3a\u5173\u95ed\u65b9\u821f":5,"none\u548cserverinsert":5,"none\u6216serverinsert":5,"normal\u548csata_ssd":5,"normal\u8868\u793a\u521d\u59cb\u5316\u5b8c\u6210":5,"nullrefer\u4e3afalse\u4ee3\u8868\u4e0d\u5141\u8bb8nul":5,"ostype\u4e3aother\u65f6":5,"phost\u7684\u8d44\u6e90id\u6570\u7ec4":5,"phost\u8d44\u6e90id":5,"png\u6587\u4ef6":5,"postgesql\u6309\u7248\u672c\u7ec6\u5206":5,"postgresql\u9ed8\u8ba45432":5,"primary\u8282\u70b9\u7684dbid":5,"private\u79c1\u6709\u4ed3\u5e93":5,"protocolversion\u5b57\u6bb5\u4e3a0\u6216\u6ca1\u6709\u8be5\u5b57\u6bb5\u65f6":5,"protocolversion\u5b57\u6bb5\u4e3a1\u4e14disktype\u4e0d\u4e3a\u7a7a\u65f6":5,"protocolversion\u5b57\u6bb5\u4e3a1\u4e14disktype\u4e3a\u7a7a\u65f6":5,"protocolversion\u5b57\u6bb5\u4e3a1\u65f6":5,"public":[3,4,5],"public\u516c\u5171\u4ed3\u5e93":5,"quantity\u5c31\u662f2":5,"raid\u914d\u7f6e":5,"redhat\u7b49":5,"redis\u6240\u5728\u53ef\u7528\u533a":5,"redis\u65e0single\u7c7b\u578b":5,"redis\u7248\u672c\u4fe1\u606f":5,"redis\u7ec4\u540d\u79f0":5,"refer\u5217\u8868":5,"refer\u8bbf\u95ee":5,"refer\u914d\u7f6e\u5f00\u5173":5,"refertype\u4e3a\u767d\u540d\u5355\u65f6":5,"region\u4e2d\u7b26\u5408\u6761\u4ef6\u7684\u6240\u6709eip\u7684\u5e26\u5bbd\u7528\u91cf":5,"region\u4e2d\u7b26\u5408\u6761\u4ef6\u7684\u7684\u6240\u6709eip":5,"remark\u5fc5\u987b\u586b\u51991\u4e2a\u53ca\u4ee5\u4e0a":5,"remark\u90fd\u4e3a\u7a7a\u5219\u62a5\u9519":5,"return":[1,2,6],"routeruleid\u6765\u81eadescriberoutetable\u4e2d":5,"routetables\u5b57\u6bb5\u7684\u6570\u91cf":5,"rs\u5168\u90e8\u8fd0\u884c\u5f02\u5e38":5,"rs\u5168\u90e8\u8fd0\u884c\u6b63\u5e38":5,"rs\u5bf9\u5e94\u7684uhost":5,"rs\u7684\u8d44\u6e90id":5,"rs\u90e8\u5206\u8fd0\u884c\u5f02\u5e38":5,"rserver\u6240\u5c5e\u7684vserver\u7684id":5,"rserver\u7684":5,"rserver\u7684id":5,"rssd\u6570\u636e\u76d8":5,"shardsrv\u5206\u4e3adatanode\u548carbiter\u4e24\u79cd\u6a21\u5f0f":5,"size\u6700\u5c0f\u4e3a1024gb":5,"size\u6700\u5c0f\u4e3a500gb":5,"slave\u6240\u5728\u53ef\u7528\u533a":5,"slowlog\u5907\u4efd":5,"source\u548cweightroundrobin\u5728\u8bf7\u6c42\u4ee3\u7406\u548c\u62a5\u6587\u8f6c\u53d1\u4e2d\u4f7f\u7528":5,"sqlserver\u5e10\u53f7":5,"ssd\u4e91\u76d8":5,"ssd\u5927\u5bb9\u91cf\u673a\u578b":5,"ssd\u6570\u636e\u76d8":5,"ssd\u673a\u578b":5,"ssd\u76d8":5,"ssd\u7c7b\u578b":5,"ssd\u7cfb\u7edf\u76d8":5,"ssd\u9ad8\u6027\u80fd\u5927\u5bb9\u91cf\u673a\u578b":5,"ssd\u9ad8\u6027\u80fd\u673a\u578b":5,"ssh\u767b\u9646\u7aef\u53e3":5,"ssh\u7aef\u53e3":5,"ssl\u8ba4\u8bc1\u6a21\u5f0f":5,"ssl\u8bc1\u4e66\u7684\u540d\u5b57":5,"ssl\u8bc1\u4e66\u7684\u5b8c\u6574\u5185\u5bb9":5,"ssl\u8bc1\u4e66\u7684id":5,"static":5,"status\u4e0d\u7b49\u4e8e2":5,"stream\u4ee3\u8868\u89c6\u9891":5,"super":5,"tablename\u4e3a\u6307\u5b9a\u8868":5,"tag\u540d\u79f0":5,"tag\u5fc5\u987b\u586b\u5199":5,"tag\u603b\u6570":5,"tag\u7684\u4e2a\u6570":5,"tcp\u548cudp\u534f\u8bae\u53ea\u652f\u6301port\u7c7b\u578b":5,"td\u9000\u8ba2":5,"timerange\u65f6\u95f4\u6bb5\u5185\u751f\u6548":5,"timestamp\u8868\u793a":5,"traffic\u4ee3\u8868\u6309\u6d41\u91cf\u5305\u8ba1\u8d39":5,"true":[1,5],"true\u4e3a\u516c\u6709":5,"true\u4e3a\u5f00\u542f":5,"true\u4e3a\u662f":5,"true\u5220\u9664":5,"true\u6253\u5f00":5,"true\u8868\u793a\u4f1a\u91ca\u653e\u7ed1\u5b9a\u7684eip":5,"true\u8868\u793a\u903b\u8f91\u5907\u4efd\u65f6\u662f\u4f7f\u7528":5,"true\u8bbe\u7f6e\u4e3a\u516c\u6709":5,"try":[3,4],"types\u4f5c\u4e3atype\u7684\u8865\u5145":5,"ucloud\u673a\u623f\u4ee3\u53f7\u6784\u6210\u7684\u6570\u7ec4":5,"udb\u5b9e\u4f8b\u6a21\u5f0f\u7c7b\u578b":5,"udb\u5b9e\u4f8b\u7684\u914d\u7f6e":5,"udb\u5b9e\u4f8b\u7684db\u7248\u672c\u5b57\u7b26\u4e32":5,"udb\u5b9e\u4f8b\u7c7b\u578b":5,"udb\u5b9e\u4f8b\u90e8\u7f72\u6a21\u5f0f":5,"udb\u6570\u636e\u5e93\u673a\u578b":5,"udb\u6570\u636e\u5e93\u673a\u578bid":5,"udbcid\u4e3a\u7a7a":5,"udisk\u540d\u5b57":5,"udisk\u5b9e\u4f8bid":5,"ufile\u79c1\u6709\u7a7a\u95f4\u5730\u5740":5,"uhost\u4e3b\u673a\u7684\u8d44\u6e90id":5,"uhost\u4e3b\u673a\u7684\u8d44\u6e90id\u6570\u7ec4":5,"uhost\u5b9e\u4f8b\u540d\u79f0":5,"uhost\u5b9e\u4f8b\u8d44\u6e90id":5,"uhost\u5b9e\u4f8bid":5,"uhost\u5b9e\u4f8bid\u96c6\u5408":5,"uhost\u5bc6\u7801":5,"uhost\u65b0\u5bc6\u7801":5,"uhost\u8d44\u6e90id":5,"uhostinstance\u603b\u6570":5,"ukmsmode\u4e3ayes\u65f6":5,"ulb\u540e\u7aefid":5,"ulb\u6240\u5728\u7684vpc\u7684id":5,"ulb\u6240\u5c5e\u7684\u4e1a\u52a1\u7ec4id":5,"ulb\u6240\u5c5e\u7684\u5b50\u7f51id":5,"ulb\u6240\u5c5e\u7684vpc":5,"ulb\u7684\u5185\u7f51ip":5,"ulb\u7684\u521b\u5efa\u65f6\u95f4":5,"ulb\u7684\u5230\u671f\u65f6\u95f4":5,"ulb\u7684\u8be6\u7ec6\u4fe1\u606f\u5217\u8868":5,"ulb\u8d44\u6e90id":5,"umem\u5185\u5b58\u7a7a\u95f4id":5,"umem\u5b9e\u4f8b\u8bbf\u95eeip":5,"umem\u5b9e\u4f8b\u8bbf\u95eeport":5,"unix\u65f6\u95f4\u6233":5,"uredis\u5bc6\u7801":5,"utc\u65f6\u95f4\u683c\u5f0f":5,"v1\u7248\u672c\u6982\u5ff5":5,"v2\u7248\u672c\u6982\u5ff5":5,"v3\u534f\u8bae":5,"v4\u534f\u8bae":5,"vip\u540d":5,"vip\u6570\u91cf":5,"vip\u6807\u793a":5,"vnc\u767b\u5f55\u7aef\u53e3":5,"vnc\u767b\u5f55ip":5,"vpc\u5173\u8054\u7684ipv6\u7f51\u6bb5":5,"vpc\u5173\u8054\u7684ipv6\u7f51\u6bb5\u6240\u5c5e\u8fd0\u8425\u5546":5,"vpc\u540d\u5b57":5,"vpc\u540d\u79f0":5,"vpc\u5730\u5740\u7a7a\u95f4":5,"vpc\u7684":5,"vpc\u7684\u5730\u5740\u7a7a\u95f4":5,"vpc\u7684\u603b\u6570":5,"vpc\u7684id":5,"vpc\u77edid":5,"vpc\u7c7b\u578b":5,"vpc\u7f51\u6bb5":5,"vpc\u8d44\u6e90id":5,"vpn\u7f51\u5173\u540d\u5b57":5,"vpn\u96a7\u9053\u603b\u6570":5,"vpn\u96a7\u9053\u7684\u8d44\u6e90id":5,"vs\u7684\u534f\u8bae":5,"vs\u7684\u7aef\u53e3":5,"vserver\u4f1a\u8bdd\u4fdd\u6301\u65b9\u5f0f":5,"vserver\u4f1a\u8bdd\u4fdd\u6301\u6a21\u5f0f":5,"vserver\u534f\u8bae\u7c7b\u578b":5,"vserver\u540e\u7aef\u7aef\u53e3":5,"vserver\u5b9e\u4f8b\u540d\u79f0":5,"vserver\u5b9e\u4f8b\u7684\u534f\u8bae":5,"vserver\u5b9e\u4f8b\u7684\u540d\u5b57":5,"vserver\u5b9e\u4f8b\u7684id":5,"vserver\u5b9e\u4f8bid":5,"vserver\u670d\u52a1\u7aef\u53e3":5,"vserver\u7684":5,"vserver\u7684\u6570\u91cf":5,"vserver\u7684\u8fd0\u884c\u72b6\u6001":5,"vserver\u7684id":5,"vserver\u76d1\u542c\u534f\u8bae\u4e3a":5,"vserver\u8d1f\u8f7d\u5747\u8861\u6a21\u5f0f":5,"vserver\u8d1f\u8f7d\u5747\u8861\u7684\u6a21\u5f0f":5,"web\u4ee3\u8868\u7f51\u7ad9":5,"web\u63a8\u8350\u9632\u706b\u5899":5,"windows\u4e0d\u80fd\u5305\u542b\u7528\u6237\u540d":5,"windows\u7b49":5,"ws\u7b49":5,"year\u7b49":5,"yes\u4e3a\u5f00\u542f\u65b9\u821f":5,"yes\u5373\u53ef\u4ee5\u5347\u7ea7":5,"zone\u4e0d\u586b\u8868\u793a\u591a\u53ef\u7528\u533a":5,For:6,IPs:5,SAS:5,UFS:3,Used:5,Yes:5,a9q2:5,abc7:5,abc:5,abcdefghijklmnopqrstuvwxyz:2,abov:[3,4],abroad:5,abroadlog:5,acceleratingdomain:5,accept:5,access:[3,4],accessconf:5,account:1,accountnam:5,achiev:[2,6],action:[1,5],activ:5,activetunnel:5,activit:5,activitytempl:5,add:[1,5,6],add_vpc_network:5,address:5,addvpcnetwork:5,admin:5,administr:5,adminpassword:5,adminus:5,adress:5,after:2,agent:1,alarmstrategi:5,alarmtemplateid:5,alarmtemplateruleid:5,all:[2,5,6],alloc:5,allocate_backend:5,allocate_backend_batch:5,allocate_eip:5,allocate_share_bandwidth:5,allocate_udpn:5,allocate_vip:5,allocatebackend:5,allocatebackendbatch:5,allocateeip:5,allocatesharebandwidth:5,allocateudpn:5,allocatevip:5,allow:[5,6],allowedv:5,also:[1,6],amount:5,ani:2,apach:3,api:[1,4,5],apikei:1,apivers:5,append:1,applytyp:5,area:5,areacod:5,areaset:5,arg:1,argument:[1,2],arkswitchen:5,arrearag:5,associate_eip_with_share_bandwidth:5,associate_route_t:5,associateeipwithsharebandwidth:5,associateroutet:5,attach:5,attach_disk:5,attach_udisk:5,attachdisk:5,attachresourceid:5,attachudisk:5,attribut:1,auth:[1,5],authent:[3,4],authstat:5,auto:[1,5],autobackup:5,autorenew:5,avail:[1,5],availableip:5,b1d0:5,b64d:5,b64decod:2,b64encod:[2,3,4],back:6,backend:[1,5],backendid:5,backendset:5,backoff:[1,2],backoff_factor:1,backup:5,backup_udb_inst:5,backup_udb_instance_binlog:5,backup_udb_instance_error_log:5,backup_udb_instance_slow_log:5,backupbegintim:5,backupblacklist:5,backupcount:5,backupd:5,backupdur:5,backupendtim:5,backupfil:5,backupid:5,backupmethod:5,backupnam:5,backuppath:5,backups:5,backupswitch:5,backuptim:5,backuptyp:5,backupudbinst:5,backupudbinstancebinlog:5,backupudbinstanceerrorlog:5,backupudbinstanceslowlog:5,backupurl:5,backupzon:5,bandwidth:5,bandwidthchang:5,bandwidthdetail:5,bandwidthguarante:5,bandwidthinfo:5,bandwidthinfodetail:5,bandwidthlist:5,bandwidthpackageid:5,bandwidthtyp:5,bandwidthupperlimit:5,bar:1,base64:[2,5],base64ugfzc3dvcmqx:5,base:5,base_url:1,baseurl:1,basicimageid:5,basicimagenam:5,batch_describe_new_ucdn_domain:5,batchdescribenewucdndomain:5,bce8:5,befor:2,beforetim:5,begintim:5,beingclon:5,belong:1,between:6,bgp:5,bind:[3,4],bind_alarm_templ:5,bind_eip:5,bind_physical_ip:5,bind_security_group:5,bind_ssl:5,bindalarmtempl:5,bindeip:5,bindphysicalip:5,bindresourceid:5,bindresourcetyp:5,bindsecuritygroup:5,bindssl:5,bindvsinfo:5,binlog:5,binlog_backup:5,bitmap:5,bj1:5,bj2:[1,3,4,5,6],bkk:5,blacklist:5,blockprocesscount:5,bool:5,boot:5,bootdisksettyp:5,bootdiskspac:5,bootdiskst:5,bound:5,broadwel:5,builtin:1,busi:5,businessid:5,bwtype:5,c245:5,c6b9a46fd801:5,cacert:5,cacertificateid:5,cachebehavior:5,cacheconf:5,cachehost:5,cachettl:5,cacheunit:5,cacrt:5,calcul:1,call:2,can:[1,3,4,6],cannot:[3,4],captur:5,cascadelak:5,cdnbandwidth:5,cdnprotocol:5,cdnrequest:5,cdntype:5,cento:5,certif:5,certificatecont:5,certificateid:5,certificateinfo:5,certificatetyp:5,certnam:5,chang:3,changesg:5,channeltyp:5,chargenam:5,chargetyp:5,check:6,check_recover_udb_inst:5,check_udb_instance_to_ha_allow:5,checkrecoverudbinst:5,checkudbinstancetohaallow:5,chinamobil:5,citi:5,cjksa2:5,classtyp:5,clear_udb_log:5,clearudblog:5,client:[3,4,5],clienttimeout:5,clone:[3,4,5],clone_disk:5,clone_route_t:5,clone_udisk:5,clone_udisk_snapshot:5,clonedisk:5,cloneen:5,cloneroutet:5,cloneudisk:5,cloneudisksnapshot:5,cloud:2,cloud_norm:5,cloud_rssd:5,cloud_ssd:[3,4,5],cloudinit:5,cluserrol:5,cluster:5,clusterrol:5,cmk:5,cmkid:5,cmkidalia:5,cmkidstatu:5,cname:5,cnlog:5,code:[1,3,4,5],com:[3,4],comment:5,commonnam:5,companynam:5,compar:5,complet:6,compon:5,config:[3,5],configfail:5,configid:5,configsrv_csr:5,configsrv_sccc:5,configsvr:5,configsvrid:5,connect:5,consistenthash:5,consistenthashport:5,contactgroupid:5,content:5,copy_custom_imag:5,copycustomimag:5,core:[3,4,6],corecount:5,costcount:5,could:[1,3,4],count:5,couponid:5,cpu:[3,4,5,6],cpuset:5,cpuutil:5,creat:[2,3,4,5,6],create_bandwidth_packag:5,create_certif:5,create_custom_imag:5,create_disk:5,create_firewal:5,create_global_ssh_inst:5,create_lb:5,create_natgw:5,create_natgw_rul:5,create_phost:5,create_physical_ip:5,create_polici:5,create_project:5,create_r:5,create_repo:5,create_route_t:5,create_security_group:5,create_security_group_rul:5,create_sf_workflow_from_templ:5,create_snapshot:5,create_ssl:5,create_subnet:5,create_udb_inst:5,create_udb_instance_by_recoveri:5,create_udb_param_group:5,create_udb_replication_inst:5,create_udb_route_inst:5,create_udb_slav:5,create_udisk:5,create_udisk_snapshot:5,create_ufs_volum:5,create_uhost_inst:[3,4,5,6],create_ulb:5,create_umem_cache_group:5,create_umem_spac:5,create_uredis_group:5,create_us:5,create_usms_signatur:5,create_usms_templ:5,create_v:5,create_vm_inst:5,create_vpc:5,create_vpc_intercom:5,create_vs_polici:5,create_vserv:5,createbandwidthpackag:5,createcertif:5,createcustomimag:5,createdisk:5,createfail:5,createfirewal:5,createglobalsshinst:5,createlb:5,createnatgw:5,createnatgwrul:5,createphost:5,createphysicalip:5,createpolici:5,createproject:5,creater:5,createrepo:5,createroutet:5,createsecuritygroup:5,createsecuritygrouprul:5,createsfworkflowfromtempl:5,createsnapshot:5,createssl:5,createsubnet:5,createtim:5,createudbinst:5,createudbinstancebyrecoveri:5,createudbparamgroup:5,createudbreplicationinst:5,createudbrouteinst:5,createudbslav:5,createudisk:5,createudisksnapshot:5,createufsvolum:5,createuhostinst:[1,5],createuhostinstanceparamdisk:5,createuhostinstanceparamnetworkinterfac:5,createuhostinstanceparamnetworkinterfaceeip:5,createuhostinstanceparamnetworkinterfaceeipglobalssh:5,createuhostinstanceparamnetworkinterfaceipv6:5,createulb:5,createumemcachegroup:5,createumemspac:5,createuredisgroup:5,createus:5,createusmssignatur:5,createusmstempl:5,createv:5,createvminst:5,createvpc:5,createvpcintercom:5,createvserv:5,createvspolici:5,cred:1,credenti:1,curbandwidth:5,current:[3,4],custom:[2,5,6],custompric:5,d4411ab30953fb0bbcb1e7313081f05e4e91a394:1,dai:5,data:[1,5],dataark:5,datadisk:5,datadisksettyp:5,datadiskspac:5,datafiles:5,datakei:5,dataset:5,dbaudit:5,dbclustertyp:5,dbid:5,dbname:5,dbtypeid:5,decod:2,def:[1,6],defin:5,delai:[1,6],delet:5,delete_bandwidth_packag:5,delete_certif:5,delete_custom_imag:5,delete_disk:5,delete_firewal:5,delete_global_ssh_inst:5,delete_lb:5,delete_natgw:5,delete_natgw_rul:5,delete_physical_ip:5,delete_polici:5,delete_r:5,delete_repo:5,delete_repo_imag:5,delete_route_t:5,delete_security_group:5,delete_security_group_rul:5,delete_snapshot:5,delete_ssl:5,delete_subnet:5,delete_udb_backup:5,delete_udb_inst:5,delete_udb_log_packag:5,delete_udb_param_group:5,delete_udisk:5,delete_udisk_snapshot:5,delete_ulb:5,delete_umem_cache_group:5,delete_umem_spac:5,delete_uredis_group:5,delete_usms_signatur:5,delete_usms_templ:5,delete_v:5,delete_vm_inst:5,delete_vpc:5,delete_vpc_intercom:5,delete_vs_polici:5,delete_vserv:5,deletebandwidthpackag:5,deletecertif:5,deletecustomimag:5,deletedisk:5,deletefail:5,deletefirewal:5,deleteglobalsshinst:5,deletelb:5,deletenatgw:5,deletenatgwrul:5,deletephysicalip:5,deletepolici:5,deleterepo:5,deleterepoimag:5,deleteroutet:5,deletesecuritygroup:5,deletesecuritygrouprul:5,deletesnapshot:5,deletessl:5,deletesubnet:5,deletetim:5,deleteudbbackup:5,deleteudbinst:5,deleteudblogpackag:5,deleteudbparamgroup:5,deleteudisk:5,deleteudisksnapshot:5,deleteulb:5,deleteumemcachegroup:5,deleteumemspac:5,deleteuredisgroup:5,deleteusmssignatur:5,deleteusmstempl:5,deletev:5,deletevminst:5,deletevpc:5,deletevpcintercom:5,deletevserv:5,deletevspolici:5,describ:5,describe_bandwidth_packag:5,describe_bandwidth_usag:5,describe_certif:5,describe_disk:5,describe_eip:5,describe_firewal:5,describe_firewall_resourc:5,describe_global_ssh_area:5,describe_global_ssh_inst:5,describe_imag:5,describe_isolation_group:5,describe_lb:5,describe_metr:5,describe_natgw:5,describe_natgw_rul:5,describe_new_ucdn_prefetch_cache_task:5,describe_new_ucdn_refresh_cache_task:5,describe_op_log:5,describe_phost:5,describe_phost_imag:5,describe_phost_tag:5,describe_physical_ip:5,describe_r:5,describe_recycled_resourc:5,describe_remote_vpn_gatewai:5,describe_route_t:5,describe_security_group:5,describe_share_bandwidth:5,describe_ssl:5,describe_storage_typ:5,describe_subnet:5,describe_subnet_resourc:5,describe_udb_backup:5,describe_udb_backup_blacklist:5,describe_udb_binlog_backup_url:5,describe_udb_inst:5,describe_udb_instance_backup_st:5,describe_udb_instance_backup_url:5,describe_udb_instance_binlog:5,describe_udb_instance_binlog_backup_st:5,describe_udb_instance_pric:5,describe_udb_instance_st:5,describe_udb_instance_upgrade_pric:5,describe_udb_log_backup_url:5,describe_udb_log_packag:5,describe_udb_param_group:5,describe_udb_typ:5,describe_udisk:5,describe_udisk_pric:5,describe_udisk_snapshot:5,describe_udisk_upgrade_pric:5,describe_udpn:5,describe_ufs_volume_2:5,describe_uhost_inst:[5,6],describe_uhost_instance_snapshot:5,describe_uhost_tag:5,describe_ulb:5,describe_umem_cache_group:5,describe_umem_cache_pric:5,describe_umem_cache_upgrade_pric:5,describe_umem_pric:5,describe_umem_spac:5,describe_umem_upgrade_pric:5,describe_uredis_backup:5,describe_uredis_backup_url:5,describe_uredis_group:5,describe_uredis_pric:5,describe_uredis_upgrade_pric:5,describe_us:5,describe_v:5,describe_vip:5,describe_vm_inst:5,describe_vm_typ:5,describe_vpc:5,describe_vpc_intercom:5,describe_vpn_tunnel:5,describe_vs_polici:5,describe_vserv:5,describebandwidthpackag:5,describebandwidthusag:5,describecertif:5,describedisk:5,describeeip:5,describefirewal:5,describefirewallresourc:5,describeglobalssharea:5,describeglobalsshinst:5,describeimag:5,describeisolationgroup:5,describelb:5,describemetr:5,describenatgw:5,describenatgwrul:5,describenewucdnprefetchcachetask:5,describenewucdnrefreshcachetask:5,describeoplog:5,describephost:5,describephostimag:5,describephosttag:5,describephysicalip:5,describerecycledresourc:5,describeremotevpngatewai:5,describeroutet:5,describesecuritygroup:5,describesharebandwidth:5,describessl:5,describestoragetyp:5,describesubnet:5,describesubnetresourc:5,describeudbbackup:5,describeudbbackupblacklist:5,describeudbbinlogbackupurl:5,describeudbinst:5,describeudbinstancebackupst:5,describeudbinstancebackupurl:5,describeudbinstancebinlog:5,describeudbinstancebinlogbackupst:5,describeudbinstancepric:5,describeudbinstancest:5,describeudbinstanceupgradepric:5,describeudblogbackupurl:5,describeudblogpackag:5,describeudbparamgroup:5,describeudbtyp:5,describeudisk:5,describeudiskpric:5,describeudisksnapshot:5,describeudiskupgradepric:5,describeudpn:5,describeufsvolume2:5,describeuhostinst:5,describeuhostinstancesnapshot:5,describeuhosttag:5,describeulb:5,describeumemcachegroup:5,describeumemcachepric:5,describeumemcacheupgradepric:5,describeumempric:5,describeumemspac:5,describeumemupgradepric:5,describeuredisbackup:5,describeuredisbackupurl:5,describeuredisgroup:5,describeuredispric:5,describeuredisupgradepric:5,describeus:5,describev:5,describevip:5,describevminst:5,describevmtyp:5,describevpc:5,describevpcintercom:5,describevpntunnel:5,describevserv:5,describevspolici:5,descript:5,descriptor:1,destroi:5,detach:5,detach_disk:5,detach_udisk:5,detachdisk:5,detachudisk:5,detail:1,devicenam:5,dict:[1,5],dir:5,disabl:5,disable_r:5,disablesemisync:5,disabletim:5,disassociate_eip_with_share_bandwidth:5,disassociateeipwithsharebandwidth:5,disk:[3,4,5],diskid:5,diskinfo:5,diskpassword:5,diskreadop:5,diskset:5,diskspac:5,diskstatu:5,disktyp:5,diskuseds:5,diskwriteop:5,distinguish:1,dnat:5,dnsserver:5,doc:1,docker:5,document:[1,3],domain:5,domainid:5,domaininfo:5,domainset:5,doubl:5,drive:5,drop:5,dstaddr:5,dstport:5,dstprojectid:5,dstregion:5,dstvpcid:5,duplet:5,duplex:5,dure:1,dynam:5,e87ab3b8a1ea:5,earliesttim:5,echo:5,edit_udb_backup_blacklist:5,editudbbackupblacklist:5,eip:[3,4,5],eipaddr:5,eipaddrset:5,eipbandwidth:5,eipid:5,eipinfo:5,eippaymod:5,eippaymodeset:5,eippricedetailset:5,eipset:5,eipsetdata:5,els:[3,4,6],email:5,empti:5,enabl:[1,5],enable_r:5,enabletim:5,encod:2,encrypt:5,end:1,endtim:5,equal:1,errdesc:5,error:[1,5],errorinfo:5,errorlog_backup:5,everi:1,exampl:6,exc:[3,4],except:[1,3,4],expect:2,experi:6,expir:5,expiredtim:5,expiretim:5,exponenti:[1,6],extend_ufs_volum:5,extendufsvolum:5,f8a2:5,factor:1,fail:[2,5],failur:5,fals:5,featur:[5,6],fetch_udb_instance_earliest_recover_tim:5,fetchudbinstanceearliestrecovertim:5,field:6,file:5,financ:5,fingerprint:5,finish:6,finishtim:5,firewalldataset:5,firewallruleset:5,first:2,flowhitr:5,followoriginrul:5,foo:1,forc:5,forcebackup:5,forcedump:5,forcetokil:5,format:5,formattyp:5,fortresshost:5,found:1,fra:5,free:[3,5],freez:5,frequenc:5,from:[3,4,6],fromtyp:5,frontendport:5,full:1,functyp:5,fwid:5,gatewai:5,gen_password:[2,3,4],gener:[2,3,4],get:[3,4,6],get_disk_pric:5,get_eip_pay_mod:5,get_eip_pric:5,get_eip_upgrade_pric:5,get_image_tag:5,get_new_ucdn_domain_bandwidth:5,get_new_ucdn_domain_hit_r:5,get_new_ucdn_domain_http_cod:5,get_new_ucdn_domain_http_code_v2:5,get_new_ucdn_domain_request_num:5,get_phost_pric:5,get_project_list:5,get_region:5,get_repo:5,get_repo_imag:5,get_sf_workflow_templ:5,get_ucdn_domain_log:5,get_ucdn_domain_prefetch_en:5,get_ucdn_domain_request_num_v2:5,get_ucdn_domain_traff:5,get_ucdn_pass_bandwidth:5,get_ucdn_traff:5,get_udpn_line_list:5,get_udpn_pric:5,get_udpn_upgrade_pric:5,get_uhost_instance_pric:5,get_uhost_instance_vnc_info:5,get_uhost_upgrade_pric:5,get_umem_space_st:5,get_user_info:5,get_usms_send_receipt:5,get_vm_instance_pric:5,getdiskpric:5,geteippaymod:5,geteippric:5,geteipupgradepric:5,getimagetag:5,getnewucdndomainbandwidth:5,getnewucdndomainhitr:5,getnewucdndomainhttpcod:5,getnewucdndomainhttpcodev2:5,getnewucdndomainrequestnum:5,getphostpric:5,getprojectlist:5,getregion:5,getrepo:5,getrepoimag:5,getsfworkflowtempl:5,getucdndomainlog:5,getucdndomainprefetchen:5,getucdndomainrequestnumv2:5,getucdndomaintraff:5,getucdnpassbandwidth:5,getucdntraff:5,getudpnlinelist:5,getudpnpric:5,getudpnupgradepric:5,getuhostinstancepric:5,getuhostinstancepriceparamdisk:5,getuhostinstancevncinfo:5,getuhostupgradepric:5,getumemspacest:5,getuserinfo:5,getusmssendreceipt:5,getvminstancepric:5,git:[3,4],github:[3,4],globalssh:5,globalssharea:5,globalsshinfo:5,gpu:5,gputyp:5,grant_firewal:5,grantfirewal:5,groupid:5,groupnam:5,haarch:5,hadoophost:5,handler:1,haproxi:5,has:6,hash:5,hashvalu:5,hasnatgw:5,haswel:5,have:1,header:5,healthchecktyp:5,helper:[3,6],here:[3,4],high:5,highavail:5,hitrateinfo:5,hitratelist:5,host:5,hostip:5,hosttyp:5,hotplug:5,hotplugfeatur:5,hour:5,http100:5,http101:5,http102:5,http200:5,http201:5,http202:5,http203:5,http204:5,http205:5,http206:5,http207:5,http300:5,http301:5,http302:5,http303:5,http304:5,http305:5,http306:5,http307:5,http400:5,http401:5,http402:5,http403:5,http404:5,http405:5,http406:5,http407:5,http408:5,http409:5,http410:5,http411:5,http412:5,http413:5,http414:5,http415:5,http416:5,http417:5,http418:5,http421:5,http422:5,http423:5,http424:5,http425:5,http426:5,http449:5,http451:5,http500:5,http501:5,http502:5,http503:5,http504:5,http505:5,http506:5,http507:5,http509:5,http510:5,http:[1,3,4,5],httpcodedetail:5,httpcodeinfo:5,httpcodepattern:5,httpcodev2detail:5,httpfivexx:5,httpfourxx:5,httponexx:5,httpsstatusabroad:5,httpsstatuscn:5,httpthreexx:5,httptwoxx:5,identifi:1,ignor:1,ignorequerystr:5,ikeauthenticationalgorithm:5,ikedata:5,ikedhgroup:5,ikeencryptionalgorithm:5,ikeexchangemod:5,ikelocalid:5,ikepresharedkei:5,ikeremoteid:5,ikesalifetim:5,ikevers:5,imag:[3,4,5],image_id:[3,4],imagedescript:5,imageid:[3,4,5],imageinfo:5,imagenam:5,images:5,imageset:5,imagestatu:5,imagetyp:5,img:5,implement:1,import_custom_imag:5,importcustomimag:5,improv:6,inact:5,includeslav:5,index:[1,3],industrytyp:5,info:[1,5],inform:1,init:5,initi:5,initializ:5,innerbackuppath:5,innermod:5,inpour_from_alipai:5,inpour_from_offlin:5,inpour_from_sinpai:5,inpour_from_wechat_pai:5,input:[2,5],inrecycl:5,inst:6,instal:5,installag:5,installfail:5,instanc:[5,6],instanceid:5,instancemod:5,instanceset:5,instancetyp:5,instancetypeid:5,integ:6,integratedsoftwar:5,intel:5,interfaceid:5,intern:5,internalip:5,internet:[3,4],internetip:5,interv:2,inus:5,invalid:6,invok:[1,6],iocap:5,ioread:5,iowrit:5,ip_hash:5,ipaddr:5,ipblacklist:5,ipid:5,ipinfo:5,ipsec:5,ipsecauthenticationalgorithm:5,ipsecdata:5,ipsecencryptionalgorithm:5,ipseclocalsubnetid:5,ipsecpfsdhgroup:5,ipsecprotocol:5,ipsecremotesubnet:5,ipsecsalifetim:5,ipsecsalifetimebyt:5,ipsecvpn:3,ipsecvpncli:5,ipset:5,ipv4:5,ipv4ipv6:5,ipv6:5,ipv6address:5,ipv6network:5,ipvers:5,isarbit:5,isautotermin:5,isboot:5,isdefault:5,iselast:5,isexpir:5,isfin:5,isforc:5,isin:5,isinudbc:5,islock:5,isolationgroup:5,isolationgroupset:5,isoutsid:5,isshar:5,issu:3,issuccess:5,issupportkvm:5,isudiskavail:5,ivybridg:5,jpn:5,k80:5,keepalivetimeout:5,kei:[1,3,4,5],keypair:5,kms:5,kmskeyid:5,kwarg:[1,5],kylin:5,l342dab130gf:5,lambda:[2,6],lan:5,lansgid:5,lastchargetyp:5,lastesttim:5,latesttag:5,lbid:5,lbinfo:5,lbname:5,lbstatu:5,lbtype:5,least_conn:5,leastconn:5,len:[1,2],length:2,letter:2,level:[1,6],librari:3,licens:3,lifecycl:[5,6],like:1,limit:5,link:5,linux:[3,5],list:[1,2,5],listentyp:5,liunx:5,loadavg:5,localdisk:5,localregion:5,log:[1,5],log_level:1,log_param:6,log_request:6,log_respons:6,logfiles:5,logger:[1,5],logic:[5,6],loginmod:[3,4,5],loglevel:1,logpackagedataset:5,logset:5,logsetinfo:5,logsetlist:5,logtyp:5,low:5,lower_lett:2,lowercas:2,mac:5,macaddr:5,machinetyp:5,maco:3,make:5,manual:5,mariadb:5,master:5,masterdbid:5,mastergroupid:5,match:[5,6],max:[1,2],max_backoff_interv:2,max_retri:1,maxcount:5,maxdomainnum:5,maxmountpointnum:5,maxretri:1,medium:5,membercount:5,memcach:5,memori:[3,4,5],memorylimit:5,memorys:5,memusag:5,messag:5,method:[3,4,5],metricinfo:5,metricnam:5,metricset:5,mget_uhost_st:6,middlewar:[3,5],migrat:5,min:5,min_backoff_interv:2,min_low:2,min_numb:2,min_speci:2,min_upp:2,minim:2,minimalcpu:5,minimalcpuplatform:5,miss:6,mmapv1:5,mod:1,model:5,modifi:5,modify_eip_bandwidth:5,modify_eip_weight:5,modify_global_ssh_port:5,modify_global_ssh_remark:5,modify_name_and_remark:5,modify_phost_info:5,modify_project:5,modify_route_rul:5,modify_udb_instance_nam:5,modify_udb_instance_password:5,modify_udpn_bandwidth:5,modify_uhost_instance_nam:5,modify_uhost_instance_remark:5,modify_uhost_instance_tag:5,modify_umem_space_nam:5,modify_uredis_group_nam:5,modifyeipbandwidth:5,modifyeipweight:5,modifyglobalsshport:5,modifyglobalsshremark:5,modifynameandremark:5,modifyphostinfo:5,modifyproject:5,modifyrouterul:5,modifytim:5,modifyudbinstancenam:5,modifyudbinstancepassword:5,modifyudpnbandwidth:5,modifyuhostinstancenam:5,modifyuhostinstanceremark:5,modifyuhostinstancetag:5,modifyumemspacenam:5,modifyuredisgroupnam:5,mongo:5,mongodb:5,monitortyp:5,month:5,more:1,most:1,ms_redi:5,multiattach:5,must:1,my_private_kei:1,my_public_kei:1,myapp:1,mysql:5,myvm:5,name:[3,4,5],namespac:5,natgw:5,natgwid:5,natgwinfo:5,natgwrul:5,natgwruleinfo:5,natgwstatu:5,natgwtyp:5,netcap:5,netcapvalu:5,netenhanced_ultra:5,netmask:5,netpacketin:5,netpacketout:5,network:[1,5],networkid:5,networkinfo:5,networkinterfac:5,networkst:5,next:5,nexthopid:5,nexthoptyp:5,nicid:5,nicin:5,nicout:5,nicoutusag:5,nocmkid:5,non:5,none:[1,5],noraid:5,normal:5,normal_volum:5,nosql:5,notconnect:5,nullref:5,number:[1,2],number_lett:2,object:1,objectid:5,occur:1,off:[5,6],offset:5,one:5,onli:[3,4],openapi:1,operatornam:5,opertatornam:5,oploginfo:5,oplogsid:5,opmessag:5,opnam:5,optim:5,option:1,organ:1,originalpric:5,originhost:5,originip:5,originport:5,originprotocol:5,originrequest:5,osdistribut:5,osnam:5,ostyp:5,outermod:5,output:[2,5],outsignatur:5,outtempl:5,p40:5,packetstransmit:5,page:3,param:5,paramet:[1,2],paramgroupid:5,paramgrouptypeid:5,parammemb:5,parentid:5,parentnam:5,part:5,password1:5,password:[2,3,4,5],path:5,pathpattern:5,pathx:3,pathxclient:5,paymod:5,pci:5,pcie_ssd:5,pcie_ssd_volum:5,peer1:5,peer2:5,pem:5,pend:[2,6],percona:5,persistenceinfo:5,persistencekei:5,persistencetyp:5,phone:5,phonenumb:5,phoneprefix:5,phost:5,phostcpuset:5,phostdiskset:5,phostid:5,phostimageset:5,phostipset:5,phostpriceset:5,phostset:5,phosttagset:5,phosttyp:5,physic:5,physicalipid:5,physicalipinfo:5,pip:[3,4,5],pmstatu:5,png:5,polici:[1,6],policybackendset:5,policyid:5,policyprior:5,policyset:5,policystatu:5,policytyp:5,port:5,posit:1,postgresql:5,postpai:5,postpaystarttim:5,powerof:5,poweroff_phost:5,poweroff_uhost_inst:5,poweroff_vm_inst:5,poweroffphost:5,poweroffuhostinst:5,poweroffvminst:5,powerst:5,prefetch_new_ucdn_domain_cach:5,prefetchnewucdndomaincach:5,prepar:1,price:5,pricedataset:5,priceinfo:5,priceset:5,primari:5,print:[1,3,4,6],prioriti:5,privat:[3,4,5],private_kei:[1,3,4],privateip:5,privatekei:5,privatemac:5,problem:1,process:5,producttyp:5,progress:5,project:1,project_id:[1,3,4],projectcount:5,projectid:[1,5],projectlistinfo:5,projectnam:5,projectset:5,promot:5,promote_udb_instance_to_ha:5,promote_udb_slav:5,promoteudbinstancetoha:5,promoteudbslav:5,protocol:5,protocoltyp:5,protocolvers:5,provid:6,provinc:5,proxyfil:5,public_kei:[1,3,4],publicip:5,publickei:5,pull:3,pullcount:5,purchasevalu:5,purpos:5,pvft_enum:5,pvft_rang:5,python2:[3,4],python:[1,4,6],qcow2:5,quantiti:5,query_usms_signatur:5,query_usms_templ:5,queryusmssignatur:5,queryusmstempl:5,raid0:5,raid10:5,raid1:5,raid5:5,raid:5,raidsupport:5,rais:[1,6],reach:6,readi:2,realip:5,reboot:5,reboot_phost:5,reboot_uhost_inst:5,rebootphost:5,rebootuhostinst:5,receiptdesc:5,receiptperphon:5,receiptpersess:5,receiptresult:5,receiptset:5,receipttim:5,receiv:1,recharg:5,recommend:5,recov:5,recoverytim:5,recycledresourceinfo:5,redi:5,referlist:5,referstatu:5,refertyp:5,refresh:[2,6],refresh_new_ucdn_domain_cach:5,refreshnewucdndomaincach:5,region:[1,3,4,5,6],regionalia:5,regionflag:5,regionid:5,regioninfo:5,regionnam:5,regionset:5,regist:1,reinstal:5,reinstall_phost:5,reinstall_uhost_inst:5,reinstall_vm_inst:5,reinstallphost:5,reinstalluhostinst:5,reinstallvminst:5,releas:5,release_backend:5,release_eip:5,release_share_bandwidth:5,release_udpn:5,release_vip:5,releasebackend:5,releaseeip:5,releasesharebandwidth:5,releaseudisk:5,releaseudpn:5,releasevip:5,remark:5,remot:6,remoteregion:5,remotevpngatewayaddr:5,remotevpngatewaydataset:5,remotevpngatewayid:5,remotevpngatewaynam:5,remov:6,remove_ufs_volum:5,removeufsvolum:5,rename_udisk:5,renameudisk:5,renew_resourc:5,renewresourc:5,reponam:5,reposet:5,req:[1,5,6],request:[1,3,5,6],request_handl:1,requesthitr:5,requestinfo:5,requestlist:5,requestproxi:5,requeststransport:[1,6],requir:[5,6],reservedisk:5,reset_uhost_instance_password:5,reset_vm_instance_password:5,resetuhostinstancepassword:5,resetvminstancepassword:5,resiz:5,resize_attached_disk:5,resize_share_bandwidth:5,resize_udb_inst:5,resize_udisk:5,resize_udredis_spac:5,resize_uhost_inst:5,resize_umem_spac:5,resize_uredis_group:5,resize_vm_config:5,resizeattacheddisk:5,resizefail:5,resizesharebandwidth:5,resizeudbinst:5,resizeudisk:5,resizeudredisspac:5,resizeuhostinst:5,resizeumemspac:5,resizeuredisgroup:5,resizevmconfig:5,resourc:[1,3,5,6],resourcecount:5,resourceid:5,resourcenam:5,resourceset:5,resourcetyp:5,resp:[1,3,4,6],respons:[1,5,6],response_handl:1,restart:5,restart_udb_inst:5,restart_umem_cache_group:5,restart_vm_inst:5,restartudbinst:5,restartumemcachegroup:5,restartvminst:5,restor:5,restore_udisk:5,restorefail:5,restoreudisk:5,retcod:5,retri:[1,6],retrytim:5,rewritetim:5,role:5,rollback_resourc:5,rollback_snapshot:5,rollbackresourc:5,rollbacksnapshot:5,roundrobin:5,rout:5,routerul:5,routeruleid:5,routeruleinfo:5,routet:5,routetableid:5,routetableinfo:5,routetabletyp:5,rshealthstatu:5,rsid:5,rsinfo:5,rsmode:5,rssddatadisk:5,rsstatu:5,rule:5,ruleact:5,rulecount:5,ruleid:5,rulestatu:5,ruletyp:5,run:[2,3,5],runtim:6,s_redi:5,sata:5,sata_ssd:5,sata_ssd_volum:5,schedul:5,sdk:[1,4,6],search:3,sec:5,securitygroupid:5,see:1,send:1,send_usms_messag:5,sendusmsmessag:5,sentinel:5,seoul:5,serialno:5,servercertificateid:5,servercrt:5,serverinsert:5,servic:[1,3,4],sessionno:5,sessionnoset:5,set:1,set_eip_pay_mod:5,set_udisk__udataark_mod:5,setarch:5,seteippaymod:5,setid:5,settyp:5,setudiskudataarkmod:5,setup:[3,4],sgid:5,sginfo:5,sgname:5,sgruleid:5,sgruleinfo:5,sh1:5,sh2:5,sharded_clust:5,shardsrv:5,shardsrv_arbit:5,shardsrv_datanod:5,shardsvr:5,sharebandwidth:5,sharebandwidthguarante:5,sharebandwidthid:5,sharebandwidthnam:5,sharebandwidthset:5,should:1,showavailableip:5,shutdown:5,shutoff:5,sigcont:5,sigid:5,signatur:1,sigpurpos:5,sigtyp:5,simplex:5,singl:5,size:[3,4,5],skylak:5,slave:5,slavedbid:5,slavezon:5,slow:5,slow_query_backup:5,snapen:5,snapshot:5,snapshotcount:5,snapshotid:5,snapshotlimit:5,snapshotnam:5,snapshotset:5,snapshotst:5,snapshottim:5,snat:5,softwar:3,some:6,sourc:[1,2,3,4,5],sourceid:5,sourceimageid:5,sourceport:5,space:5,spaceid:5,spaceusag:5,special:2,special_lett:2,specif:2,spreadinfo:5,spreadinfoset:5,sql:5,sqlserver:5,srcdbid:5,srcgroupid:5,srcid:5,srcip:5,ssd:5,ssddatadisk:5,ssdsystemdisk:5,ssdtype:5,ssl_cacert:1,ssl_cert:1,ssl_kei:1,ssl_verifi:1,sslcontent:5,sslid:5,sslmode:5,sslname:5,sslset:5,ssltype:5,start:[5,6],start_phost:5,start_udb_inst:5,start_uhost_inst:5,start_vm_inst:5,startafterupgrad:5,startphost:5,startudbinst:5,startuhostinst:5,startup_delai:2,startvminst:5,state:[3,5],statu:[1,5],status_forcelist:1,stepflow:3,stepflowcli:5,stop:[5,6],stop_udb_inst:5,stop_uhost_inst:[5,6],stop_vm_inst:5,stopudbinst:5,stopuhostinst:5,stopvminst:5,storagetyp:5,storagetypealia:5,storagetypeinfo:5,store:1,str:[1,2,5],string:[2,5],sub:1,subjectalternativenam:5,subnet:5,subnetcount:5,subnetid:5,subnetinfo:5,subnetnam:5,subnetresourc:5,subnettyp:5,subresourceid:5,subresourcenam:5,subresourcetyp:5,success:5,switch_ucdn_charge_typ:5,switch_udb_instance_to_ha:5,switchucdnchargetyp:5,switchudbinstancetoha:5,sys:5,system:3,systemdisk:5,systemfiles:5,tag:5,tagnam:5,tagset:5,target:[2,6],targetimagedescript:5,targetimageid:5,targetimagenam:5,targetip:5,targetprojectid:5,targetregion:5,taskid:5,taskinfo:5,tasklist:5,tcp:5,tcpconnectcount:5,telecom:5,tempalteparam:5,templat:5,templateid:5,templatenam:5,templateparam:5,termin:[2,5],terminate_custom_imag:5,terminate_phost:5,terminate_project:5,terminate_resourc:5,terminate_uhost_inst:[5,6],terminatecustomimag:5,terminatephost:5,terminateproject:5,terminateresourc:5,terminateuhostinst:5,test:[3,5],test_id:5,testurl:5,than:1,thi:3,threshold:5,time:[1,2,5],timemachinefeatur:5,timeout:[1,2,5,6],timerang:5,timestamp:5,tky:5,total:[1,2],totalbandwidth:5,totalcount:5,totaldiskspac:5,totalmountpointnum:5,totalpric:5,traffic:5,trafficleft:5,trafficset:5,traffictot:5,trafficus:5,transport:[3,5],trial:5,triggercount:5,tunnelcount:5,tupl:1,twice:6,two:5,type:[3,4,5],uaccount:3,uaccountcli:5,ubuntu:5,ucdn:3,ucdnclient:5,ucdndomaintrafficset:5,ucdr:5,ucloud:[1,2,4,6],ucloudexcept:[3,4],ucloudstack:3,ucloudstackcli:5,udataark:5,udataarkmod:5,udb:[2,3],udbbackupset:5,udbcid:5,udbclient:5,udbinstancebinlogset:5,udbinstancepriceset:5,udbinstanceset:5,udbparamgroupset:5,udbparammemberset:5,udbslaveinstanceset:5,udbtypeset:5,udhost:5,udisk:3,udiskcli:5,udiskdataset:5,udiskid:5,udisknam:5,udiskpricedataset:5,udisksnapshotset:5,udock:5,udockhost:5,udp:5,udpn:3,udpnclient:5,udpndata:5,udpnid:5,udpnlineset:5,udw:5,ufil:5,ufileurl:5,ufortress:5,ufortress_host:5,ufs:5,ufsclient:5,ufsvolumeinfo2:5,uhadoop:5,uhadoop_host:5,uhiv:5,uhost:[2,3,4,6],uhost_id:6,uhostcli:5,uhostcount:5,uhostdiskset:5,uhostid:[5,6],uhostimageset:5,uhostinstanceset:5,uhostip:5,uhostipset:5,uhostnam:5,uhostpriceset:5,uhostset:[5,6],uhostsnapshotset:5,uhosttagset:5,uhosttyp:5,uhub:3,uhubcli:5,ukafka:5,ukmsmod:5,ulb:3,ulbbackendset:5,ulbclient:5,ulbid:5,ulbipset:5,ulbnam:5,ulbpolicyset:5,ulbset:5,ulbsslset:5,ulbtyp:5,ulbvserverset:5,ultra:5,umem:3,umemcach:5,umemcachegroupset:5,umemcachepriceset:5,umemcli:5,umempriceset:5,umemspaceaddressset:5,umemspaceset:5,un_bind_eip:5,un_bind_security_group:5,unatgw:5,unavail:5,unbind_alarm_templ:5,unbind_physical_ip:5,unbind_ssl:5,unbindalarmtempl:5,unbindeip:5,unbindphysicalip:5,unbindsecuritygroup:5,unbindssl:5,unbound:5,unet:3,unetallocateeipset:5,unetbandwidthpackageset:5,unetbandwidthusageeipset:5,unetcli:5,uneteipaddrset:5,uneteipresourceset:5,uneteipset:5,unetsharebandwidthset:5,uni:5,unicom:5,uniqu:1,unix:5,unknow:5,unknown:5,unless:[3,4],unsubscribeinfo:5,updat:5,update_alarm_template_rul:5,update_backend_attribut:5,update_eip_attribut:5,update_firewal:5,update_firewall_attribut:5,update_polici:5,update_r:5,update_repo:5,update_route_table_attribut:5,update_security_group_rul:5,update_subnet_attribut:5,update_udb_instance_backup_strategi:5,update_udb_instance_slave_backup_switch:5,update_udb_param_group:5,update_ulb_attribut:5,update_usms_signatur:5,update_usms_templ:5,update_v:5,update_vpc_network:5,update_vs_polici:5,update_vserver_attribut:5,updatealarmtemplaterul:5,updatebackendattribut:5,updatebackendattributebatch:5,updateeipattribut:5,updatefirewal:5,updatefirewallattribut:5,updatepolici:5,updaterepo:5,updateroutetableattribut:5,updatesecuritygrouprul:5,updatesubnetattribut:5,updatetim:5,updateudbinstancebackupstrategi:5,updateudbinstanceslavebackupswitch:5,updateudbparamgroup:5,updateulbattribut:5,updateusmssignatur:5,updateusmstempl:5,updatev:5,updatevpcnetwork:5,updatevserverattribut:5,updatevspolici:5,upgrad:5,upgrade_disk:5,upgrade_to_ark_uhost_inst:5,upgradedisk:5,upgradetoarkuhostinst:5,uphost:3,uphostcli:5,upload:5,upload_udb_param_group:5,uploadudbparamgroup:5,upm:5,upper_lett:2,uppercas:2,uredi:5,uredisbackupset:5,uredisgroupset:5,uredispriceset:5,url:[1,5],urllist:5,urlprogressinfo:5,usag:[2,3],use:[1,3,4,6],useblacklist:5,used:[1,5],useds:5,user:[1,3,4,5],user_ag:1,user_status_avail:5,user_status_freez:5,useraddress:5,userag:1,usercert:5,userdata:5,userdatascript:5,userdefin:5,useremail:5,userid:5,userinfo:5,usernam:5,usernetpath:5,userphon:5,usertyp:5,uservers:5,usessd:5,using:[1,6],usm:3,usmsclient:5,usual:2,util:[1,3,4],uvideo:5,uvip:5,v100:5,validationexcept:6,validtim:5,valu:5,valuetyp:5,vendor:5,verify_ac:1,version:5,vhd:5,via:[3,4],vip:5,vipdetailset:5,vipid:5,vipset:5,virtual:5,virtualip:5,virtualipmac:5,vmdiskinfo:5,vmdk:5,vmid:5,vminstanceinfo:5,vmipinfo:5,vmtype:5,vmtypealia:5,vmtypeinfo:5,vnc:5,vncip:5,vncpassword:5,vncport:5,vnet:5,volumeid:5,volumenam:5,volumestatu:5,vpc1:5,vpc2:5,vpc:3,vpcclient:5,vpcid:5,vpcinfo:5,vpcintercominfo:5,vpcname:5,vpcnetworkinfo:5,vpn:5,vpngatewayid:5,vpngatewaynam:5,vpngw:5,vpntunneid:5,vpntunneldataset:5,vpntunnelid:5,vpntunnelnam:5,vscount:5,vserver:5,vserverid:5,vservernam:5,vserverset:5,vsid:5,vsinfo:5,vspolicyinfo:5,vsstatu:5,wait:[3,5],wait_for_st:[2,6],waiter:6,waitreinstal:5,waittimeoutexcept:6,wan:5,wansgid:5,web:5,websit:3,weight:5,weightroundrobin:5,when:[1,6],who:1,willterminatetim:5,window:[3,5],wiredtig:5,workflow:5,workflowid:5,workflownam:5,workflowtempl:5,workflowvers:5,wrr:5,www:3,x86_64:5,xd8ja:5,xk3jxa:5,xxxx:5,year:5,yes:5,you:[3,4],your:[3,4],zone:[3,4,5],zonealia:5},titles:["<no title>","Core","Helpers","UCloud SDK Python 2","QuickStart","UCloud SDK Services","Usage"],titleterms:{UFS:5,api:3,chang:6,client:[1,6],config:1,contribut:3,core:1,feedback:3,guid:3,helper:2,indic:3,instal:[3,4],ipsecvpn:5,middlewar:[1,6],pathx:5,python:3,quickstart:[3,4],refer:3,resourc:2,sdk:[3,5],servic:5,state:[2,6],stepflow:5,system:6,tabl:3,test:1,transport:[1,6],type:6,uaccount:5,ucdn:5,ucloud:[3,5],ucloudstack:5,udb:5,udisk:5,udpn:5,uhost:5,uhub:5,ulb:5,umem:5,unet:5,uphost:5,usag:6,usm:5,util:2,vpc:5,wait:[2,6]}}) \ No newline at end of file diff --git a/services.html b/services.html new file mode 100644 index 0000000..b3d41e9 --- /dev/null +++ b/services.html @@ -0,0 +1,8662 @@ + + + + + + + + UCloud SDK Services — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

UCloud SDK Services

+
+

PathX

+
+
+class ucloud.services.pathx.client.PathXClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_global_ssh_instance(req=None, **kwargs)[source]
+

CreateGlobalSSHInstance - 创建GlobalSSH实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • Area (str) - (Required) 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个
  • +
  • AreaCode (str) - (Required) AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个
  • +
  • Port (int) - (Required) SSH端口,1-65535且不能使用80,443端口
  • +
  • TargetIP (str) - (Required) 被SSH访问的IP
  • +
  • ChargeType (str) - 支付方式,如按月、按年、按时
  • +
  • CouponId (str) - 使用代金券可冲抵部分费用
  • +
  • Quantity (int) - 购买数量
  • +
  • Remark (str) - 备注信息
  • +
+

Response

+
    +
  • AcceleratingDomain (str) - 加速域名,访问该域名可就近接入
  • +
  • InstanceId (str) - 实例ID,资源唯一标识
  • +
  • Message (str) - 提示信息
  • +
+
+ +
+
+delete_global_ssh_instance(req=None, **kwargs)[source]
+

DeleteGlobalSSHInstance - 删除GlobalSSH实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - (Required) 实例Id,资源的唯一标识
  • +
+

Response

+
    +
  • Message (str) - 提示信息
  • +
+
+ +
+
+describe_global_ssh_area(req=None, **kwargs)[source]
+

DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 机房地域代号,如hk、 us-ca、 us-ws等。不填默认为空,返回所有支持地区。
  • +
+

Response

+
    +
  • AreaSet (list) - 见 GlobalSSHArea 模型定义
  • +
  • Message (str) - 提示信息
  • +
+

Response Model

+

GlobalSSHArea

+
    +
  • Area (str) - GlobalSSH覆盖的地区,如香港、东京、洛杉矶等
  • +
  • AreaCode (str) - 地区代号,以地区AirPort Code
  • +
  • RegionSet (list) - ucloud机房代号构成的数组,如[“hk”,”us-ca”]
  • +
+
+ +
+
+describe_global_ssh_instance(req=None, **kwargs)[source]
+

DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - 实例ID,资源唯一标识
  • +
+

Response

+
    +
  • InstanceSet (list) - 见 GlobalSSHInfo 模型定义
  • +
+

Response Model

+

GlobalSSHInfo

+
    +
  • AcceleratingDomain (str) - 加速域名
  • +
  • Area (str) - 被SSH访问的IP所在地区
  • +
  • ChargeType (str) - 支付周期,如Month,Year等
  • +
  • CreateTime (int) - 资源创建时间戳
  • +
  • ExpireTime (int) - 资源过期时间戳
  • +
  • InstanceId (str) - 实例ID,资源唯一标识
  • +
  • Port (int) - SSH登陆端口
  • +
  • Remark (str) - 备注信息
  • +
  • TargetIP (str) - 被SSH访问的EIP
  • +
+
+ +
+
+modify_global_ssh_port(req=None, **kwargs)[source]
+

ModifyGlobalSSHPort - 修改GlobalSSH端口

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - (Required) 实例ID,资源唯一标识
  • +
  • Port (int) - (Required) 调整后的SSH登陆端口
  • +
+

Response

+
    +
  • Message (str) - 提示信息
  • +
+
+ +
+
+modify_global_ssh_remark(req=None, **kwargs)[source]
+

ModifyGlobalSSHRemark - 修改GlobalSSH备注

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,如org-xxxx。请参考 GetProjectList接口
  • +
  • InstanceId (str) - (Required) 实例ID,资源唯一标识
  • +
  • Remark (str) - 备注信息,不填默认为空字符串
  • +
+

Response

+
    +
  • Message (str) - 接口返回消息
  • +
+
+ +
+ +
+
+

StepFlow

+
+
+class ucloud.services.stepflow.client.StepFlowClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_sf_workflow_from_template(req=None, **kwargs)[source]
+

CreateSFWorkflowFromTemplate - 导入工作流定义

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Namespace (str) - (Required) 需要创建的工作流namespace
  • +
  • Workflow (str) - (Required) 描述工作流定义的base64字符串
  • +
  • WorkflowName (str) - (Required) 需要创建的工作流名称
  • +
+

Response

+
    +
  • Message (str) - 返回消息
  • +
  • Version (int) - 创建的工作流版本号
  • +
+
+ +
+
+get_sf_workflow_template(req=None, **kwargs)[source]
+

GetSFWorkflowTemplate - 导出工作流定义

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • WorkflowId (str) - (Required) 被导出工作流的Id
  • +
  • WorkflowVersion (int) - 被导出工作流的版本号。取值范围:WorkflowVersion >= 1;默认会获取发布版本对应的workflow;超过最大版本会返回错误
  • +
+

Response

+
    +
  • Message (str) - 返回消息
  • +
  • Version (int) - 导出工作流的版本号
  • +
  • Workflow (dict) - 见 WorkflowTemplate 模型定义
  • +
  • WorkflowId (str) - 导出工作流的Id
  • +
+

Response Model

+

Param

+
    +
  • Name (str) - 参数名称
  • +
  • Type (str) - 参数类型
  • +
  • Value (str) - 参数值
  • +
+

ActivityTemplate

+
    +
  • Input (dict) - Activity的输入
  • +
  • Name (str) - Activity的名字
  • +
  • Next (str) - 下一个Activity的名字
  • +
  • Output (list) - Activity的输出,详见Param
  • +
  • RetryTimes (str) - Activity的重试次数
  • +
  • Timeout (str) - Activity的超时时间
  • +
  • Type (str) - Activity的类型
  • +
+

WorkflowTemplate

+
    +
  • Activites (list) - 见 ActivityTemplate 模型定义
  • +
  • Input (list) - 见 Param 模型定义
  • +
  • Output (list) - 见 Param 模型定义
  • +
+
+ +
+ +
+
+

UAccount

+
+
+class ucloud.services.uaccount.client.UAccountClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_project(req=None, **kwargs)[source]
+

CreateProject - 创建项目

+

Request

+
    +
  • ProjectName (str) - (Required) 项目名称
  • +
+

Response

+
    +
  • ProjectId (str) - 所创建项目的Id
  • +
+
+ +
+
+get_project_list(req=None, **kwargs)[source]
+

GetProjectList - 获取项目列表

+

Request

+
    +
  • IsFinance (str) - 是否是财务账号
  • +
+

Response

+
    +
  • ProjectCount (int) - 项目总数
  • +
  • ProjectSet (list) - 见 ProjectListInfo 模型定义
  • +
+

Response Model

+

ProjectListInfo

+
    +
  • CreateTime (int) - 创建时间(Unix时间戳)
  • +
  • IsDefault (bool) - 是否为默认项目
  • +
  • MemberCount (int) - 项目下成员数量
  • +
  • ParentId (str) - 父项目ID
  • +
  • ParentName (str) - 父项目名称
  • +
  • ProjectId (str) - 项目ID
  • +
  • ProjectName (str) - 项目名称
  • +
  • ResourceCount (int) - 项目下资源数量
  • +
+
+ +
+
+get_region(req=None, **kwargs)[source]
+

GetRegion - 获取用户在各数据中心的权限等信息

+

Request

+

Response

+
    +
  • Regions (list) - 见 RegionInfo 模型定义
  • +
+

Response Model

+

RegionInfo

+
    +
  • BitMaps (str) - 用户在此数据中心的权限位
  • +
  • IsDefault (bool) - 是否用户当前默认数据中心
  • +
  • Region (str) - 地域名字,如cn-bj
  • +
  • RegionId (int) - 数据中心ID
  • +
  • RegionName (str) - 数据中心名称
  • +
  • Zone (str) - 可用区名字,如cn-bj-01
  • +
+
+ +
+
+get_user_info(req=None, **kwargs)[source]
+

GetUserInfo - 获取用户信息

+

Request

+

Response

+
    +
  • DataSet (list) - 见 UserInfo 模型定义
  • +
+

Response Model

+

UserInfo

+
    +
  • Admin (int) - 是否超级管理员 0:否 1:是
  • +
  • Administrator (str) - 管理员
  • +
  • AuthState (str) - 实名认证状态
  • +
  • City (str) - 城市
  • +
  • CompanyName (str) - 公司名称
  • +
  • Finance (int) - 是否有财务权限 0:否 1:是
  • +
  • IndustryType (int) - 所属行业
  • +
  • PhonePrefix (str) - 国际号码前缀
  • +
  • Province (str) - 省份
  • +
  • UserAddress (str) - 公司地址
  • +
  • UserEmail (str) - 用户邮箱
  • +
  • UserId (int) - 用户Id
  • +
  • UserName (str) - 称呼
  • +
  • UserPhone (str) - 用户手机
  • +
  • UserType (int) - 会员类型
  • +
  • UserVersion (int) - 是否子帐户(大于100为子帐户)
  • +
+
+ +
+
+modify_project(req=None, **kwargs)[source]
+

ModifyProject - 修改项目

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • ProjectName (str) - (Required) 新的项目名称
  • +
+

Response

+
+ +
+
+terminate_project(req=None, **kwargs)[source]
+

TerminateProject - 删除项目

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。
  • +
+

Response

+
+ +
+ +
+
+

UCDN

+
+
+class ucloud.services.ucdn.client.UCDNClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+batch_describe_new_ucdn_domain(req=None, **kwargs)[source]
+

BatchDescribeNewUcdnDomain - 批量获取加速域名配置

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • ChannelType (str) - 渠道ucdn、ufile、uvideo
  • +
  • DomainId (list) - 域名id,创建域名时生成的资源id,默认获取账号下的所有域名信息,n为自然数
  • +
  • Limit (int) - 返回数据长度,如果制定了Offset,则默认20,否则默认全部,非负整数
  • +
  • Offset (int) - 数据偏移量,默认0,非负整数
  • +
+

Response

+
    +
  • Arrearage (list) - 标识欠费的数组,数组含有下列元素值, 1=国内流量有欠费 2=国外流量有欠费 3=国内带宽有欠费 4=国外带宽有欠费
  • +
  • ChargeType (int) - 当前计费方式,10=流量付费 20=带宽日峰值 30=按月后付费
  • +
  • DomainSet (list) - 见 DomainInfo 模型定义
  • +
  • LastChargeType (int) - 表示最后一次切换的计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 40=未选择计费方式
  • +
  • MaxDomainNum (int) - 最大域名数量,默认20
  • +
  • TotalCount (int) - 满足条件的域名个数
  • +
  • Vip (str) - vip标示,yes-是 no-否
  • +
+

Response Model

+

CacheConf

+
    +
  • CacheBehavior (int) - 是否缓存,1为缓存,0为不缓存。为0的情况下,CacheTTL和CacheUnit强制不生效
  • +
  • CacheTTL (int) - 缓存时间
  • +
  • CacheUnit (str) - 缓存时间的单位。sec(秒),min(分钟),hour(小时),day(天)
  • +
  • Description (str) - 缓存规则描述
  • +
  • FollowOriginRule (int) - 是否优先遵循源站头部缓存策略,0为不优先遵循源站,1为优先遵循源站缓存头部。默认为0
  • +
  • HttpCodePattern (str) - 状态码默认情况只缓存200类状态码,支持正则
  • +
  • IgnoreQueryString (int) - 是否忽略参数缓存(0为不忽略,1为忽略,默认为0)
  • +
  • PathPattern (str) - 路径模式,支持正则
  • +
+

AccessConf

+
    +
  • IpBlacklist (str) - 多个ip用逗号隔开
  • +
+

DomainInfo

+
    +
  • AccessConf (dict) - 见 AccessConf 模型定义
  • +
  • AreaCode (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域
  • +
  • CacheConf (list) - 见 CacheConf 模型定义
  • +
  • CacheHost (str) - 缓存Host,不同的域名可以配置为同一个CacheHost来实现缓存共享,默认为加速域名
  • +
  • CdnProtocol (str) - 加速类型http,http|https
  • +
  • CdnType (str) - 加速域名的业务类型,web代表网站,stream代表视频,download代表下载。
  • +
  • CertName (str) - 证书名称
  • +
  • Cname (str) - cdn域名。创建加速域名生成的cdn域名,用于设置CNAME记录
  • +
  • CreateTime (int) - 域名创建的时间。格式:时间戳
  • +
  • Domain (str) - 域名,用户创建加速的域名
  • +
  • DomainId (str) - 域名id,创建域名时生成的id
  • +
  • HttpsStatusAbroad (str) - 国外https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用
  • +
  • HttpsStatusCn (str) - 国内https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用
  • +
  • NullRefer (bool) - ReferType为白名单时,NullRefer为false代表不允许NULL refer访问,为true代表允许Null refer访问
  • +
  • OriginHost (str) - 回源Http请求头部Host,默认是加速域名
  • +
  • OriginIp (list) - 源站ip即cdn服务器回源访问的ip地址。支持多个源站ip,多个源站ip,可表述为如:[1.1.1.1,2.2.2.2]
  • +
  • OriginPort (int) - 回源端口
  • +
  • OriginProtocol (str) - 源站协议http,http|https 默认http
  • +
  • ReferList (list) - Refer列表,支持正则表达式
  • +
  • ReferStatus (bool) - refer配置开关,true打开,false关闭
  • +
  • ReferType (int) - 0白名单,1黑名单
  • +
  • Status (str) - 创建的加速域名的当前的状态。check代表审核中,checkSuccess代表审核通过,checkFail代表审核失败,enable代表加速中,disable代表停止加速,delete代表删除加速 enableing代表正在开启加速,disableing代表正在停止加速中,deleteing代表删除中
  • +
  • Tag (str) - 业务组,默认为Default
  • +
  • TestUrl (str) - 测试url,用于域名创建加速时的测试
  • +
  • ValidTime (int) - 开始分配Cname时间。格式:时间戳
  • +
+
+ +
+
+describe_new_ucdn_prefetch_cache_task(req=None, **kwargs)[source]
+

DescribeNewUcdnPrefetchCacheTask - 获取预取任务状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
  • Limit (int) - 返回数据长度,默认全部,自然数
  • +
  • Offset (int) - 数据偏移量,默认为0,自然数
  • +
  • Status (str) - 需要获取的内容预热的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态
  • +
  • TaskId (list) - 提交任务时返回的任务ID
  • +
+

Response

+
    +
  • TaskList (list) - 见 TaskInfo 模型定义
  • +
  • TotalCount (int) - 预热任务的总数
  • +
+

Response Model

+

UrlProgressInfo

+
    +
  • CreateTime (int) - 刷新任务创建的时间。格式为Unix Timestamp
  • +
  • FinishTime (int) - 任务完成时间。格式为Unix Timestamp
  • +
  • Progress (int) - 刷新进度,单位%
  • +
  • Status (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知
  • +
  • Url (str) - 刷新的单条url
  • +
+

TaskInfo

+
    +
  • CreateTime (int) - 刷新任务创建的时间。格式为Unix Timestamp
  • +
  • Status (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知
  • +
  • TaskId (str) - 提交任务时返回的任务ID
  • +
  • Type (str) - file/dir 刷新任务会返回Type,预取任务没有
  • +
  • UrlLists (list) - 见 UrlProgressInfo 模型定义
  • +
+
+ +
+
+describe_new_ucdn_refresh_cache_task(req=None, **kwargs)[source]
+

DescribeNewUcdnRefreshCacheTask - 获取域名刷新任务状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
  • Limit (int) - 返回数据长度,默认全部,自然数
  • +
  • Offset (int) - 数据偏移量,默认为0,自然数
  • +
  • Status (str) - 需要获取的内容刷新的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态
  • +
  • TaskId (list) - 提交任务时返回的任务ID
  • +
+

Response

+
    +
  • TaskList (list) - 见 TaskInfo 模型定义
  • +
  • TotalCount (int) - 刷新任务的总数
  • +
+

Response Model

+

UrlProgressInfo

+
    +
  • CreateTime (int) - 刷新任务创建的时间。格式为Unix Timestamp
  • +
  • FinishTime (int) - 任务完成时间。格式为Unix Timestamp
  • +
  • Progress (int) - 刷新进度,单位%
  • +
  • Status (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知
  • +
  • Url (str) - 刷新的单条url
  • +
+

TaskInfo

+
    +
  • CreateTime (int) - 刷新任务创建的时间。格式为Unix Timestamp
  • +
  • Status (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知
  • +
  • TaskId (str) - 提交任务时返回的任务ID
  • +
  • Type (str) - file/dir 刷新任务会返回Type,预取任务没有
  • +
  • UrlLists (list) - 见 UrlProgressInfo 模型定义
  • +
+
+ +
+
+get_new_ucdn_domain_bandwidth(req=None, **kwargs)[source]
+

GetNewUcdnDomainBandwidth - 获取域名带宽数据

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度)
  • +
  • Areacode (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
+

Response

+
    +
  • BandwidthList (list) - 见 BandwidthInfo 模型定义
  • +
  • Traffic (str) - 从起始时间到结束时间内的所使用的CDN总流量,单位GB
  • +
+

Response Model

+

BandwidthInfo

+
    +
  • CdnBandwidth (str) - 返回值返回指定时间区间内CDN的带宽峰值,单位Mbps(如果请求参数Type为0,则Value是五分钟粒度的带宽值,如果Type为1,则Value是1小时的带宽峰值,如果Type为2,则Value是一天内的带宽峰值)
  • +
  • Time (int) - 带宽获取的时间点。格式:时间戳
  • +
+
+ +
+
+get_new_ucdn_domain_hit_rate(req=None, **kwargs)[source]
+

GetNewUcdnDomainHitRate - 获取域名命中率

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度)
  • +
  • Areacode (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
+

Response

+
    +
  • HitRateList (list) - 见 HitRateInfo 模型定义
  • +
+

Response Model

+

HitRateInfo

+
    +
  • FlowHitRate (float) - 流量命中率,单位%
  • +
  • RequestHitRate (float) - 请求数命中率,单位%
  • +
  • Time (int) - 带宽获取的时间点。格式:时间戳
  • +
+
+ +
+
+get_new_ucdn_domain_http_code(req=None, **kwargs)[source]
+

GetNewUcdnDomainHttpCode - 获取域名状态码监控

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度)
  • +
  • Areacode (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
+

Response

+
    +
  • HttpCodeDetail (list) - 见 HttpCodeInfo 模型定义
  • +
+

Response Model

+

HttpCodeInfo

+
    +
  • HttpFiveXX (int) - 5xx数量
  • +
  • HttpFourXX (int) - 4xx数量
  • +
  • HttpOneXX (int) - 1xx数量
  • +
  • HttpThreeXX (int) - 3xx数量
  • +
  • HttpTwoXX (int) - 2xx数量
  • +
  • Time (int) - 带宽获取的时间点。格式:时间戳
  • +
+
+ +
+
+get_new_ucdn_domain_http_code_v2(req=None, **kwargs)[source]
+

GetNewUcdnDomainHttpCodeV2 - 获取域名详细状态码监控

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • BeginTime (int) - (Required) 查询的起始时间,格式为Unix Timestamp。
  • +
  • EndTime (int) - (Required) 查询的结束时间,格式为Unix Timestamp。
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天粒度,3表示按照一分钟粒度)
  • +
  • Areacode (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
+

Response

+
    +
  • HttpCodeV2Detail (list) - 见 HttpCodeV2Detail 模型定义
  • +
+

Response Model

+

HttpCodeV2Detail

+
    +
  • Http100 (int) - http100数量
  • +
  • Http101 (int) - http101数量
  • +
  • Http102 (int) - http102数量
  • +
  • Http200 (int) - http200数量
  • +
  • Http201 (int) - http201数量
  • +
  • Http202 (int) - http202数量
  • +
  • Http203 (int) - http203数量
  • +
  • Http204 (int) - http204数量
  • +
  • Http205 (int) - http205数量
  • +
  • Http206 (int) - http206数量
  • +
  • Http207 (int) - http207数量
  • +
  • Http300 (int) - http300数量
  • +
  • Http301 (int) - http301数量
  • +
  • Http302 (int) - http302数量
  • +
  • Http303 (int) - http303数量
  • +
  • Http304 (int) - http304数量
  • +
  • Http305 (int) - http305数量
  • +
  • Http306 (int) - http306数量
  • +
  • Http307 (int) - http307数量
  • +
  • Http400 (int) - http400数量
  • +
  • Http401 (int) - http401数量
  • +
  • Http402 (int) - http402数量
  • +
  • Http403 (int) - http403数量
  • +
  • Http404 (int) - http404数量
  • +
  • Http405 (int) - http405数量
  • +
  • Http406 (int) - http406数量
  • +
  • Http407 (int) - http407数量
  • +
  • Http408 (int) - http408数量
  • +
  • Http409 (int) - http409数量
  • +
  • Http410 (int) - http410数量
  • +
  • Http411 (int) - http411数量
  • +
  • Http412 (int) - http412数量
  • +
  • Http413 (int) - http413数量
  • +
  • Http414 (int) - http414数量
  • +
  • Http415 (int) - http415数量
  • +
  • Http416 (int) - http416数量
  • +
  • Http417 (int) - http417数量
  • +
  • Http418 (int) - http418数量
  • +
  • Http421 (int) - http421数量
  • +
  • Http422 (int) - http422数量
  • +
  • Http423 (int) - http423数量
  • +
  • Http424 (int) - http424数量
  • +
  • Http425 (int) - http425数量
  • +
  • Http426 (int) - http426数量
  • +
  • Http449 (int) - http449数量
  • +
  • Http451 (int) - http451数量
  • +
  • Http500 (int) - http500数量
  • +
  • Http501 (int) - http501数量
  • +
  • Http502 (int) - http502数量
  • +
  • Http503 (int) - http503数量
  • +
  • Http504 (int) - http504数量
  • +
  • Http505 (int) - http505数量
  • +
  • Http506 (int) - http506数量
  • +
  • Http507 (int) - http507数量
  • +
  • Http509 (int) - http509数量
  • +
  • Http510 (int) - http510数量
  • +
  • Time (int) - 时间
  • +
+
+ +
+
+get_new_ucdn_domain_request_num(req=None, **kwargs)[source]
+

GetNewUcdnDomainRequestNum - 获取域名请求数

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度)
  • +
  • Areacode (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
+

Response

+
    +
  • RequestList (list) - 见 RequestInfo 模型定义
  • +
+

Response Model

+

RequestInfo

+
    +
  • CdnRequest (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和
  • +
  • OriginRequest (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和
  • +
  • Time (int) - 带宽获取的时间点。格式:时间戳
  • +
+
+ +
+
+get_ucdn_domain_log(req=None, **kwargs)[source]
+

GetUcdnDomainLog - 获取加速域名原始日志

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。
  • +
  • DomainId (list) - 域名ID,创建加速域名时生成。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
  • Type (int) - 查询粒度 0=default(没有粒度) 1=按小时 2=按天
  • +
+

Response

+
    +
  • LogSet (list) - 见 LogSetList 模型定义
  • +
+

Response Model

+

LogSetInfo

+
    +
  • AbroadLog (list) - 国外日志url列表
  • +
  • CnLog (list) - 国内日志url列表
  • +
  • Time (int) - 日志时间UnixTime
  • +
+

LogSetList

+
    +
  • Domain (str) - 域名
  • +
  • Logs (list) - 见 LogSetInfo 模型定义
  • +
+
+ +
+
+get_ucdn_domain_prefetch_enable(req=None, **kwargs)[source]
+

GetUcdnDomainPrefetchEnable - 获取域名预取开启状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • DomainId (str) - (Required) 域名ID,创建加速域名时生成。
  • +
+

Response

+
    +
  • Enable (int) - 0表示该域名未开启预取,1表示该域名已开启预取
  • +
+
+ +
+
+get_ucdn_domain_request_num_v2(req=None, **kwargs)[source]
+

GetUcdnDomainRequestNumV2 - 获取域名请求数

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • BeginTime (int) - (Required) 查询的起始时间,格式为Unix Timestamp
  • +
  • EndTime (int) - (Required) 查询的结束时间,格式为Unix Timestamp
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度, 3=按1分钟)
  • +
  • Areacode (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
+

Response

+
    +
  • RequestList (list) - 见 RequestInfo 模型定义
  • +
+

Response Model

+

RequestInfo

+
    +
  • CdnRequest (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和
  • +
  • OriginRequest (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和
  • +
  • Time (int) - 带宽获取的时间点。格式:时间戳
  • +
+
+ +
+
+get_ucdn_domain_traffic(req=None, **kwargs)[source]
+

GetUcdnDomainTraffic - 获取加速域名流量使用信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Areacode (str) - 查询流量区域 cn代表国内 abroad代表海外,默认全部区域。
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。
  • +
  • DomainId (list) - 域名ID,创建加速域名时生成。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
+

Response

+
    +
  • TrafficSet (list) - 见 UcdnDomainTrafficSet 模型定义
  • +
+

Response Model

+

UcdnDomainTrafficSet

+
    +
  • Time (int) - 流量获取的时间点,格式为Unix Timestamp
  • +
  • Value (float) - 查询每日流量总值,单位:GB
  • +
+
+ +
+
+get_ucdn_pass_bandwidth(req=None, **kwargs)[source]
+

GetUcdnPassBandwidth - 获取回源带宽数据(cdn回客户源站部分)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Type (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度)
  • +
  • Areacode (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内
  • +
  • BeginTime (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。
  • +
  • DomainId (list) - 域名id,创建域名时生成的id。默认全部域名
  • +
  • EndTime (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。
  • +
+

Response

+
    +
  • BandwidthDetail (list) - 见 BandwidthInfoDetail 模型定义
  • +
+

Response Model

+

BandwidthInfoDetail

+
    +
  • Bandwidth (float) - 返回值带宽值数据。
  • +
  • Time (int) - 宽获取的时间点。格式:时间戳
  • +
+
+ +
+
+get_ucdn_traffic(req=None, **kwargs)[source]
+

GetUcdnTraffic - 获取流量信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
+

Response

+
    +
  • TrafficSet (list) - 见 TrafficSet 模型定义
  • +
+

Response Model

+

TrafficSet

+
    +
  • Areacode (str) - 购买流量的区域, cn: 国内; abroad: 国外
  • +
  • TrafficLeft (str) - Areacode区域内总剩余流量, 单位GB
  • +
  • TrafficTotal (str) - Areacode区域内总购买流量, 单位GB
  • +
  • TrafficUsed (str) - Areacode区域内总使用流量, 单位GB
  • +
+
+ +
+
+prefetch_new_ucdn_domain_cache(req=None, **kwargs)[source]
+

PrefetchNewUcdnDomainCache - 提交预取任务

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • UrlList (list) - (Required) 预热URL列表,n从自然数0开始。UrlList.n字段必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名
  • +
+

Response

+
    +
  • TaskId (str) - 本次提交url对应的任务id
  • +
+
+ +
+
+refresh_new_ucdn_domain_cache(req=None, **kwargs)[source]
+

RefreshNewUcdnDomainCache - 刷新缓存

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Type (str) - (Required) 刷新类型,file代表文件刷新,dir 代表路径刷新
  • +
  • UrlList (list) - (Required) 刷新多个URL列表时,一次最多提交30个。必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名
  • +
+

Response

+
    +
  • TaskId (str) - 本次提交url对应的任务id
  • +
+
+ +
+
+switch_ucdn_charge_type(req=None, **kwargs)[source]
+

SwitchUcdnChargeType - 切换账号计费方式

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • ChargeType (str) - (Required) 计费方式。traffic代表按流量包计费,bandwidth按带宽付费
  • +
+

Response

+
+ +
+ +
+
+

UDB

+
+
+class ucloud.services.udb.client.UDBClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+backup_udb_instance(req=None, **kwargs)[source]
+

BackupUDBInstance - 备份UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupName (str) - (Required) 备份名称
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • BackupMethod (str) - 使用的备份方式。(快照备份即物理备份。注意只有SSD版本的mysql实例支持设置为snapshot)
  • +
  • Blacklist (str) - 备份黑名单列表,以 ; 分隔。注意:只有逻辑备份下备份黑名单才生效,快照备份备份黑名单下无效
  • +
  • ForceBackup (bool) - true表示逻辑备份时是使用 –force 参数,false表示不使用 –force 参数。物理备份此参数无效。
  • +
  • UseBlacklist (bool) - 是否使用黑名单备份,默认false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+backup_udb_instance_binlog(req=None, **kwargs)[source]
+

BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupFile (str) - (Required) 需要备份文件,可通过DescribeUDBInstanceBinlog获得 如果要传入多个文件名,以空格键分割,用单引号包含.
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • BackupName (str) - DB备份文件名称
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+backup_udb_instance_error_log(req=None, **kwargs)[source]
+

BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupName (str) - (Required) 备份名称
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+backup_udb_instance_slow_log(req=None, **kwargs)[source]
+

BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupName (str) - (Required) 备份文件名称
  • +
  • BeginTime (int) - (Required) 过滤条件:起始时间(时间戳)
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • EndTime (int) - (Required) 过滤条件:结束时间(时间戳)
  • +
+

Response

+
+ +
+
+check_recover_udb_instance(req=None, **kwargs)[source]
+

CheckRecoverUDBInstance - 核查db是否可以使用回档功能

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SrcDBId (str) - (Required) 源实例的Id(只支持普通版DB不支持高可用)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • LastestTime (int) - 核查成功返回值为可以回档到的最近时刻,核查失败不返回
  • +
+
+ +
+
+check_udb_instance_to_ha_allowance(req=None, **kwargs)[source]
+

CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
+

Response

+
    +
  • Allowance (str) - Yes ,No ,Yes即可以升级,No为不可以升级
  • +
+
+ +
+
+clear_udb_log(req=None, **kwargs)[source]
+

ClearUDBLog - 清除UDB实例的log

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取
  • +
  • LogType (int) - (Required) 日志类型,10-error(暂不支持)、20-slow(暂不支持 )、30-binlog
  • +
  • BeforeTime (int) - 删除时间点(至少前一天)之前log,采用时间戳(秒),默认当 前时间点前一天
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+create_udb_instance(req=None, **kwargs)[source]
+

CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • AdminPassword (str) - (Required) 管理员密码
  • +
  • DBTypeId (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6,14:postgresql-10.4
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G - 3000G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • ParamGroupId (int) - (Required) DB实例使用的配置参数组id
  • +
  • Port (int) - (Required) 端口号,mysql默认3306,mongodb默认27017,postgresql默认5432
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • AdminUser (str) - 管理员帐户名,默认root
  • +
  • BackupCount (int) - 备份策略,每周备份数量,默认7次
  • +
  • BackupDuration (int) - 备份策略,备份时间间隔,单位小时计,默认24小时
  • +
  • BackupId (int) - 备份id,如果指定,则表明从备份恢复实例
  • +
  • BackupTime (int) - 备份策略,备份开始时间,单位小时计,默认1点
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区,参见 可用区列表
  • +
  • CPU (int) - cpu核数
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Month
  • +
  • ClusterRole (str) - 当DB类型(DBTypeId)为mongodb时,需要指定mongo的角色,可选值为configsrv (配置节点),shardsrv (数据节点)
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • DisableSemisync (bool) - 是否开启异步高可用,默认不填,可置为true
  • +
  • HAArch (str) - 高可用架构:1) haproxy(默认): 当前仅支持mysql。2) sentinel: 基于vip和哨兵节点的架构,当前支持mysql和pg。
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 默认是”Normal”
  • +
  • InstanceType (str) - UDB数据库机型
  • +
  • Quantity (int) - 购买时长,默认值1
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • SubnetId (str) - 子网ID
  • +
  • Tag (str) - 实例所在的业务组名称
  • +
  • UDBCId (str) - 专区ID信息(如果这个参数存在这说明是在专区中创建DB)
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false。目前主要可用区、海外机房、新机房只提供SSD资源,非SSD资源不再提供。
  • +
  • VPCId (str) - VPC的ID
  • +
+

Response

+
    +
  • DBId (str) - BD实例id
  • +
+
+ +
+
+create_udb_instance_by_recovery(req=None, **kwargs)[source]
+

CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • RecoveryTime (int) - (Required) 恢复到某个时间点的时间戳(UTC时间格式,默认单位秒)
  • +
  • SrcDBId (str) - (Required) 源实例的Id
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长,默认值1
  • +
  • SubnetId (str) - 子网ID
  • +
  • UDBCId (str) - 专区的Id
  • +
  • UseSSD (bool) - 指定是否是否使用SSD,默认使用主库的配置
  • +
  • VPCId (str) - VPC的ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - db实例id
  • +
+
+ +
+
+create_udb_param_group(req=None, **kwargs)[source]
+

CreateUDBParamGroup - 从已有配置文件创建新配置文件

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBTypeId (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6
  • +
  • Description (str) - (Required) 参数组描述
  • +
  • GroupName (str) - (Required) 新配置参数组名称
  • +
  • SrcGroupId (int) - (Required) 源参数组id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • RegionFlag (bool) - 是否是地域级别的配置文件,默认是false
  • +
+

Response

+
    +
  • GroupId (int) - 新配置参数组id
  • +
+
+ +
+
+create_udb_replication_instance(req=None, **kwargs)[source]
+

CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • SrcId (str) - (Required) primary节点的DBId,该值可以通过DescribeUDBInstance获取
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • IsArbiter (bool) - 是否是仲裁节点,默认false,仲裁节点按最小机型创建
  • +
  • Port (int) - 端口号,默认27017,取值范围3306至65535。
  • +
  • UseSSD (bool) - 是否使用SSD,默认不使用
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - 创建从节点的DBId
  • +
+
+ +
+
+create_udb_route_instance(req=None, **kwargs)[source]
+

CreateUDBRouteInstance - 创建mongos实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ConfigsvrId (list) - (Required) 配置服务器的dbid,允许一个或者三个。
  • +
  • DBTypeId (str) - (Required) DB类型id,mongodb按版本细分有1:mongodb-2.4,2:mongodb-2.6,3:mongodb-3.0,4:mongodb-3.2
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),目前支持以下几档 600M/1500M/3000M /6000M/15000M/30000M
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • ParamGroupId (int) - (Required) DB实例使用的配置参数组id
  • +
  • Port (int) - (Required) 端口号,mongodb默认27017
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Month
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长,默认值1
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - db实例id
  • +
+
+ +
+
+create_udb_slave(req=None, **kwargs)[source]
+

CreateUDBSlave - 创建UDB实例的slave

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称,至少6位
  • +
  • SrcId (str) - (Required) master实例的DBId,该值可以通过DescribeUDBInstance获取
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • DiskSpace (int) - 磁盘空间(GB), 暂时支持20G - 3000G(API支持,前端暂时只开放内存定制)
  • +
  • InstanceMode (str) - UDB实例部署模式,可选值如下:Normal: 普通单点实例HA: 高可用部署实例
  • +
  • InstanceType (str) - UDB实例类型:Normal和SATA_SSD
  • +
  • IsLock (bool) - 是否锁主库,默认为true
  • +
  • MemoryLimit (int) - 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M
  • +
  • Port (int) - 端口号,mysql默认3306
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DBId (str) - 创建slave的DBId
  • +
+
+ +
+
+delete_udb_backup(req=None, **kwargs)[source]
+

DeleteUDBBackup - 删除UDB实例备份

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 备份id,可通过DescribeUDBBackup获得
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区,参见[可用区列表]
  • +
+

Response

+
+ +
+
+delete_udb_instance(req=None, **kwargs)[source]
+

DeleteUDBInstance - 删除UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取
  • +
  • UDBCId (str) - 专区ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+delete_udb_log_package(req=None, **kwargs)[source]
+

DeleteUDBLogPackage - 删除UDB日志包

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 日志包id,可通过DescribeUDBLogPackage获得
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
+

Response

+
+ +
+
+delete_udb_param_group(req=None, **kwargs)[source]
+

DeleteUDBParamGroup - 删除配置参数组

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (int) - (Required) 参数组id,可通过DescribeUDBParamGroup获取
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • RegionFlag (bool) - 是否属于地域级别
  • +
+

Response

+
+ +
+
+describe_udb_backup(req=None, **kwargs)[source]
+

DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - (Required) 分页显示的条目数,列表操作则指定
  • +
  • Offset (int) - (Required) 分页显示的起始偏移,列表操作则指定
  • +
  • BackupId (int) - 如果填了BackupId, 那么只拉取这个备份的记录
  • +
  • BackupType (int) - 备份类型,取值为0或1,0表示自动,1表示手动
  • +
  • BeginTime (int) - 过滤条件:起始时间(Unix时间戳)
  • +
  • ClassType (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver)
  • +
  • DBId (str) - DB实例Id,如果指定,则只获取该db的备份信息 该值可以通过DescribeUDBInstance获取
  • +
  • EndTime (int) - 过滤条件:结束时间(Unix时间戳)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBBackupSet 模型定义
  • +
  • TotalCount (int) - 满足条件备份总数,如果指定dbid,则是该db备份总数
  • +
+

Response Model

+

UDBBackupSet

+
    +
  • BackupEndTime (int) - 备份完成时间(Unix时间戳)
  • +
  • BackupId (int) - 备份id
  • +
  • BackupName (str) - 备份名称
  • +
  • BackupSize (int) - 备份文件大小(字节)
  • +
  • BackupTime (int) - 备份时间(Unix时间戳)
  • +
  • BackupType (int) - 备份类型,取值为0或1,0表示自动,1表示手动
  • +
  • BackupZone (str) - 跨机房高可用备库所在可用区
  • +
  • DBId (str) - dbid
  • +
  • DBName (str) - 对应的db名称
  • +
  • ErrorInfo (str) - 备份错误信息
  • +
  • State (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期
  • +
  • Zone (str) - 备份所在可用区
  • +
+
+ +
+
+describe_udb_backup_blacklist(req=None, **kwargs)[source]
+

DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Blacklist (str) - DB的黑名单列表, db.%为指定库 dbname.tablename为指定表
  • +
+
+ +
+
+describe_udb_binlog_backup_url(req=None, **kwargs)[source]
+

DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) DB实例binlog备份ID,可以从DescribeUDBLogPackage结果当中获得
  • +
  • DBId (str) - (Required) DB实例Id
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - DB实例备份文件的公网地址
  • +
  • InnerBackupPath (str) - DB实例备份文件的内网地址
  • +
+
+ +
+
+describe_udb_instance(req=None, **kwargs)[source]
+

DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ClassType (str) - DB种类,如果是列表操作,则需要指定,不区分大小写,其取值如下:mysql: SQL;mongo: NOSQL;postgresql: postgresql
  • +
  • DBId (str) - DB实例id,如果指定则获取单个db实例的描述,否则为列表操作。 指定DBId时无需填写ClassType、Offset、Limit
  • +
  • IncludeSlaves (bool) - 当只获取这个特定DBId的信息时,如果有该选项,那么把这个DBId实例的所有从库信息一起拉取并返回
  • +
  • IsInUDBC (bool) - 是否查看专区里面DB
  • +
  • Limit (int) - 分页显示数量,列表操作时必填
  • +
  • Offset (int) - 分页显示起始偏移位置,列表操作时必填
  • +
  • UDBCId (str) - IsInUDBC为True,UDBCId为空,说明查看整个可用区的专区的db,如果UDBId不为空则只查看此专区下面的db
  • +
  • Zone (str) - 可用区,不填时默认全部可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBInstanceSet 模型定义
  • +
  • TotalCount (int) - 用户db组的数量,对于 mysql: 主从结对数量,没有slave,则只有master mongodb: 副本集数量
  • +
+

Response Model

+

UDBSlaveInstanceSet

+
    +
  • AdminUser (str) - 管理员帐户名,默认root
  • +
  • BackupBeginTime (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点
  • +
  • BackupBlacklist (str) - 备份策略,备份黑名单,mongodb则不适用
  • +
  • BackupCount (int) - 备份策略,不可修改,备份文件保留的数量,默认7次
  • +
  • BackupDate (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能
  • +
  • BackupDuration (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • ClusterRole (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式
  • +
  • CreateTime (int) - DB实例创建时间,采用UTC计时时间戳
  • +
  • DBId (str) - DB实例id
  • +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6
  • +
  • DataFileSize (float) - DB实例数据文件大小,单位GB
  • +
  • DiskSpace (int) - 磁盘空间(GB), 默认根据配置机型
  • +
  • DiskUsedSize (float) - DB实例磁盘已使用空间,单位GB
  • +
  • ExpiredTime (int) - DB实例过期时间,采用UTC计时时间戳
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例;”HA”: 高可用版UDB实例
  • +
  • InstanceType (str) - UDB数据库机型
  • +
  • InstanceTypeId (int) - UDB数据库机型ID
  • +
  • LogFileSize (float) - DB实例日志文件大小,单位GB
  • +
  • MemoryLimit (int) - 内存限制(MB),默认根据配置机型
  • +
  • ModifyTime (int) - DB实例修改时间,采用UTC计时时间戳
  • +
  • Name (str) - 实例名称,至少6位
  • +
  • ParamGroupId (int) - DB实例使用的配置参数组id
  • +
  • Port (int) - 端口号,mysql默认3306,mongodb默认27017
  • +
  • Role (str) - DB实例角色,mysql区分master/slave,mongodb多种角色
  • +
  • SSDType (str) - SSD类型,SATA/PCI-E
  • +
  • SrcDBId (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id
  • +
  • State (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败
  • +
  • SubnetId (str) - 子网ID
  • +
  • SystemFileSize (float) - DB实例系统文件大小,单位GB
  • +
  • Tag (str) - 获取资源其他信息
  • +
  • UseSSD (bool) - 是否使用SSD
  • +
  • VPCId (str) - VPC的ID
  • +
  • VirtualIP (str) - DB实例虚ip
  • +
  • VirtualIPMac (str) - DB实例虚ip的mac地址
  • +
  • Zone (str) - 可用区
  • +
+

UDBInstanceSet

+
    +
  • AdminUser (str) - 管理员帐户名,默认root
  • +
  • BackupBeginTime (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点
  • +
  • BackupBlacklist (str) - 备份策略,备份黑名单,mongodb则不适用
  • +
  • BackupCount (int) - 备份策略,不可修改,备份文件保留的数量,默认7次
  • +
  • BackupDate (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能
  • +
  • BackupDuration (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • CluserRole (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式
  • +
  • CreateTime (int) - DB实例创建时间,采用UTC计时时间戳
  • +
  • DBId (str) - DB实例id
  • +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6
  • +
  • DataFileSize (float) - DB实例数据文件大小,单位GB
  • +
  • DataSet (list) - 见 UDBSlaveInstanceSet 模型定义
  • +
  • DiskSpace (int) - 磁盘空间(GB), 默认根据配置机型
  • +
  • DiskUsedSize (float) - DB实例磁盘已使用空间,单位GB
  • +
  • ExpiredTime (int) - DB实例过期时间,采用UTC计时时间戳
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例
  • +
  • InstanceType (str) - UDB数据库机型
  • +
  • InstanceTypeId (int) - UDB数据库机型ID
  • +
  • LogFileSize (float) - DB实例日志文件大小,单位GB
  • +
  • MemoryLimit (int) - 内存限制(MB),默认根据配置机型
  • +
  • ModifyTime (int) - DB实例修改时间,采用UTC计时时间戳
  • +
  • Name (str) - 实例名称,至少6位
  • +
  • ParamGroupId (int) - DB实例使用的配置参数组id
  • +
  • Port (int) - 端口号,mysql默认3306,mongodb默认27017
  • +
  • Role (str) - DB实例角色,mysql区分master/slave,mongodb多种角色
  • +
  • SSDType (str) - SSD类型,SATA/PCI-E
  • +
  • SrcDBId (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id
  • +
  • State (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败
  • +
  • SubnetId (str) - 子网ID
  • +
  • SystemFileSize (float) - DB实例系统文件大小,单位GB
  • +
  • Tag (str) - 获取资源其他信息
  • +
  • UseSSD (bool) - 是否使用SSD
  • +
  • VPCId (str) - VPC的ID
  • +
  • VirtualIP (str) - DB实例虚ip
  • +
  • VirtualIPMac (str) - DB实例虚ip的mac地址
  • +
  • Zone (str) - DB实例所在可用区
  • +
+
+ +
+
+describe_udb_instance_backup_state(req=None, **kwargs)[source]
+

DescribeUDBInstanceBackupState - 获取UDB实例备份状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 备份记录ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区,参见[可用区列表]
  • +
+

Response

+
    +
  • BackupEndTime (int) -
  • +
  • BackupSize (int) -
  • +
  • State (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期
  • +
+
+ +
+
+describe_udb_instance_backup_url(req=None, **kwargs)[source]
+

DescribeUDBInstanceBackupURL - 获取UDB备份下载地址

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) DB实例备份ID,该值可以通过DescribeUDBBackup获取
  • +
  • DBId (str) - (Required) DB实例Id,该值可通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - DB实例备份文件公网的地址
  • +
  • InnerBackupPath (str) - DB实例备份文件内网的地址
  • +
+
+ +
+
+describe_udb_instance_binlog(req=None, **kwargs)[source]
+

DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BeginTime (int) - (Required) 过滤条件:起始时间(时间戳)
  • +
  • DBId (str) - (Required) DB实例Id
  • +
  • EndTime (int) - (Required) 过滤条件:结束时间(时间戳)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBInstanceBinlogSet 模型定义
  • +
+

Response Model

+

UDBInstanceBinlogSet

+
    +
  • BeginTime (int) - Binlog文件生成时间(时间戳)
  • +
  • EndTime (int) - Binlog文件结束时间(时间戳)
  • +
  • Name (str) - Binlog文件名
  • +
  • Size (int) - Binlog文件大小
  • +
+
+ +
+
+describe_udb_instance_binlog_backup_state(req=None, **kwargs)[source]
+

DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) 备份记录ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
+

Response

+
    +
  • BackupSize (int) - 备份文件大小(字节)
  • +
  • State (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期
  • +
+
+ +
+
+describe_udb_instance_price(req=None, **kwargs)[source]
+

DescribeUDBInstancePrice - 获取UDB实例价格信息

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBTypeId (str) - (Required) UDB实例的DB版本字符串
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB),暂时支持20(GB) - 3000(GB), 输入不带单位
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),单位为MB.目前支持:1000-96000
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year,按年付费; Month,按月付费 Dynamic,按需付费(需开启权限) Trial,试用(需开启权限)默认为月付
  • +
  • Count (int) - 购买DB实例数量,最大数量为10台, 默认为1台
  • +
  • InstanceMode (str) - 实例的部署类型。可选值为:Normal: 普通单点实例,Slave: 从库实例,HA: 高可用部署实例,默认是Normal
  • +
  • Quantity (int) - DB购买多少个”计费时间单位”,默认值为1。比如:买2个月,Quantity就是2。如果计费单位是“按月”,并且Quantity为0,表示“购买到月底”
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必填
  • +
  • UseSSD (str) - 是否使用SSD,只能填true或false,默认为false
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBInstancePriceSet 模型定义
  • +
+

Response Model

+

UDBInstancePriceSet

+
    +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • Price (int) - 价格,单位为分
  • +
+
+ +
+
+describe_udb_instance_state(req=None, **kwargs)[source]
+

DescribeUDBInstanceState - 获取UDB实例状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • State (str) - DB状态标记 Init:初始化中;Fail:安装失败; Starting:启动中; Running : 运行 ;Shutdown:关闭中; Shutoff :已关闭; Delete:已删除; Upgrading:升级中; Promoting: 提升为独库进行中; Recovering: 恢复中; Recover fail:恢复失败。
  • +
+
+ +
+
+describe_udb_instance_upgrade_price(req=None, **kwargs)[source]
+

DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB)
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Price (int) - 价格,单位为分
  • +
+
+ +
+
+describe_udb_log_backup_url(req=None, **kwargs)[source]
+

DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (int) - (Required) DB实例备份ID
  • +
  • DBId (str) - (Required) DB实例Id
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - 备份外网URL
  • +
  • UsernetPath (str) - 备份用户网URL
  • +
+
+ +
+
+describe_udb_log_package(req=None, **kwargs)[source]
+

DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - (Required) 分页显示的条目数,列表操作则指定
  • +
  • Offset (int) - (Required) 分页显示的起始偏移,列表操作则指定
  • +
  • BeginTime (int) - 过滤条件:起始时间(时间戳)
  • +
  • DBId (str) - DB实例Id,如果指定,则只获取该db的备份信息
  • +
  • EndTime (int) - 过滤条件:结束时间(时间戳)
  • +
  • Type (int) - 需要列出的备份文件类型,每种文件的值如下 2 : BINLOG_BACKUP 3 : SLOW_QUERY_BACKUP 4 : ERRORLOG_BACKUP
  • +
  • Types (list) - Types作为Type的补充,支持多值传入,可以获取多个类型的日志记录,如:Types.0=2&Types.1=3
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 LogPackageDataSet 模型定义
  • +
  • TotalCount (int) - 备份总数,如果指定dbid,则是该db备份总数
  • +
+

Response Model

+

LogPackageDataSet

+
    +
  • BackupId (int) - 备份id
  • +
  • BackupName (str) - 备份名称
  • +
  • BackupSize (int) - 备份文件大小
  • +
  • BackupTime (int) - 备份时间
  • +
  • BackupType (int) - 备份类型,包括2-binlog备份,3-slowlog备份
  • +
  • BackupZone (str) - 跨可用区高可用备库所在可用区
  • +
  • DBId (str) - dbid
  • +
  • DBName (str) - 对应的db名称
  • +
  • State (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期
  • +
  • Zone (str) - 所在可用区
  • +
+
+ +
+
+describe_udb_param_group(req=None, **kwargs)[source]
+

DescribeUDBParamGroup - 获取参数组详细参数信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - (Required) 分页显示的条目数,列表操作则指定
  • +
  • Offset (int) - (Required) 分页显示的起始偏移,列表操作则指定
  • +
  • ClassType (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver)
  • +
  • GroupId (int) - 参数组id,如果指定则获取描述,否则是列表操作,需要 指定Offset/Limit
  • +
  • IsInUDBC (bool) - 是否选取专区中配置
  • +
  • RegionFlag (bool) - 当请求没有填写Zone时,如果指定为true,表示只拉取跨可用区的相关配置文件,否则,拉取所有机房的配置文件(包括每个单可用区和跨可用区)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDBParamGroupSet 模型定义
  • +
  • TotalCount (int) - 参数组总数,列表操作时才会有该参数
  • +
+

Response Model

+

UDBParamMemberSet

+
    +
  • AllowedVal (str) - 允许的值(根据参数类型,用分隔符表示)
  • +
  • ApplyType (int) - 参数值应用类型,取值范围为{0,10,20},各值代表 意义为0-unknown、10-static、20-dynamic
  • +
  • FormatType (int) - 允许值的格式类型,取值范围为{0,10,20},意义分 别为PVFT_UNKOWN=0,PVFT_RANGE=10, PVFT_ENUM=20
  • +
  • Key (str) - 参数名称
  • +
  • Modifiable (bool) - 是否可更改,默认为false
  • +
  • Value (str) - 参数值
  • +
  • ValueType (int) - 参数值应用类型,取值范围为{0,10,20,30},各值 代表意义为 0-unknown、10-int、20-string、 30-bool
  • +
+

UDBParamGroupSet

+
    +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6 7:percona-5.6
  • +
  • Description (str) - 参数组描述
  • +
  • GroupId (int) - 参数组id
  • +
  • GroupName (str) - 参数组名称
  • +
  • Modifiable (bool) - 参数组是否可修改
  • +
  • ParamMember (list) - 见 UDBParamMemberSet 模型定义
  • +
  • RegionFlag (bool) -
  • +
  • Zone (str) -
  • +
+
+ +
+
+describe_udb_type(req=None, **kwargs)[source]
+

DescribeUDBType - 获取UDB支持的类型信息

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • BackupZone (str) - 跨可用区高可用DB的备库所在区域,仅当该可用区支持跨可用区高可用时填入。参见 可用区列表
  • +
  • DBClusterType (str) - DB实例类型,如mysql,sqlserver,mongo,postgresql
  • +
  • DiskType (str) - 返回支持某种磁盘类型的DB类型。如果没传,则表示任何磁盘类型均可。
  • +
  • InstanceMode (str) - 返回支持某种实例类型的DB类型。如果没传,则表示任何实例类型均可。normal:单点,ha:高可用,sharded_cluster:分片集群
  • +
+

Response

+
    +
  • Action (str) - 操作名称
  • +
  • DataSet (list) - 见 UDBTypeSet 模型定义
  • +
  • RetCode (int) - 返回码
  • +
+

Response Model

+

UDBTypeSet

+
    +
  • DBTypeId (str) - DB类型id,mysql/mongodb按版本细分各有一个id, 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6
  • +
+
+ +
+
+edit_udb_backup_blacklist(req=None, **kwargs)[source]
+

EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Blacklist (str) - (Required) 黑名单,规范示例,指定库mysql.%;test.%; 指定表city.address;
  • +
  • DBId (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+fetch_udb_instance_earliest_recover_time(req=None, **kwargs)[source]
+

FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点

+

Request

+ +

Response

+
    +
  • EarliestTime (int) - 获取最早可回档时间点
  • +
+
+ +
+
+modify_udb_instance_name(req=None, **kwargs)[source]
+

ModifyUDBInstanceName - 重命名UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Name (str) - (Required) 实例的新名字, 长度要求为6~63位
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+modify_udb_instance_password(req=None, **kwargs)[source]
+

ModifyUDBInstancePassword - 修改DB实例的管理员密码

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的ID,该值可以通过DescribeUDBInstance获取
  • +
  • Password (str) - (Required) 实例的新密码
  • +
  • AccountName (str) - sqlserver帐号,仅在sqlserver的情况下填该参数
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+promote_udb_instance_to_ha(req=None, **kwargs)[source]
+

PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
+

Response

+
+ +
+
+promote_udb_slave(req=None, **kwargs)[source]
+

PromoteUDBSlave - 从库提升为独立库

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • IsForce (bool) - 是否强制(如果从库落后可能会禁止提升),默认false 如果落后情况下,强制提升丢失数据
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_udb_instance(req=None, **kwargs)[source]
+

ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id
  • +
  • DiskSpace (int) - (Required) 磁盘空间(GB), 暂时支持20G-3000G
  • +
  • MemoryLimit (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/ 12000M/16000M/ 24000M/32000M/ 48000M/64000M/96000M。
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • InstanceMode (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 默认是”Normal”
  • +
  • InstanceType (str) - UDB数据库机型: “Normal”: “标准机型” , “SATA_SSD”: “SSD机型” , “PCIE_SSD”: “SSD高性能机型” , “Normal_Volume”: “标准大容量机型”, “SATA_SSD_Volume”: “SSD大容量机型” , “PCIE_SSD_Volume”: “SSD高性能大容量机型”
  • +
  • SSDType (str) - SSD类型,可选值为”SATA”、”PCI-E”,如果UseSSD为true ,则必选
  • +
  • StartAfterUpgrade (bool) - DB关闭状态下升降级,升降级后是否启动DB,默认为false
  • +
  • UDBCId (str) - 专区的ID,如果有值表示专区中的DB配置升降级
  • +
  • UseSSD (bool) - 是否使用SSD,默认为false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+restart_udb_instance(req=None, **kwargs)[source]
+

RestartUDBInstance - 重启UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+start_udb_instance(req=None, **kwargs)[source]
+

StartUDBInstance - 启动UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+stop_udb_instance(req=None, **kwargs)[source]
+

StopUDBInstance - 关闭UDB实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • ForceToKill (bool) - 是否使用强制手段关闭DB,默认是false
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+switch_udb_instance_to_ha(req=None, **kwargs)[source]
+

SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,不填则按现在单点计费执行
  • +
  • Quantity (str) - 购买时长,需要和 ChargeType 搭配使用,否则使用单点计费策略的值
  • +
  • Tag (str) - 业务组
  • +
+

Response

+
    +
  • DBId (str) - 切换后高可用db实例的Id
  • +
+
+ +
+
+update_udb_instance_backup_strategy(req=None, **kwargs)[source]
+

UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DBId (str) - (Required) 主节点的Id
  • +
  • BackupDate (str) - 备份时期标记位。共7位,每一位为一周中一天的备份情况,0表示关闭当天备份,1表示打开当天备份。最右边的一位为星期天的备份开关,其余从右到左依次为星期一到星期六的备份配置开关,每周必须至少设置两天备份。例如:1100000表示打开星期六和星期五的备份功能
  • +
  • BackupMethod (str) - 选择默认的备份方式,可选 snapshot 表示使用快照/物理备份,填 logic 表示使用逻辑备份。需要同时设置BackupDate字段。(注意现在只有SSD 版本的 MySQL实例支持物理备份)
  • +
  • BackupTime (int) - 备份的整点时间,范围[0,23]
  • +
  • ForceDump (bool) - 当导出某些数据遇到问题后,是否强制导出其他剩余数据默认是false需要同时设置BackupDate字段
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+update_udb_instance_slave_backup_switch(req=None, **kwargs)[source]
+

UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupSwitch (int) - (Required) 从库的备份开关,范围[0,1],0表示从库备份功能关闭,1 表示从库备份开关打开。
  • +
  • MasterDBId (str) - (Required) 主库的Id
  • +
  • SlaveDBId (str) - 从库的Id,如果从库备份开关设定为打开,则必须赋值。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+update_udb_param_group(req=None, **kwargs)[source]
+

UpdateUDBParamGroup - 更新UDB配置参数项

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (int) - (Required) 配置参数组id,使用DescribeUDBParamGroup获得
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • Description (str) - 配置文件的描述,不传时认为不修改
  • +
  • Key (str) - 参数名称(与Value配合使用)
  • +
  • Name (str) - 配置文件的名字,不传时认为不修改名字,传了则不能为空
  • +
  • RegionFlag (bool) - 该配置文件是否是地域级别配置文件,默认是false
  • +
  • Value (str) - 参数值(与Key配合使用)
  • +
+

Response

+
+ +
+
+upload_udb_param_group(req=None, **kwargs)[source]
+

UploadUDBParamGroup - 导入UDB配置

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Content (str) - (Required) 配置内容,导入的配置内容采用base64编码
  • +
  • DBTypeId (str) - (Required) DB类型id,DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6
  • +
  • Description (str) - (Required) 参数组描述
  • +
  • GroupName (str) - (Required) 配置参数组名称
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ParamGroupTypeId (int) - 配置文件子类型 0-未知, 1-Shardsvr-MMAPv1, 2-Shardsvr-WiredTiger, 3-Configsvr-MMAPv1, 4-Configsvr-WiredTiger, 5-Mongos
  • +
  • RegionFlag (bool) - 该配置文件是否是地域级别配置文件,默认是false
  • +
+

Response

+
    +
  • GroupId (int) - 配置参数组id
  • +
+
+ +
+ +
+
+

UDPN

+
+
+class ucloud.services.udpn.client.UDPNClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_udpn(req=None, **kwargs)[source]
+

AllocateUDPN - 分配一条 UDPN 专线

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 带宽
  • +
  • Peer1 (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • Peer2 (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • ChargeType (str) - 计费类型,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费
  • +
  • CouponId (str) - 代金劵
  • +
  • Quantity (int) - 计费时长,默认 1
  • +
+

Response

+
    +
  • UDPNId (str) - 资源名称
  • +
+
+ +
+
+describe_udpn(req=None, **kwargs)[source]
+

DescribeUDPN - 描述 UDPN

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度,默认为 20
  • +
  • Offset (int) - 列表起始位置偏移量,默认为 0
  • +
  • UDPNId (str) - 申请到的 UDPN 资源 ID。若为空,则查询该用户在机房所有的专线信息。非默认项目资源,需填写ProjectId
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDPNData 模型定义
  • +
  • TotalCount (int) - 查询到的总数量
  • +
+

Response Model

+

UDPNData

+
    +
  • Bandwidth (int) - 带宽
  • +
  • ChargeType (str) - 计费类型
  • +
  • CreateTime (int) - unix 时间戳 创建时间
  • +
  • ExpireTime (int) - unix 时间戳 到期时间
  • +
  • Peer1 (str) - 可用区域 1
  • +
  • Peer2 (str) - 可用区域 2
  • +
  • UDPNId (str) - UDPN 资源短 ID
  • +
+
+ +
+
+get_udpn_line_list(req=None, **kwargs)[source]
+

GetUDPNLineList - 获取当前支持的专线线路列表

+

Request

+ +

Response

+
    +
  • DataSet (list) - 见 UDPNLineSet 模型定义
  • +
  • TotalCount (int) - DataSet中的元素个数
  • +
+

Response Model

+

UDPNLineSet

+
    +
  • BandwidthUpperLimit (int) - 线路带宽上限,单位 M
  • +
  • LocalRegion (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky
  • +
  • RemoteRegion (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky
  • +
+
+ +
+
+get_udpn_price(req=None, **kwargs)[source]
+

GetUDPNPrice - 获取 UDPN 价格

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 带宽信息
  • +
  • Peer1 (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • Peer2 (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky
  • +
  • ChargeType (str) - 计费类型
  • +
  • Quantity (int) - 购买时长
  • +
+

Response

+
    +
  • Price (float) - 专线价格
  • +
  • PurchaseValue (int) - 资源有效期 unix 时间戳
  • +
+
+ +
+
+get_udpn_upgrade_price(req=None, **kwargs)[source]
+

GetUDPNUpgradePrice - 获取专线升级价格

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 带宽
  • +
  • UDPNId (str) - (Required) 专线带宽资源 Id
  • +
+

Response

+
    +
  • Price (float) - 升级后的价格
  • +
+
+ +
+
+modify_udpn_bandwidth(req=None, **kwargs)[source]
+

ModifyUDPNBandwidth - 修改带宽值

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 调整后专线带宽, 单位为Mbps,取值范围为大于等于2且小于等于1000([2-1000])的整数
  • +
  • UDPNId (str) - (Required) UDPN Id
  • +
  • CouponId (str) - 代金劵 ID
  • +
+

Response

+
+ +
+
+release_udpn(req=None, **kwargs)[source]
+

ReleaseUDPN - 释放 UDPN

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDPNId (str) - (Required) UDPN 资源 Id
  • +
+

Response

+
+ +
+ +
+
+

UDisk

+
+
+class ucloud.services.udisk.client.UDiskClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+attach_udisk(req=None, **kwargs)[source]
+

AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 需要挂载的UDisk实例ID.
  • +
  • UHostId (str) - (Required) UHost实例ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • MultiAttach (str) - 是否允许多点挂载(Yes: 允许多点挂载, No: 不允许多点挂载, 不填默认Yes )
  • +
+

Response

+
    +
  • UDiskId (str) - 挂载的UDisk实例ID
  • +
  • UHostId (str) - 挂载的UHost实例ID
  • +
+
+ +
+
+clone_udisk(req=None, **kwargs)[source]
+

CloneUDisk - 从UDisk创建UDisk克隆

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称
  • +
  • SourceId (str) - (Required) 克隆父Disk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic,Postpay 默认: Dynamic
  • +
  • Comment (str) - Disk注释
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • UDataArkMode (str) - 方舟是否开启,”Yes”:开启,”No”:关闭;默认为”No”
  • +
+

Response

+
    +
  • UDiskId (list) - 创建UDisk Id
  • +
+
+ +
+
+clone_udisk_snapshot(req=None, **kwargs)[source]
+

CloneUDiskSnapshot - 从快照创建UDisk克隆

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。
  • +
  • SourceId (str) - (Required) 克隆父Snapshot的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic,Postpay 默认: Dynamic
  • +
  • Comment (str) - Disk注释
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • UDataArkMode (str) - 是否开启数据方舟 默认:No
  • +
+

Response

+
    +
  • UDiskId (list) - 创建UDisk Id
  • +
+
+ +
+
+create_udisk(req=None, **kwargs)[source]
+

CreateUDisk - 创建UDisk磁盘

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 实例名称
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,普通盘: 范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限;SSD盘: 范围[1~4000]。
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic, Postpay, Trial 默认: Dynamic
  • +
  • CmkId (str) - 加密需要的cmk id,UKmsMode为Yes时,必填
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • DiskType (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk)
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • Tag (str) - 业务组 默认:Default
  • +
  • UDataArkMode (str) - 是否开启数据方舟
  • +
  • UKmsMode (str) - 是否加密。Yes:加密,No:不加密,默认值(No)
  • +
+

Response

+
    +
  • UDiskId (list) - UDisk实例Id
  • +
+
+ +
+
+create_udisk_snapshot(req=None, **kwargs)[source]
+

CreateUDiskSnapshot - 创建snapshot快照

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 快照名称
  • +
  • UDiskId (str) - (Required) 快照的UDisk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year , Month, Dynamic 默认: Dynamic
  • +
  • Comment (str) - 快照描述
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
+

Response

+
    +
  • SnapshotId (list) - 快照Id
  • +
+
+ +
+
+delete_udisk(req=None, **kwargs)[source]
+

DeleteUDisk - 删除UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 要删除的UDisk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+delete_udisk_snapshot(req=None, **kwargs)[source]
+

DeleteUDiskSnapshot - 删除Snapshot

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • SnapshotId (str) - 快照Id(填写后不能填写UDisk Id)
  • +
  • UDiskId (str) - UDisk Id,删除该盘所创建出来的所有快照(填写后不能填写SnapshotId)
  • +
+

Response

+
+ +
+
+describe_udisk(req=None, **kwargs)[source]
+

DescribeUDisk - 获取UDisk实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DiskType (str) - ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:”CLOUD_NORMAL”,IsBoot:”False”; 普通系统盘:DiskType:”CLOUD_NORMAL”,IsBoot:”True”;SSD数据盘:DiskType:”CLOUD_SSD”,IsBoot:”False”;SSD系统盘:DiskType:”CLOUD_SSD”,IsBoot:”True”;RSSD数据盘:DiskType:”CLOUD_RSSD”,IsBoot:”False”;为空拉取所有。ProtocolVersion字段为0或没有该字段时,可设为以下几个值:普通数据盘:DataDisk;普通系统盘;SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk;为空拉取所有。
  • +
  • IsBoot (str) - ProtocolVersion字段为1且DiskType不为空时,必须设置,设置规则请参照DiskType;ProtocolVersion字段为1且DiskType为空时,该字段无效。ProtocolVersion字段为0或没有该字段时,该字段无效。
  • +
  • Limit (int) - 返回数据长度, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • ProtocolVersion (int) - 请求协议版本,建议升级为1,为1时DiskType与UHost磁盘类型定义一致;默认为0
  • +
  • UDiskId (str) - UDisk Id(留空返回全部)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDiskDataSet 模型定义
  • +
  • TotalCount (int) - 根据过滤条件得到的总数
  • +
+

Response Model

+

UDiskDataSet

+
    +
  • ArkSwitchEnable (int) - 是否支持开启方舟,1支持 ,0不支持
  • +
  • ChargeType (str) - Year,Month,Dynamic,Trial,Postpay
  • +
  • CloneEnable (int) - 是否支持克隆,1支持 ,0不支持
  • +
  • CmkId (str) - 该盘的cmk id
  • +
  • CmkIdAlias (str) - cmk id 别名
  • +
  • CmkIdStatus (str) - 该盘cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘)
  • +
  • CreateTime (int) - 创建时间
  • +
  • DataKey (str) - 该盘的密文密钥
  • +
  • DeviceName (str) - 挂载的设备名称
  • +
  • DiskType (str) - 请求中的ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:”CLOUD_NORMAL”,IsBoot:”False”; 普通系统盘:DiskType:”CLOUD_NORMAL”,IsBoot:”True”;SSD数据盘:DiskType:”CLOUD_SSD”,IsBoot:”False”;SSD系统盘:DiskType:”CLOUD_SSD”,IsBoot:”True”;RSSD数据盘:DiskType:”CLOUD_RSSD”,IsBoot:”False”。请求中的ProtocolVersion字段为0或没有该字段时,云硬盘类型参照如下:普通数据盘:DataDisk;普通系统盘:SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk。
  • +
  • ExpiredTime (int) - 过期时间
  • +
  • IsBoot (str) - 是否是系统盘,是:”True”, 否:”False”
  • +
  • IsExpire (str) - 资源是否过期,过期:”Yes”, 未过期:”No”
  • +
  • Name (str) - 实例名称
  • +
  • Size (int) - 容量单位GB
  • +
  • SnapEnable (int) - 是否支持快照,1支持 ,0不支持
  • +
  • SnapshotCount (int) - 该盘快照个数
  • +
  • SnapshotLimit (int) - 该盘快照上限
  • +
  • Status (str) - 状态:Available(可用),Attaching(挂载中), InUse(已挂载), Detaching(卸载中), Initializating(分配中), Failed(创建失败),Cloning(克隆中),Restoring(恢复中),RestoreFailed(恢复失败),
  • +
  • Tag (str) - 业务组名称
  • +
  • UDataArkMode (str) - 是否开启数据方舟,开启:”Yes”, 不支持:”No”
  • +
  • UDiskId (str) - UDisk实例Id
  • +
  • UHostIP (str) - 挂载的UHost的IP
  • +
  • UHostId (str) - 挂载的UHost的Id
  • +
  • UHostName (str) - 挂载的UHost的Name
  • +
  • UKmsMode (str) - 是否是加密盘,是:”Yes”, 否:”No”
  • +
  • Version (str) - 是否支持数据方舟,支持:”2.0”, 不支持:”1.0”
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_udisk_price(req=None, **kwargs)[source]
+

DescribeUDiskPrice - 获取UDisk实例价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,范围[1~1000]
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial,默认: Dynamic
  • +
  • DiskType (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),SystemDisk(普通系统盘),SSDSystemDisk(SSD系统盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk)
  • +
  • Quantity (int) - 购买UDisk的时长,默认值为1
  • +
  • UDataArkMode (str) - 是否打开数据方舟, 打开”Yes”,关闭”No”, 默认关闭
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDiskPriceDataSet 模型定义
  • +
+

Response Model

+

UDiskPriceDataSet

+
    +
  • ChargeName (str) - “UDataArk”,”UDisk”
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • OriginalPrice (int) - 用户折后价
  • +
  • Price (int) - 价格 (单位: 分)
  • +
+
+ +
+
+describe_udisk_snapshot(req=None, **kwargs)[source]
+

DescribeUDiskSnapshot - 获取UDisk快照

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • SnapshotId (str) - 快照id,SnapshotId , UDiskId 同时传SnapshotId优先
  • +
  • UDiskId (str) - UDiskId,返回该盘所做快照.(必须同时传Zone)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UDiskSnapshotSet 模型定义
  • +
  • TotalCount (int) - 根据过滤条件得到的总数
  • +
+

Response Model

+

UDiskSnapshotSet

+
    +
  • CmkId (str) - 该快照的cmk id
  • +
  • CmkIdAlias (str) - cmk id 别名
  • +
  • CmkIdStatus (str) - 该快照cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘)
  • +
  • Comment (str) - 快照描述
  • +
  • CreateTime (int) - 创建时间
  • +
  • DataKey (str) - 该快照的密文密钥
  • +
  • DiskType (int) - 磁盘类型,0:数据盘,1:系统盘
  • +
  • ExpiredTime (int) - 过期时间
  • +
  • IsUDiskAvailable (bool) - 对应磁盘是否处于可用状态
  • +
  • Name (str) - 快照名称
  • +
  • Size (int) - 容量单位GB
  • +
  • SnapshotId (str) - 快照Id
  • +
  • Status (str) - 快照状态,Normal:正常,Failed:失败,Creating:制作中
  • +
  • UDiskId (str) - 快照的源UDisk的Id
  • +
  • UDiskName (str) - 快照的源UDisk的Name
  • +
  • UHostId (str) - 对应磁盘制作快照时所挂载的主机
  • +
  • UKmsMode (str) - 是否是加密盘快照,是:”Yes”, 否:”No”
  • +
  • Version (str) - 快照版本
  • +
+
+ +
+
+describe_udisk_upgrade_price(req=None, **kwargs)[source]
+

DescribeUDiskUpgradePrice - 获取UDisk升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。
  • +
  • SourceId (str) - (Required) 升级目标UDisk ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • DiskType (str) - 磁盘类型,SSDDataDisk:ssd数据盘,DataDisk:普通数据盘,SystemDisk:普通系统盘,SSDSystemDisk:ssd系统盘。默认为DataDisk
  • +
  • UDataArkMode (str) - 是否打开数据方舟, 打开”Yes”,关闭”No”, 默认关闭
  • +
+

Response

+
    +
  • OriginalPrice (int) - 用户折后价
  • +
  • Price (int) - 价格
  • +
+
+ +
+
+detach_udisk(req=None, **kwargs)[source]
+

DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 需要卸载的UDisk实例ID
  • +
  • UHostId (str) - (Required) UHost实例ID
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UDiskId (str) - 卸载的UDisk实例ID
  • +
  • UHostId (str) - 卸载的UHost实例ID
  • +
+
+ +
+
+rename_udisk(req=None, **kwargs)[source]
+

RenameUDisk - 重命名UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 重命名的UDisk的Id
  • +
  • UDiskName (str) - (Required) 重命名UDisk的name
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_udisk(req=None, **kwargs)[source]
+

ResizeUDisk - 调整UDisk容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 调整后大小, 单位:GB, 范围[1~2000],权限位控制可达8000,若需要请申请开通相关权限。
  • +
  • UDiskId (str) - (Required) UDisk Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • CouponId (str) - 使用的代金券id
  • +
+

Response

+
+ +
+
+restore_udisk(req=None, **kwargs)[source]
+

RestoreUDisk - 从备份恢复数据至UDisk

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDiskId (str) - (Required) 需要恢复的盘id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • SnapshotId (str) - 从指定的快照恢复
  • +
  • SnapshotTime (int) - 指定从方舟恢复的备份时间点
  • +
+

Response

+
+ +
+
+set_udisk__udataark_mode(req=None, **kwargs)[source]
+

SetUDiskUDataArkMode - 设置UDisk数据方舟的状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UDataArkMode (str) - (Required) 是否开启数据方舟,开启:”Yes”, 不支持:”No”
  • +
  • UDiskId (str) - (Required) 需要设置数据方舟的UDisk的Id
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+ +
+
+

UHost

+
+
+class ucloud.services.uhost.client.UHostClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+copy_custom_image(req=None, **kwargs)[source]
+

CopyCustomImage - 复制自制镜像

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SourceImageId (str) - (Required) 源镜像Id, 参见 DescribeImage
  • +
  • TargetProjectId (str) - (Required) 目标项目Id, 参见 GetProjectList
  • +
  • TargetImageDescription (str) - 目标镜像描述
  • +
  • TargetImageName (str) - 目标镜像名称
  • +
  • TargetRegion (str) - 目标地域,不跨地域不用填
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • TargetImageId (str) - 目标镜像Id
  • +
+
+ +
+
+create_custom_image(req=None, **kwargs)[source]
+

CreateCustomImage - 从指定UHost实例,生成自定义镜像。

+

Request

+ +

Response

+
    +
  • ImageId (str) - 镜像Id
  • +
+
+ +
+
+create_uhost_instance(req=None, **kwargs)[source]
+

CreateUHostInstance - 创建UHost实例。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ImageId (str) - (Required) 镜像ID。 请通过 DescribeImage 获取
  • +
  • LoginMode (str) - (Required) 主机登陆模式。密码(默认选项): Password。
  • +
  • Password (str) - (Required) UHost密码。请遵照 字段规范 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • AlarmTemplateId (int) - 告警模板id,如果传了告警模板id,且告警模板id正确,则绑定告警模板。绑定告警模板失败只会在后台有日志,不会影响创建主机流程,也不会在前端报错。
  • +
  • BootDiskSpace (int) - 【待废弃,不建议调用】系统盘大小。 单位:GB, 范围[20,100], 步长:10
  • +
  • CPU (int) - 虚拟CPU核数。可选参数:1-64(具体机型与CPU的对应关系参照控制台)。默认值: 4。
  • +
  • ChargeType (str) - 计费模式。枚举值为: > Year,按年付费; > Month,按月付费;> Dynamic,按小时预付费 > Postpay,按小时后付费(支持关机不收费,目前仅部分可用区支持,请联系您的客户经理) 默认为月付
  • +
  • CouponId (str) - 主机代金券ID。请通过DescribeCoupon接口查询,或登录用户中心查看
  • +
  • DiskPassword (str) - 【待废弃,不建议调用】加密盘的密码。若输入此字段,自动选择加密盘。加密盘需要权限位。
  • +
  • DiskSpace (int) - 【待废弃,不建议调用】数据盘大小。 单位:GB, 范围[0,8000], 步长:10, 默认值:20,云盘支持0-8000;本地普通盘支持0-2000;本地SSD盘(包括所有GPU机型)支持100-1000
  • +
  • Disks (list) - 见 CreateUHostInstanceParamDisks 模型定义
  • +
  • GPU (int) - GPU卡核心数。仅GPU机型支持此字段(可选范围与MachineType+GpuType相关)
  • +
  • GpuType (str) - GPU类型,枚举值[“K80”, “P40”, “V100”],MachineType为G时必填
  • +
  • HostIp (str) - 指定宿主机创建,此时SetId为必填
  • +
  • HostType (str) - 【已废弃】宿主机类型,N2,N1
  • +
  • HotplugFeature (bool) - 热升级特性。True为开启,False为未开启,默认False。
  • +
  • InstallAgent (str) - 【暂不支持】是否安装UGA。’yes’: 安装;其他或者不填:不安装。
  • +
  • IsolationGroup (str) - 硬件隔离组id。可通过DescribeIsolationGroup获取。
  • +
  • KeyPair (str) - 【暂不支持】Keypair公钥,LoginMode为KeyPair时此项必须
  • +
  • MachineType (str) - 云主机机型(V2.0),在本字段和字段UHostType中,仅需要其中1个字段即可;当填写了MachineType时,必须填写MinimalCpuPlatform字段。枚举值[“N”, “C”, “G”, “O”]。参考 云主机机型说明
  • +
  • MaxCount (int) - 本次最大创建主机数量,取值范围是[1,100],默认值为1。
  • +
  • Memory (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值:8192
  • +
  • MinimalCpuPlatform (str) - 最低cpu平台,枚举值[“Intel/Auto”, “Intel/IvyBridge”, “Intel/Haswell”, “Intel/Broadwell”, “Intel/Skylake”, “Intel/Cascadelake”。
  • +
  • Name (str) - UHost实例名称。默认:UHost。请遵照 字段规范 设定实例名称。
  • +
  • NetCapability (str) - 网络增强特性。枚举值:Normal(默认),不开启; Super,开启网络增强1.0; Ultra,开启网络增强2.0(仅支持部分可用区,请参考控制台)
  • +
  • NetworkId (str) - 【已废弃】网络ID(VPC2.0情况下无需填写)。VPC1.0情况下,若不填写,代表优先选择基础网络; 若填写,代表选择子网。参见DescribeSubnet。
  • +
  • NetworkInterface (list) - 见 CreateUHostInstanceParamNetworkInterface 模型定义
  • +
  • PrivateIp (list) - 【数组】创建云主机时指定内网IP。若不传值,则随机分配当前子网下的IP。调用方式举例:PrivateIp.0=x.x.x.x。当前只支持一个内网IP。
  • +
  • PrivateMac (str) - 【批量创建该参数无效】【内部字段】创建云主机时指定Mac。调用方式举例:PrivateMac=”xx:xx:xx:xx:xx:xx”。
  • +
  • Quantity (int) - 购买时长。默认:值 1。按小时购买(Dynamic/Postpay)时无需此参数。 月付时,此参数传0,代表购买至月末。
  • +
  • ResourceType (int) - 【内部参数】资源类型
  • +
  • SecurityGroupId (str) - 防火墙ID,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 DescribeFirewall
  • +
  • SetId (int) - 指定set创建
  • +
  • StorageType (str) - 【待废弃,不建议调用】磁盘类型,同时设定系统盘和数据盘的磁盘类型。枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘;默认为LocalDisk。仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。
  • +
  • SubnetId (str) - 子网 ID。默认为当前地域的默认子网。
  • +
  • Tag (str) - 业务组。默认:Default(Default即为未分组)。请遵照 字段规范 设定业务组。
  • +
  • TimemachineFeature (str) - 【待废弃,不建议调用】是否开启方舟特性。Yes为开启方舟,No为关闭方舟。目前仅选择普通本地盘+普通本地盘 或 SSD云盘+普通云盘的组合支持开启方舟。
  • +
  • UHostType (str) - 【建议后续不再使用】云主机机型(V1.0),在本字段和字段MachineType中,仅需要其中1个字段即可。参考 云主机机型说明
  • +
  • UserData (str) - 【即将支持】用户自定义数据。当镜像支持Cloud-init Feature时可填写此字段。注意:1、总数据量大小不超多16K;2、使用base64编码
  • +
  • UserDataScript (str) - 【暂不支持】cloudinit方式下,用户初始化脚本
  • +
  • VPCId (str) - VPC ID。默认为当前地域的默认VPC。
  • +
+

Response

+
    +
  • IPs (list) - 【批量创建不会返回】IP信息
  • +
  • UHostIds (list) - UHost实例Id集合
  • +
+

Request Model

+

CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH

+
    +
  • Area (str) - 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填其中之一。
  • +
  • AreaCode (str) - GlobalSSH的地区编码,格式为区域航空港国际通用代码。Area和AreaCode两者必填其中之一。
  • +
  • Port (int) - SSH端口,1-65535且不能使用80,443端口
  • +
+

CreateUHostInstanceParamNetworkInterfaceEIP

+
    +
  • Bandwidth (int) - 【若绑定EIP,此参数必填】弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-300],带宽计费[1-800]
  • +
  • CouponId (str) - 当前EIP代金券id。请通过DescribeCoupon接口查询,或登录用户中心查看。
  • +
  • GlobalSSH (dict) - 见 CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH 模型定义
  • +
  • OperatorName (str) - 【若绑定EIP,此参数必填】弹性IP的线路。枚举值: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International
  • +
  • PayMode (str) - 弹性IP的计费模式. 枚举值: “Traffic”, 流量计费; “Bandwidth”, 带宽计费; “ShareBandwidth”,共享带宽模式. “Free”:免费带宽模式.默认为 “Bandwidth”.
  • +
  • ShareBandwidthId (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效
  • +
+

CreateUHostInstanceParamNetworkInterfaceIPv6

+
    +
  • Adress (str) - 第N个网卡对应的IPv6地址,默认不分配IPv6,“Auto”自动分配,不为空的其他字符串为实际要分配的IPv6地址
  • +
  • ShareBandwidthId (str) - 第N块网卡中IPv6对应的共享带宽id,默认不带外网
  • +
+

CreateUHostInstanceParamDisks

+
    +
  • BackupType (str) - 磁盘备份方案。枚举值:> NONE,无备份 > DATAARK,数据方舟 当前磁盘支持的备份模式参考 磁盘类型
  • +
  • CouponId (str) - 云盘代金券id。不适用于系统盘/本地盘。请通过DescribeCoupon接口查询,或登录用户中心查看
  • +
  • Encrypted (bool) - 【功能仅部分可用区开放,详询技术支持】磁盘是否加密。加密:true, 不加密: false加密必须传入对应的的KmsKeyId
  • +
  • IsBoot (str) - 是否是系统盘。枚举值:> True,是系统盘 > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。
  • +
  • KmsKeyId (str) - 【功能仅部分可用区开放,详询技术支持】kms key id。选择加密盘时必填。
  • +
  • Size (int) - 磁盘大小,单位GB,必须是10GB的整数倍。请参考 磁盘类型
  • +
  • Type (str) - 磁盘类型。请参考 磁盘类型
  • +
+

CreateUHostInstanceParamNetworkInterface

+
    +
  • EIP (dict) - 见 CreateUHostInstanceParamNetworkInterfaceEIP 模型定义
  • +
  • IPv6 (dict) - 见 CreateUHostInstanceParamNetworkInterfaceIPv6 模型定义
  • +
+
+ +
+
+describe_image(req=None, **kwargs)[source]
+

DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ImageId (str) - 镜像Id
  • +
  • ImageType (str) - 镜像类型。标准镜像:Base,镜像市场:Business, 自定义镜像:Custom,默认返回所有类型
  • +
  • Limit (int) - 返回数据长度,默认为20
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • OsType (str) - 操作系统类型:Linux, Windows 默认返回所有类型
  • +
  • PriceSet (int) - 是否返回价格:1返回,0不返回;默认不返回
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • ImageSet (list) - 见 UHostImageSet 模型定义
  • +
  • TotalCount (int) - 满足条件的镜像总数
  • +
+

Response Model

+

UHostImageSet

+
    +
  • CreateTime (int) - 创建时间,格式为Unix时间戳
  • +
  • Features (list) - 特殊状态标识, 目前包含NetEnhnced(网络增强1.0), NetEnhanced_Ultra](网络增强2.0),HotPlug(热升级),CloudInit
  • +
  • FuncType (str) - 行业镜像类型(仅行业镜像将返回这个值)
  • +
  • ImageDescription (str) - 镜像描述
  • +
  • ImageId (str) - 镜像ID
  • +
  • ImageName (str) - 镜像名称
  • +
  • ImageSize (int) - 镜像大小
  • +
  • ImageType (str) - 镜像类型 标准镜像:Base, 行业镜像:Business,自定义镜像:Custom
  • +
  • IntegratedSoftware (str) - 集成软件名称(仅行业镜像将返回这个值)
  • +
  • Links (str) - 介绍链接(仅行业镜像将返回这个值)
  • +
  • MinimalCPU (str) - 默认值为空’’’。当CentOS 7.3/7.4/7.5等镜像会标记为“Broadwell”
  • +
  • OsName (str) - 操作系统名称
  • +
  • OsType (str) - 操作系统类型:Liunx,Windows
  • +
  • State (str) - 镜像状态, 可用:Available,制作中:Making, 不可用:Unavailable
  • +
  • Vendor (str) - 供应商(仅行业镜像将返回这个值)
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_isolation_group(req=None, **kwargs)[source]
+

DescribeIsolationGroup - 查询硬件隔离组列表。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目id
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 待查的硬件隔离组id
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
+

Response

+
    +
  • IsolationGroupSet (list) - 见 IsolationGroup 模型定义
  • +
+

Response Model

+

SpreadInfo

+
    +
  • UHostCount (int) - 可用区中硬件隔离组中云主机的数量,不超过7。
  • +
  • Zone (str) - 可用区信息
  • +
+

IsolationGroup

+
    +
  • GroupId (str) - 硬件隔离组id
  • +
  • GroupName (str) - 硬件隔离组名称
  • +
  • Remark (str) - 备注
  • +
  • SpreadInfoSet (list) - 见 SpreadInfo 模型定义
  • +
+
+ +
+
+describe_uhost_instance(req=None, **kwargs)[source]
+

DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • IsolationGroup (str) - 硬件隔离组id。通过硬件隔离组筛选主机。
  • +
  • LifeCycle (int) - 1:普通云主机;2:抢占型云主机;如不传此参数,默认全部获取
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • SubnetId (str) - 子网id。通过子网筛选主机。北京一地域无效。
  • +
  • Tag (str) - 要查询的业务组名称
  • +
  • UHostIds (list) - 【数组】UHost主机的资源ID,例如UHostIds.0代表希望获取信息 的主机1,UHostIds.1代表主机2。 如果不传入,则返回当前Region 所有符合条件的UHost实例。
  • +
  • VPCId (str) - vpc id。通过VPC筛选主机。北京一地域无效。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Action (str) - 操作名称
  • +
  • RetCode (int) - 返回码
  • +
  • TotalCount (int) - UHostInstance总数
  • +
  • UHostSet (list) - 见 UHostInstanceSet 模型定义
  • +
+

Response Model

+

UHostDiskSet

+
    +
  • BackupType (str) - 备份方案。若开通了数据方舟,则为DataArk
  • +
  • DiskId (str) - 磁盘ID
  • +
  • DiskType (str) - 磁盘类型。请参考 磁盘类型
  • +
  • Drive (str) - 磁盘盘符
  • +
  • Encrypted (bool) - true: 加密盘 false:非加密盘
  • +
  • IsBoot (str) - 是否是系统盘。枚举值:> True,是系统盘 > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。
  • +
  • Name (str) - UDisk名字(仅当磁盘是UDisk时返回)
  • +
  • Size (int) - 磁盘大小,单位: GB
  • +
  • Type (str) - 【建议不再使用】磁盘类型。系统盘: Boot,数据盘: Data,网络盘:Udisk
  • +
+

UHostIPSet

+
    +
  • Bandwidth (int) - IP对应的带宽, 单位: Mb (内网IP不显示带宽信息)
  • +
  • Default (str) - 【暂未支持】是否为默认网卡。True: 是默认网卡;其他值:不是。
  • +
  • IP (str) - IP地址
  • +
  • IPId (str) - 外网IP资源ID 。(内网IP无对应的资源ID)
  • +
  • Mac (str) - 当前网卡的Mac。
  • +
  • SubnetId (str) - IP地址对应的子网 ID。(北京一不支持,字段返回为空)
  • +
  • Type (str) - 国际: Internation,BGP: Bgp,内网: Private
  • +
  • VPCId (str) - IP地址对应的VPC ID。(北京一不支持,字段返回为空)
  • +
  • Weight (int) - 当前EIP的权重。权重最大的为当前的出口IP。
  • +
+

UHostInstanceSet

+
    +
  • AutoRenew (str) - 是否自动续费,自动续费:“Yes”,不自动续费:“No”
  • +
  • BasicImageId (str) - 基础镜像ID(指当前自定义镜像的来源镜像)
  • +
  • BasicImageName (str) - 基础镜像名称(指当前自定义镜像的来源镜像)
  • +
  • BootDiskState (str) - 系统盘状态 Normal表示初始化完成;Initializing表示在初始化。仍在初始化的系统盘无法制作镜像。
  • +
  • CPU (int) - 虚拟CPU核数,单位: 个
  • +
  • ChargeType (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限);
  • +
  • CreateTime (int) - 创建时间,格式为Unix时间戳
  • +
  • DiskSet (list) - 见 UHostDiskSet 模型定义
  • +
  • ExpireTime (int) - 到期时间,格式为Unix时间戳
  • +
  • GPU (int) - GPU个数
  • +
  • HostType (str) - 【建议不再使用】主机系列:N2,表示系列2;N1,表示系列1
  • +
  • HotplugFeature (bool) - true: 开启热升级; false,未开启热升级
  • +
  • IPSet (list) - 见 UHostIPSet 模型定义
  • +
  • ImageId (str) - 【建议不再使用】主机的系统盘ID。
  • +
  • IsolationGroup (str) - 隔离组id,不在隔离组则返回””
  • +
  • LifeCycle (str) - 主机的生命周期类型。目前仅支持Normal:普通;
  • +
  • MachineType (str) - 云主机机型(新)。参考 云主机机型说明
  • +
  • Memory (int) - 内存大小,单位: MB
  • +
  • Name (str) - UHost实例名称
  • +
  • NetCapability (str) - 网络增强。Normal: 无;Super: 网络增强1.0; Ultra: 网络增强2.0
  • +
  • NetworkState (str) - 【建议不再使用】网络状态。 连接:Connected, 断开:NotConnected
  • +
  • OsName (str) - 创建主机的最初来源镜像的操作系统名称(若直接通过基础镜像创建,此处返回和BasicImageName一致)
  • +
  • OsType (str) - 操作系统类别。返回”Linux”或者”Windows”
  • +
  • Remark (str) - 备注
  • +
  • State (str) - 实例状态,枚举值:>初始化: Initializing; >启动中: Starting; > 运行中: Running; > 关机中: Stopping; >关机: Stopped >安装失败: Install Fail; >重启中: Rebooting
  • +
  • StorageType (str) - 【建议不再使用】主机磁盘类型。 枚举值为:> LocalDisk,本地磁盘; > UDisk 云盘。只要有一块磁盘为本地盘,即返回LocalDisk。
  • +
  • SubnetType (str) - 【建议不再使用】仅北京A的云主机会返回此字段。基础网络模式:Default;子网模式:Private
  • +
  • Tag (str) - 业务组名称
  • +
  • TimemachineFeature (str) - 【建议不再使用】数据方舟模式。枚举值:> Yes: 开启方舟; > no,未开启方舟
  • +
  • TotalDiskSpace (int) - 总的数据盘存储空间。
  • +
  • UHostId (str) - UHost实例ID
  • +
  • UHostType (str) - 【建议不再使用】云主机机型(旧)。参考 云主机机型说明
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+
+ +
+
+describe_uhost_instance_snapshot(req=None, **kwargs)[source]
+

DescribeUHostInstanceSnapshot - 获取已经存在的UHost实例的存储快照列表。

+

Request

+ +

Response

+
    +
  • SnapshotSet (list) - 见 UHostSnapshotSet 模型定义
  • +
  • UhostId (str) - UHost实例ID
  • +
+

Response Model

+

UHostSnapshotSet

+
    +
  • SnapshotName (str) - 快照名称
  • +
  • SnapshotState (str) - 快照状态, 制作中:Capturing 制作成功:Success 制作失败:Fail
  • +
  • SnapshotTime (str) - 快照制作时间
  • +
+
+ +
+
+describe_uhost_tags(req=None, **kwargs)[source]
+

DescribeUHostTags - 获取指定数据中心的业务组列表。

+

Request

+ +

Response

+
    +
  • TagSet (list) - 见 UHostTagSet 模型定义
  • +
  • TotalCount (int) - 已有主机的业务组总个数
  • +
+

Response Model

+

UHostTagSet

+
    +
  • Tag (str) - 业务组名称
  • +
  • TotalCount (int) - 该业务组中包含的主机个数
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+get_uhost_instance_price(req=None, **kwargs)[source]
+

GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • CPU (int) - (Required) CPU核数。可选参数:1-64。可选范围参照控制台。默认值: 4
  • +
  • Count (int) - (Required) 购买台数,范围[1,5]
  • +
  • ImageId (str) - (Required) 镜像Id,可通过 DescribeImage 获取镜像ID
  • +
  • Memory (int) - (Required) 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参照好控制台)。默认值:8192
  • +
  • ChargeType (str) - 计费模式。枚举值为: > Year,按年付费; > Month,按月付费;> Dynamic,按小时付费 默认为月付。
  • +
  • DiskSpace (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10,默认值: 0
  • +
  • Disks (list) - 见 GetUHostInstancePriceParamDisks 模型定义
  • +
  • GPU (int) - GPU卡核心数。仅GPU机型支持此字段。
  • +
  • GpuType (str) - GPU类型,枚举值[“K80”, “P40”, “V100”]
  • +
  • LifeCycle (int) - 【未支持】1:普通云主机;2:抢占性云主机;默认普通
  • +
  • MachineType (str) - 云主机机型(V2版本概念)。枚举值[“N”, “C”, “G”, “O”]。参考 云主机机型说明
  • +
  • NetCapability (str) - 网络增强。枚举值:Normal,不开启; Super,开启网络增强1.0。 默认值为Normal。
  • +
  • Quantity (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末。
  • +
  • StorageType (str) - 【待废弃】磁盘类型,同时设定系统盘和数据盘, 枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘; 默认为LocalDisk 仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。
  • +
  • TimemachineFeature (str) - 【待废弃】方舟机型。No,Yes。默认是No。
  • +
  • UHostType (str) - 【待废弃】云主机机型(V1版本概念)。参考 云主机机型说明
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PriceSet (list) - 见 UHostPriceSet 模型定义
  • +
+

Request Model

+

GetUHostInstancePriceParamDisks

+
    +
  • BackupType (str) - 磁盘备份方案。枚举值:> NONE,无备份 > DATAARK,数据方舟 当前磁盘支持的备份模式参考 磁盘类型
  • +
  • IsBoot (str) - 是否是系统盘。枚举值:> True,是系统盘 > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。
  • +
  • Size (int) - 磁盘大小,单位GB。请参考 磁盘类型
  • +
  • Type (str) - 磁盘类型。请参考 磁盘类型
  • +
+

Response Model

+

UHostPriceSet

+
    +
  • ChargeType (str) - 计费类型。Year,Month,Dynamic
  • +
  • Price (float) - 价格,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+get_uhost_instance_vnc_info(req=None, **kwargs)[source]
+

GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
  • VncIP (str) - Vnc登录IP
  • +
  • VncPassword (str) - Vnc 登录密码
  • +
  • VncPort (int) - Vnc登录端口
  • +
+
+ +
+
+get_uhost_upgrade_price(req=None, **kwargs)[source]
+

GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考 云主机机型说明

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost实例ID。 参见 DescribeUHostInstance
  • +
  • BootDiskSpace (int) - 【待废弃】系统大小,单位: GB,范围[20,100],步长: 10。
  • +
  • CPU (int) - 虚拟CPU核数。可选参数:1-64(可选范围参考控制台)。默认值为当前实例的CPU核数。
  • +
  • DiskSpace (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10, 默认值是该主机当前数据盘大小。
  • +
  • HostType (str) - 【待废弃】主机系列,目前支持N1,N2
  • +
  • Memory (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值为当前实例的内存大小。
  • +
  • NetCapValue (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变)
  • +
  • TimemachineFeature (str) - 方舟机型。No,Yes。默认是No。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Price (float) - 规格调整差价。精确到小数点后2位。
  • +
+
+ +
+
+import_custom_image(req=None, **kwargs)[source]
+

ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Auth (bool) - (Required) 是否授权。必须填true
  • +
  • Format (str) - (Required) 镜像格式,可选RAW、VHD、VMDK、qcow2
  • +
  • ImageName (str) - (Required) 镜像名称
  • +
  • OsName (str) - (Required) 操作系统详细版本,请参考控制台的镜像版本;OsType为Other时,输入参数为Other
  • +
  • OsType (str) - (Required) 操作系统平台,比如CentOS、Ubuntu、Windows、RedHat等,请参考控制台的镜像版本;若导入控制台上没有的操作系统,参数为Other
  • +
  • UFileUrl (str) - (Required) UFile私有空间地址
  • +
  • ImageDescription (str) - 镜像描述
  • +
+

Response

+
    +
  • ImageId (str) - 镜像Id
  • +
+
+ +
+
+modify_uhost_instance_name(req=None, **kwargs)[source]
+

ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+modify_uhost_instance_remark(req=None, **kwargs)[source]
+

ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+modify_uhost_instance_tag(req=None, **kwargs)[source]
+

ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+poweroff_uhost_instance(req=None, **kwargs)[source]
+

PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+reboot_uhost_instance(req=None, **kwargs)[source]
+

RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+reinstall_uhost_instance(req=None, **kwargs)[source]
+

ReinstallUHostInstance - 重新安装指定UHost实例的操作系统

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost实例资源ID 参见 DescribeUHostInstance
  • +
  • DNSServers (list) - 针对非私有子网主机,可自定义DNS。n可为0-2
  • +
  • ImageId (str) - 镜像Id,默认使用原镜像 参见 DescribeImage
  • +
  • Password (str) - 如果创建UHost实例时LoginMode为Password,则必须填写,如果LoginMode为KeyPair,不需要填写 (密码格式使用BASE64编码;LoginMode不可变更)
  • +
  • ReserveDisk (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes
  • +
  • ResourceType (int) - 云灾备指明191
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UhostId (str) - UHost实例资源ID
  • +
+
+ +
+
+reset_uhost_instance_password(req=None, **kwargs)[source]
+

ResetUHostInstancePassword - 重置UHost实例的管理员密码。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Password (str) - (Required) UHost新密码(密码格式使用BASE64编码)
  • +
  • UHostId (str) - (Required) UHost实例ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+resize_attached_disk(req=None, **kwargs)[source]
+

ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • DiskId (str) - (Required) 磁盘ID。参见 DescribeUHostInstance 返回值中的DiskSet。
  • +
  • DiskSpace (int) - (Required) 磁盘大小,单位GB,步长为10。取值范围需大于当前磁盘大小,最大值请参考 磁盘类型
  • +
  • UHostId (str) - (Required) UHost实例ID。 参见 DescribeUHostInstance
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DiskId (str) - 改配成功的磁盘id
  • +
+
+ +
+
+resize_uhost_instance(req=None, **kwargs)[source]
+

ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,磁盘空间大小,网络增强等。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost实例ID 参见 DescribeUHostInstance
  • +
  • BootDiskSpace (int) - 系统盘大小,单位:GB,范围[20,100],步长:10,系统盘不支持缩容,因此不允许输入比当前实例系统盘小的值
  • +
  • CPU (int) - 虚拟CPU核数,单位:个,范围:[1,16],最小值为1,其他值是2的倍数,默认值为当前实例的CPU核数(*windows CPU>=2)
  • +
  • DiskSpace (int) - 数据盘大小,单位:GB,范围[10,1000]; SSD机型,单位:GB,范围[100,500];步长:10,默认值为当前实例的数据盘大小,数据盘不支持缩容,因此不允许输入比当前实例数据盘大小的值
  • +
  • Memory (int) - 内存大小,单位:MB,范围[2048,65536],步长:2048,默认值为当前实例的内存大小(BGP-C数据中心最小支持1024,限Linux系统)
  • +
  • NetCapValue (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+start_uhost_instance(req=None, **kwargs)[source]
+

StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+stop_uhost_instance(req=None, **kwargs)[source]
+

StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。

+

Request

+ +

Response

+
    +
  • UhostId (str) - UHost实例ID
  • +
+
+ +
+
+terminate_custom_image(req=None, **kwargs)[source]
+

TerminateCustomImage - 删除用户自定义镜像

+

Request

+ +

Response

+
    +
  • ImageId (str) - 自制镜像Id
  • +
+
+ +
+
+terminate_uhost_instance(req=None, **kwargs)[source]
+

TerminateUHostInstance - 删除指定数据中心的UHost实例。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostId (str) - (Required) UHost资源Id 参见 DescribeUHostInstance
  • +
  • Destroy (int) - 是否直接删除,0表示按照原来的逻辑(有回收站权限,则进入回收站),1表示直接删除
  • +
  • ReleaseEIP (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。
  • +
  • ReleaseUDisk (bool) - 是否删除挂载的数据盘。true删除,其他不删除。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • InRecycle (str) - 放入回收站:”Yes”, 彻底删除:“No”
  • +
  • UHostId (str) - UHost 实例 Id
  • +
+
+ +
+
+upgrade_to_ark_uhost_instance(req=None, **kwargs)[source]
+

UpgradeToArkUHostInstance - 普通升级为方舟机型

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • UHostIds (list) - (Required) UHost主机的资源ID,例如UHostIds.0代表希望升级的主机1,UHostIds.1代表主机2。
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • CouponId (str) - 代金券ID 请参考DescribeCoupon接口
  • +
+

Response

+
    +
  • UHostSet (list) - UHost主机的资源ID数组
  • +
+
+ +
+ +
+
+

ULB

+
+
+class ucloud.services.ulb.client.ULBClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_backend(req=None, **kwargs)[source]
+

AllocateBackend - 添加ULB后端资源实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ResourceId (str) - (Required) 所添加的后端资源的资源ID
  • +
  • ResourceType (str) - (Required) 所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • VServerId (str) - (Required) VServer实例的ID
  • +
  • Enabled (int) - 后端实例状态开关,枚举值: 1:启用; 0:禁用 默认为启用
  • +
  • Port (int) - 所添加的后端资源服务端口,取值范围[1-65535],默认80
  • +
  • Weight (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1
  • +
+

Response

+
    +
  • BackendId (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关),可用于 UpdateBackendAttribute/UpdateBackendAttributeBatch/ReleaseBackend
  • +
+
+ +
+
+allocate_backend_batch(req=None, **kwargs)[source]
+

AllocateBackendBatch - 批量添加VServer后端节点

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Backends (list) - (Required) 用| 分割字段,格式:ResourceId| ResourceType| Port| Enabled|IP| Weight。ResourceId:所添加的后端资源的资源ID;ResourceType:所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”;Port:所添加的后端资源服务端口,取值范围[1-65535];Enabled:后端实例状态开关,枚举值: 1:启用; 0:禁用;IP:后端资源内网ip;Weight:所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • VServerId (str) - (Required) VServer实例的ID
  • +
  • ApiVersion (int) -
  • +
+

Response

+
    +
  • BackendSet (list) - 见 BackendSet 模型定义
  • +
+

Response Model

+

BackendSet

+
    +
  • BackendId (str) - rs的资源ID
  • +
  • ResourceId (str) - rs对应的UHost ID
  • +
+
+ +
+
+bind_ssl(req=None, **kwargs)[source]
+

BindSSL - 将SSL证书绑定到VServer

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLId (str) - (Required) SSL证书的Id
  • +
  • ULBId (str) - (Required) 所绑定ULB实例ID
  • +
  • VServerId (str) - (Required) 所绑定VServer实例ID
  • +
+

Response

+
+ +
+
+create_policy(req=None, **kwargs)[source]
+

CreatePolicy - 创建VServer内容转发策略

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId
  • +
  • Match (str) - (Required) 内容转发匹配字段
  • +
  • ULBId (str) - (Required) 需要添加内容转发策略的负载均衡实例ID
  • +
  • VServerId (str) - (Required) 需要添加内容转发策略的VServer实例ID
  • +
  • Type (str) - 内容转发匹配字段的类型
  • +
+

Response

+
    +
  • PolicyId (str) - 内容转发策略ID
  • +
+
+ +
+
+create_ssl(req=None, **kwargs)[source]
+

CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLName (str) - (Required) SSL证书的名字,默认值为空
  • +
  • CaCert (str) - CA证书
  • +
  • PrivateKey (str) - 加密证书的私钥
  • +
  • SSLContent (str) - SSL证书的完整内容,包括用户证书、加密证书的私钥、CA证书
  • +
  • SSLType (str) - 所添加的SSL证书类型,目前只支持Pem格式
  • +
  • UserCert (str) - 用户的证书
  • +
+

Response

+
    +
  • SSLId (str) - SSL证书的Id
  • +
+
+ +
+
+create_ulb(req=None, **kwargs)[source]
+

CreateULB - 创建负载均衡实例,可以选择内网或者外网

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - ULB 所属的业务组ID,如果不传则使用默认的业务组
  • +
  • ChargeType (str) - 付费方式
  • +
  • IPVersion (str) - ULB ip类型,枚举值:IPv6 / IPv4 (内部测试,暂未对外开放)
  • +
  • InnerMode (str) - 创建的ULB是否为内网模式
  • +
  • ListenType (str) - ULB 监听器类型,枚举值:RequestProxy / PacketsTransmit (内部测试,暂未对外开放)
  • +
  • OuterMode (str) - 创建的ULB是否为外网模式,默认即为外网模式
  • +
  • PrivateIp (str) - 创建内网ULB时指定内网IP。若不传值,则随机分配当前子网下的IP(暂时不对外开放,创建外网ULB该字段会忽略)
  • +
  • Remark (str) - 备注
  • +
  • SubnetId (str) - 内网ULB 所属的子网ID,如果不传则使用默认的子网
  • +
  • Tag (str) - 业务组
  • +
  • ULBName (str) - 负载均衡的名字,默认值为“ULB”
  • +
  • VPCId (str) - ULB所在的VPC的ID, 如果不传则使用默认的VPC
  • +
+

Response

+
    +
  • ULBId (str) - 负载均衡实例的Id
  • +
+
+ +
+
+create_vserver(req=None, **kwargs)[source]
+

CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例ID
  • +
  • ClientTimeout (int) - ListenType为RequestProxy时表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;ListenType为PacketsTransmit时表示连接保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持
  • +
  • Domain (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名
  • +
  • FrontendPort (int) - VServer后端端口,取值范围[1-65535];默认值为80
  • +
  • ListenType (str) - 监听器类型,枚举值为:RequestProxy -> 请求代理;PacketsTransmit -> 报文转发;默认为”RequestProxy”
  • +
  • Method (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:”Roundrobin”
  • +
  • MonitorType (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查;
  • +
  • Path (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径
  • +
  • PersistenceInfo (str) - 根据PersistenceType确认; None和ServerInsert: 此字段无意义; UserDefined:此字段传入自定义会话保持String
  • +
  • PersistenceType (str) - VServer会话保持方式,默认关闭会话保持。枚举值:None -> 关闭;ServerInsert -> 自动生成KEY;UserDefined -> 用户自定义KEY。
  • +
  • Protocol (str) - VServer实例的协议,请求代理模式下有 HTTP、HTTPS、TCP,报文转发下有 TCP,UDP。默认为“HTTP”
  • +
  • VServerName (str) - VServer实例名称,默认为”VServer”
  • +
+

Response

+
    +
  • VServerId (str) - VServer实例的Id
  • +
+
+ +
+
+delete_policy(req=None, **kwargs)[source]
+

DeletePolicy - 删除内容转发策略

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PolicyId (str) - (Required) 内容转发策略ID
  • +
  • GroupId (str) - 内容转发策略组ID
  • +
  • VServerId (str) - VServer 资源ID
  • +
+

Response

+
+ +
+
+delete_ssl(req=None, **kwargs)[source]
+

DeleteSSL - 删除SSL证书

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLId (str) - (Required) SSL证书的ID
  • +
+

Response

+
+ +
+
+delete_ulb(req=None, **kwargs)[source]
+

DeleteULB - 删除负载均衡实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • ReleaseEip (bool) - 删除ulb时是否释放绑定的EIP,false标识只解绑EIP,true表示会释放绑定的EIP,默认是false
  • +
+

Response

+
+ +
+
+delete_vserver(req=None, **kwargs)[source]
+

DeleteVServer - 删除VServer实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
  • VServerId (str) - (Required) VServer实例的ID
  • +
+

Response

+
+ +
+
+describe_ssl(req=None, **kwargs)[source]
+

DescribeSSL - 获取SSL证书信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 数据分页值,默认为20
  • +
  • Offset (int) - 数据偏移量,默认值为0
  • +
  • SSLId (str) - SSL证书的Id
  • +
+

Response

+
    +
  • DataSet (list) - 见 ULBSSLSet 模型定义
  • +
  • TotalCount (int) - 满足条件的SSL证书总数
  • +
+

Response Model

+

ULBSSLSet

+
    +
  • HashValue (str) -
  • +
  • SSLId (str) - SSL证书的Id
  • +
  • SSLName (str) - SSL证书的名字
  • +
+
+ +
+
+describe_ulb(req=None, **kwargs)[source]
+

DescribeULB - 获取ULB详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - ULB所属的业务组ID
  • +
  • Limit (int) - 数据分页值,默认为20
  • +
  • Offset (int) - 数据偏移量,默认为0
  • +
  • SubnetId (str) - ULB所属的子网ID
  • +
  • ULBId (str) - 负载均衡实例的Id。 若指定则返回指定的负载均衡实例的信息; 若不指定则返回当前数据中心中所有的负载均衡实例的信息
  • +
  • VPCId (str) - ULB所属的VPC
  • +
+

Response

+
    +
  • DataSet (list) - 见 ULBSet 模型定义
  • +
  • TotalCount (int) - 满足条件的ULB总数
  • +
+

Response Model

+

PolicyBackendSet

+
    +
  • BackendId (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关
  • +
  • ObjectId (str) - 后端资源的对象ID
  • +
  • Port (int) - 所添加的后端资源服务端口
  • +
  • PrivateIP (str) - 后端资源的内网IP
  • +
  • ResourceName (str) - 后端资源的实例名称
  • +
+

ULBPolicySet

+
    +
  • BackendSet (list) - 见 PolicyBackendSet 模型定义
  • +
  • Match (str) - 内容转发匹配字段;默认内容转发类型下为空。
  • +
  • PolicyId (str) - 内容转发Id,默认内容转发类型下为空。
  • +
  • PolicyPriority (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。
  • +
  • PolicyType (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发
  • +
  • TotalCount (int) - 默认内容转发类型下返回当前rs总数
  • +
  • Type (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空
  • +
  • VServerId (str) - 所属VServerId
  • +
+

ULBBackendSet

+
    +
  • BackendId (str) - 后端资源实例的Id
  • +
  • Enabled (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用
  • +
  • Port (int) - 后端提供服务的端口
  • +
  • PrivateIP (str) - 后端提供服务的内网IP
  • +
  • ResourceId (str) - 资源实例的资源Id
  • +
  • ResourceName (str) - 资源实例的资源名称
  • +
  • ResourceType (str) - 资源实例的类型
  • +
  • Status (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡实例的资源Id
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡实例的资源名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡实例的类型
  • +
  • SubnetId (str) - 后端提供服务的资源所在的子网的ID
  • +
  • Weight (int) -
  • +
+

ULBSSLSet

+
    +
  • HashValue (str) -
  • +
  • SSLId (str) - SSL证书的Id
  • +
  • SSLName (str) - SSL证书的名字
  • +
+

ULBVServerSet

+
    +
  • BackendSet (list) - 见 ULBBackendSet 模型定义
  • +
  • ClientTimeout (int) - 空闲连接的回收时间,单位:秒。
  • +
  • Domain (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名
  • +
  • FrontendPort (int) - VServer服务端口
  • +
  • ListenType (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发
  • +
  • Method (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。
  • +
  • MonitorType (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查;
  • +
  • Path (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径
  • +
  • PersistenceInfo (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。
  • +
  • PersistenceType (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。
  • +
  • PolicySet (list) - 见 ULBPolicySet 模型定义
  • +
  • Protocol (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。
  • +
  • SSLSet (list) - 见 ULBSSLSet 模型定义
  • +
  • Status (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。
  • +
  • VServerId (str) - VServer实例的Id
  • +
  • VServerName (str) - VServer实例的名字
  • +
+

ULBIPSet

+
    +
  • Bandwidth (int) - 弹性IP的带宽值(暂未对外开放)
  • +
  • BandwidthType (int) - 弹性IP的带宽类型,枚举值:1 表示是共享带宽,0 普通带宽类型(暂未对外开放)
  • +
  • EIP (str) - 弹性IP地址
  • +
  • EIPId (str) - 弹性IP的ID
  • +
  • OperatorName (str) - 弹性IP的运营商信息,枚举值为: Bgp:BGP IP International:国际IP
  • +
+

ULBSet

+
    +
  • Bandwidth (int) - 带宽
  • +
  • BandwidthType (int) - 带宽类型,枚举值为: 0,非共享带宽; 1,共享带宽
  • +
  • BusinessId (str) - ULB 所属的业务组ID
  • +
  • CreateTime (int) - ULB的创建时间,格式为Unix Timestamp
  • +
  • ExpireTime (int) - ULB的到期时间,格式为Unix Timestamp
  • +
  • IPSet (list) - 见 ULBIPSet 模型定义
  • +
  • Name (str) - 负载均衡的资源名称(资源系统中),缺省值“ULB”
  • +
  • PrivateIP (str) - ULB的内网IP,当ULBType为OuterMode时,该值为空
  • +
  • Remark (str) - 负载均衡的备注,缺省值“”
  • +
  • Resource (list) - ULB的详细信息列表(废弃)
  • +
  • SubnetId (str) - ULB 为 InnerMode 时,ULB 所属的子网ID,默认为空
  • +
  • Tag (str) - 负载均衡的业务组名称,缺省值“Default”
  • +
  • ULBId (str) - 负载均衡的资源ID
  • +
  • ULBName (str) - 负载均衡的资源名称(内部记载,废弃)
  • +
  • ULBType (str) - ULB 的类型
  • +
  • VPCId (str) - ULB所在的VPC的ID
  • +
  • VServerSet (list) - 见 ULBVServerSet 模型定义
  • +
+
+ +
+
+describe_vserver(req=None, **kwargs)[source]
+

DescribeVServer - 获取ULB下的VServer的详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例的Id
  • +
  • Limit (int) - 数据分页值
  • +
  • Offset (int) - 数据偏移量
  • +
  • VServerId (str) - VServer实例的Id;若指定则返回指定的VServer实例的信息; 若不指定则返回当前负载均衡实例下所有VServer的信息
  • +
+

Response

+
    +
  • DataSet (list) - 见 ULBVServerSet 模型定义
  • +
  • TotalCount (int) - 满足条件的VServer总数
  • +
+

Response Model

+

PolicyBackendSet

+
    +
  • BackendId (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关
  • +
  • ObjectId (str) - 后端资源的对象ID
  • +
  • Port (int) - 所添加的后端资源服务端口
  • +
  • PrivateIP (str) - 后端资源的内网IP
  • +
  • ResourceName (str) - 后端资源的实例名称
  • +
+

ULBSSLSet

+
    +
  • HashValue (str) -
  • +
  • SSLId (str) - SSL证书的Id
  • +
  • SSLName (str) - SSL证书的名字
  • +
+

ULBPolicySet

+
    +
  • BackendSet (list) - 见 PolicyBackendSet 模型定义
  • +
  • Match (str) - 内容转发匹配字段;默认内容转发类型下为空。
  • +
  • PolicyId (str) - 内容转发Id,默认内容转发类型下为空。
  • +
  • PolicyPriority (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。
  • +
  • PolicyType (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发
  • +
  • TotalCount (int) - 默认内容转发类型下返回当前rs总数
  • +
  • Type (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空
  • +
  • VServerId (str) - 所属VServerId
  • +
+

ULBBackendSet

+
    +
  • BackendId (str) - 后端资源实例的Id
  • +
  • Enabled (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用
  • +
  • Port (int) - 后端提供服务的端口
  • +
  • PrivateIP (str) - 后端提供服务的内网IP
  • +
  • ResourceId (str) - 资源实例的资源Id
  • +
  • ResourceName (str) - 资源实例的资源名称
  • +
  • ResourceType (str) - 资源实例的类型
  • +
  • Status (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡实例的资源Id
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡实例的资源名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡实例的类型
  • +
  • SubnetId (str) - 后端提供服务的资源所在的子网的ID
  • +
  • Weight (int) -
  • +
+

ULBVServerSet

+
    +
  • BackendSet (list) - 见 ULBBackendSet 模型定义
  • +
  • ClientTimeout (int) - 空闲连接的回收时间,单位:秒。
  • +
  • Domain (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名
  • +
  • FrontendPort (int) - VServer服务端口
  • +
  • ListenType (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发
  • +
  • Method (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。
  • +
  • MonitorType (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查;
  • +
  • Path (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径
  • +
  • PersistenceInfo (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。
  • +
  • PersistenceType (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。
  • +
  • PolicySet (list) - 见 ULBPolicySet 模型定义
  • +
  • Protocol (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。
  • +
  • SSLSet (list) - 见 ULBSSLSet 模型定义
  • +
  • Status (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。
  • +
  • VServerId (str) - VServer实例的Id
  • +
  • VServerName (str) - VServer实例的名字
  • +
+
+ +
+
+release_backend(req=None, **kwargs)[source]
+

ReleaseBackend - 从VServer释放后端资源实例

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID)
  • +
  • ULBId (str) - (Required) 负载均衡实例的ID
  • +
+

Response

+
+ +
+
+unbind_ssl(req=None, **kwargs)[source]
+

UnbindSSL - 从VServer解绑SSL证书

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SSLId (str) - (Required) SSL证书的Id
  • +
  • ULBId (str) - (Required) 所绑定ULB实例ID
  • +
  • VServerId (str) - (Required) 所绑定VServer实例ID
  • +
+

Response

+
+ +
+
+update_backend_attribute(req=None, **kwargs)[source]
+

UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID)
  • +
  • ULBId (str) - (Required) 负载均衡资源ID
  • +
  • Enabled (int) - 后端实例状态开关
  • +
  • Port (int) - 后端资源服务端口,取值范围[1-65535]
  • +
  • Weight (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1
  • +
+

Response

+
+ +
+
+update_policy(req=None, **kwargs)[source]
+

UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackendId (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId
  • +
  • Match (str) - (Required) 内容转发匹配字段
  • +
  • PolicyId (str) - (Required) 转发规则的ID
  • +
  • ULBId (str) - (Required) 需要添加内容转发策略的负载均衡实例ID
  • +
  • VServerId (str) - (Required) 需要添加内容转发策略的VServer实例ID
  • +
  • Type (str) - 内容转发匹配字段的类型
  • +
+

Response

+
    +
  • PolicyId (str) - 转发规则的ID
  • +
+
+ +
+
+update_ulb_attribute(req=None, **kwargs)[source]
+

UpdateULBAttribute - 更新ULB名字业务组备注等属性字段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) ULB资源ID
  • +
  • Name (str) - 名字
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务
  • +
+

Response

+
+ +
+
+update_vserver_attribute(req=None, **kwargs)[source]
+

UpdateVServerAttribute - 更新VServer实例属性

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ULBId (str) - (Required) 负载均衡实例ID
  • +
  • VServerId (str) - (Required) VServer实例ID
  • +
  • ClientTimeout (int) - 请求代理的VServer下表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;报文转发的VServer下表示回话保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持
  • +
  • Domain (str) - MonitorType 为 Path 时指定健康检查发送请求时HTTP HEADER 里的域名
  • +
  • Method (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:”Roundrobin”
  • +
  • MonitorType (str) - 健康检查的类型,Port:端口,Path:路径
  • +
  • Path (str) - MonitorType 为 Path 时指定健康检查发送请求时的路径,默认为 /
  • +
  • PersistenceInfo (str) - 根据PersistenceType确定: None或ServerInsert, 此字段无意义; UserDefined, 则此字段传入用户自定义会话保持String. 若无此字段则不做修改
  • +
  • PersistenceType (str) - VServer会话保持模式,若无此字段则不做修改。枚举值:None:关闭;ServerInsert:自动生成KEY;UserDefined:用户自定义KEY。
  • +
  • Protocol (str) - VServer协议类型,请求代理只支持修改为 HTTP/HTTPS,报文转发VServer只支持修改为 TCP/UDP
  • +
  • VServerName (str) - VServer实例名称,若无此字段则不做修改
  • +
+

Response

+
+ +
+ +
+
+

UMem

+
+
+class ucloud.services.umem.client.UMemClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_umem_cache_group(req=None, **kwargs)[source]
+

CreateUMemcacheGroup - 创建单机Memcache

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 请求创建组的名称 范围[6-60]
  • +
  • ChargeType (str) - 计费模式,Year , Month, Dynamic 默认: Month
  • +
  • ConfigId (str) - 配置ID,目前仅支持默认配置id 默认配置id:”9a891891-c245-4b66-bce8-67e59430d67c”
  • +
  • CouponId (str) - 代金券ID
  • +
  • Protocol (str) -
  • +
  • Quantity (int) - 购买时长,默认为1
  • +
  • Size (int) - 每个节点的内存大小,单位GB,默认1GB 目前仅支持1/2/4/8/16/32这几档
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组 默认:Default
  • +
  • VPCId (str) -
  • +
  • Version (str) - Memcache版本信息,默认为1.4.31
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • GroupId (str) - 创建的组ID
  • +
+
+ +
+
+create_umem_space(req=None, **kwargs)[source]
+

CreateUMemSpace - 创建UMem内存空间

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 空间名称,长度(6<=size<=63)
  • +
  • Size (int) - (Required) 内存大小, 单位:GB, 范围[1~1024]
  • +
  • ChargeType (str) - Year , Month, Dynamic, Trial 默认: Month
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Password (str) - URedis密码。请遵照 字段规范 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。
  • +
  • Protocol (str) - 协议:memcache, redis (默认redis).注意:redis无single类型
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • SubnetId (str) -
  • +
  • Tag (str) -
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • VPCId (str) -
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • SpaceId (str) - 创建内存空间ID列表
  • +
+
+ +
+
+create_uredis_group(req=None, **kwargs)[source]
+

CreateURedisGroup - 创建主备redis

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • HighAvailability (str) - (Required) 是否开启高可用,enable或disable
  • +
  • Name (str) - (Required) 请求创建组的名称 (范围[6-63],只能包含英文、数字以及符号-和_)
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • AutoBackup (str) - 是否自动备份,enable或disable,默认disable
  • +
  • BackupId (str) - 有此项代表从备份中创建,无代表正常创建
  • +
  • BackupTime (int) - 自动备份开始时间,范围[0-23],默认3点
  • +
  • ChargeType (str) - 计费模式,Year , Month, Dynamic 默认: Month
  • +
  • ConfigId (str) - 配置ID,目前支持 3.0版本配置ID:”03f58ca9-b64d-4bdd-abc7-c6b9a46fd801”,3.2版本配置ID:”3e45ac48-f8a2-a9q2-261d-l342dab130gf”, 4.0版本配置ID:”6c9298a3-9d7f-428c-b1d0-e87ab3b8a1ea”,默认版本3.0,从备份创建为必传项
  • +
  • CouponId (str) - 代金券ID
  • +
  • MasterGroupId (str) - Master Redis Group的ID,创建只读Slave时,必须填写
  • +
  • Password (str) - 初始化密码,需要 base64 编码
  • +
  • Quantity (int) - 购买时长,默认为1
  • +
  • Size (int) - 每个节点的内存大小,单位GB,默认1GB,目前仅支持1/2/4/8/16/32,六种
  • +
  • SlaveZone (str) - 跨机房URedis,slave所在可用区(必须和Zone在同一Region,且不可相同)
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组名称
  • +
  • VPCId (str) -
  • +
  • Version (str) - Redis版本信息(详见DescribeURedisVersion返回结果),默认版本3.0
  • +
+

Response

+
    +
  • GroupId (str) - 创建的组ID
  • +
+
+ +
+
+delete_umem_cache_group(req=None, **kwargs)[source]
+

DeleteUMemcacheGroup - 删除单机Memcache

+

Request

+ +

Response

+
+ +
+
+delete_umem_space(req=None, **kwargs)[source]
+

DeleteUMemSpace - 删除UMem内存空间

+

Request

+ +

Response

+
+ +
+
+delete_uredis_group(req=None, **kwargs)[source]
+

DeleteURedisGroup - 删除主备redis

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 组ID
  • +
+

Response

+
+ +
+
+describe_umem_cache_group(req=None, **kwargs)[source]
+

DescribeUMemcacheGroup - 显示Memcache

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit
  • +
  • Limit (int) - 分页显示的条目数, 默认值为20
  • +
  • Offset (int) - 分页显示的起始偏移, 默认值为0
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemcacheGroupSet 模型定义
  • +
  • TotalCount (int) - 组的总的节点个数
  • +
+

Response Model

+

UMemcacheGroupSet

+
    +
  • ChargeType (str) - 计费类型:Year,Month,Dynamic 默认Dynamic
  • +
  • ConfigId (str) - 节点的配置ID
  • +
  • CreateTime (int) - 创建时间 (UNIX时间戳)
  • +
  • ExpireTime (int) - 过期时间 (UNIX时间戳)
  • +
  • GroupId (str) - 组ID
  • +
  • ModifyTime (int) - 修改时间 (UNIX时间戳)
  • +
  • Name (str) - 组名称
  • +
  • Port (int) - 节点分配的服务端口
  • +
  • Size (int) - 容量单位GB
  • +
  • State (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败Restarting // 重启中
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组名称
  • +
  • UsedSize (int) - 使用量单位MB
  • +
  • VPCId (str) -
  • +
  • Version (str) - Memcache版本信息,默认为1.4.31
  • +
  • VirtualIP (str) - 节点的虚拟IP地址
  • +
+
+ +
+
+describe_umem_cache_price(req=None, **kwargs)[source]
+

DescribeUMemcachePrice - 获取umemcache组价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 容量大小,单位:GB 取值范围[1-32]
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - 计费模式,Year, Month, Dynamic,默认: Dynamic 默认: 获取所有计费模式的价格
  • +
  • Quantity (int) - 购买umemcache的时长,默认值为1
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemcachePriceSet 模型定义
  • +
+

Response Model

+

UMemcachePriceSet

+
    +
  • ChargeType (str) - 计费模式,Year, Month, Dynamic
  • +
  • OriginalPrice (int) - 原价
  • +
  • Price (int) - 总价格,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+describe_umem_cache_upgrade_price(req=None, **kwargs)[source]
+

DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 需要升级的空间的GroupId,请参考DescribeUMemcacheGroup接口
  • +
  • Size (int) - (Required) 购买umemcache大小,单位:GB
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (dict) - 见 PriceDataSet 模型定义
  • +
  • Price (int) - 价格,单位:元
  • +
+

Response Model

+

PriceDataSet

+
    +
  • CustomPrice (int) - 用户折后价
  • +
  • PurchaseValue (int) - 资源有效期
  • +
  • TotalPrice (int) - 升降级资源的价格
  • +
+
+ +
+
+describe_umem_price(req=None, **kwargs)[source]
+

DescribeUMemPrice - 获取UMem实例价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买umem大小,单位:GB,范围[1~1024]
  • +
  • Type (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - Year, Month, Dynamic,Trial 如果不指定,则一次性获取三种计费
  • +
  • Quantity (int) - 购买UMem的时长,默认值为1
  • +
  • RegionFlag (bool) -
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemPriceSet 模型定义
  • +
+

Response Model

+

UMemPriceSet

+
    +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • OriginalPrice (int) - 原价
  • +
  • Price (int) - 现价,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+describe_umem_space(req=None, **kwargs)[source]
+

DescribeUMemSpace - 获取UMem内存空间列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • SpaceId (str) - 内存空间ID (无ID,则获取所有)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 见 UMemSpaceSet 模型定义
  • +
  • TotalCount (int) - 根据过滤条件得到的总数
  • +
+

Response Model

+

UMemSpaceAddressSet

+
    +
  • IP (str) - UMem实例访问IP
  • +
  • Port (int) - UMem实例访问Port
  • +
+

UMemSpaceSet

+
    +
  • Address (list) - 见 UMemSpaceAddressSet 模型定义
  • +
  • ChargeType (str) - Year, Month, Dynamic, Trial
  • +
  • CreateTime (int) - 创建时间
  • +
  • ExpireTime (int) - 到期时间
  • +
  • Name (str) - 内存空间名称
  • +
  • Protocol (str) - 协议类型: memcache, redis
  • +
  • RewriteTime (int) - 运维时间0 //0点1 //1点依次类推
  • +
  • Size (int) - 容量单位GB
  • +
  • SpaceId (str) - 内存空间ID
  • +
  • State (str) - Starting:创建中 Running:运行中 Fail:失败
  • +
  • SubnetId (str) -
  • +
  • Tag (str) -
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)
  • +
  • UsedSize (int) - 使用量单位MB
  • +
  • VPCId (str) -
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_umem_upgrade_price(req=None, **kwargs)[source]
+

DescribeUMemUpgradePrice - 获取UMem升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 购买UMem大小,单位:GB
  • +
  • SpaceId (str) - (Required) 需要升级的空间的SpaceId
  • +
  • Type (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (dict) - 见 PriceDataSet 模型定义
  • +
  • Price (int) - 价格(兼容老版本)
  • +
+

Response Model

+

PriceDataSet

+
    +
  • CustomPrice (int) - 用户折后价
  • +
  • PurchaseValue (int) - 资源有效期
  • +
  • TotalPrice (int) - 升降级资源的价格
  • +
+
+ +
+
+describe_uredis_backup(req=None, **kwargs)[source]
+

DescribeURedisBackup - 查询主备redis备份

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 组的ID
  • +
  • Limit (int) - 分页显示的条目数, 默认值为10
  • +
  • Offset (int) - 分页显示的起始偏移, 默认值为0
  • +
+

Response

+
    +
  • DataSet (list) - 见 URedisBackupSet 模型定义
  • +
  • TotalCount (int) - 用户名下总的备份个数
  • +
+

Response Model

+

URedisBackupSet

+
    +
  • BackupId (str) - 备份ID
  • +
  • BackupName (str) - 备份的名称
  • +
  • BackupSize (int) - 备份文件大小, 以字节为单位
  • +
  • BackupTime (int) - 备份时间 (UNIX时间戳)
  • +
  • BackupType (str) - 备份类型: Manual 手动 Auto 自动
  • +
  • GroupId (str) - 对应的实例ID
  • +
  • GroupName (str) - 组名称
  • +
  • State (str) - 备份的状态: Backuping 备份中 Success 备份成功 Error 备份失败 Expired 备份过期
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_uredis_backup_url(req=None, **kwargs)[source]
+

DescribeURedisBackupURL - 获取主备Redis备份下载链接

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BackupId (str) - (Required) 备份ID
  • +
  • GroupId (str) - 实例名称
  • +
  • RegionFlag (bool) - 是否是跨机房URedis(默认false)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • BackupPath (str) - 备份文件公网的地址
  • +
  • BackupURL (str) - 备份文件公网的地址
  • +
  • InnerBackupPath (str) -
  • +
+
+ +
+
+describe_uredis_group(req=None, **kwargs)[source]
+

DescribeURedisGroup - 查询主备Redis

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit
  • +
  • Limit (int) - 分页显示的条目数, 默认值为20
  • +
  • Offset (int) - 分页显示的起始偏移, 默认值为0
  • +
  • Zone (str) -
  • +
+

Response

+
    +
  • DataSet (list) - 见 URedisGroupSet 模型定义
  • +
  • TotalCount (int) - 组的总的节点个数
  • +
+

Response Model

+

URedisGroupSet

+
    +
  • AutoBackup (str) - 是否需要自动备份,enable,disable
  • +
  • BackupTime (int) - 组自动备份开始时间,单位小时计,范围[0-23]
  • +
  • ChargeType (str) - 计费类型:Year,Month,Dynamic 默认Dynamic
  • +
  • ConfigId (str) - 节点的配置ID
  • +
  • CreateTime (int) - 创建时间 (UNIX时间戳)
  • +
  • ExpireTime (int) - 过期时间 (UNIX时间戳)
  • +
  • GroupId (str) - 组ID
  • +
  • GroupName (str) - 组名称
  • +
  • HighAvailability (str) - 是否开启高可用,enable,disable
  • +
  • MemorySize (int) - 容量单位GB
  • +
  • ModifyTime (int) - 修改时间 (UNIX时间戳)
  • +
  • Name (str) - 组名称
  • +
  • Port (int) - 节点分配的服务端口
  • +
  • Protocol (str) - 协议
  • +
  • RewriteTime (int) - 返回运维时间 0 //0点 1 //1点 以此类推
  • +
  • Size (int) - 容量单位GB
  • +
  • SlaveZone (str) - 跨机房URedis,slave redis所在可用区,参见 可用区列表
  • +
  • State (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败
  • +
  • SubnetId (str) -
  • +
  • Tag (str) - 业务组名称
  • +
  • Type (str) -
  • +
  • UsedSize (int) - 使用量单位MB
  • +
  • VPCId (str) -
  • +
  • Version (str) - Redis版本信息
  • +
  • VirtualIP (str) - 节点的虚拟IP地址
  • +
  • Zone (str) - 实例所在可用区,或者master redis所在可用区,参见 可用区列表
  • +
+
+ +
+
+describe_uredis_price(req=None, **kwargs)[source]
+

DescribeURedisPrice - 取uredis价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 量大小,单位:GB 取值范围[1-32]
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - 计费模式,Year, Month, Dynamic;如果不指定,则一次性获取三种计费
  • +
  • ProductType (str) - 产品类型:MS_Redis(标准主备版),S_Redis(从库),默认为MS_Redis
  • +
  • Quantity (int) - 计费模式为Dynamic时,购买的时长, 默认为1
  • +
  • RegionFlag (bool) - 是否是跨机房URedis(默认false)
  • +
  • Type (str) -
  • +
+

Response

+
    +
  • DataSet (list) - 见 URedisPriceSet 模型定义
  • +
+

Response Model

+

URedisPriceSet

+
    +
  • ChargeType (str) - Year, Month, Dynamic,Trial
  • +
  • OriginalPrice (int) - 原价
  • +
  • Price (int) - 总价格,单位: 元,保留小数点后两位有效数字
  • +
+
+ +
+
+describe_uredis_upgrade_price(req=None, **kwargs)[source]
+

DescribeURedisUpgradePrice - 获取uredis升级价格信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 要升级的空间的GroupId,请参考DescribeURedisGroup接口
  • +
  • Size (int) - (Required) 购买uredis大小,单位:GB,范围是[1-32]
  • +
  • Type (str) -
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (dict) - 见 PriceDataSet 模型定义
  • +
  • Price (int) - 扩容差价,单位: 元,保留小数点后两位有效数字(兼容老版本)
  • +
+

Response Model

+

PriceDataSet

+
    +
  • CustomPrice (int) - 用户折后价
  • +
  • PurchaseValue (int) - 资源有效期
  • +
  • TotalPrice (int) - 升降级资源的价格
  • +
+
+ +
+
+get_umem_space_state(req=None, **kwargs)[source]
+

GetUMemSpaceState - 获取UMem内存空间列表

+

Request

+ +

Response

+
    +
  • State (str) - Starting:创建中 Running:运行中 Fail:失败
  • +
+
+ +
+
+modify_umem_space_name(req=None, **kwargs)[source]
+

ModifyUMemSpaceName - 修改UMem内存空间名称

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) 新的名称,长度(6<=size<=63)
  • +
  • SpaceId (str) - (Required) UMem内存空间ID
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+modify_uredis_group_name(req=None, **kwargs)[source]
+

ModifyURedisGroupName - 修改主备redis名称

+

Request

+ +

Response

+
+ +
+
+resize_udredis_space(req=None, **kwargs)[source]
+

ResizeUDredisSpace - 调整内存空间容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024)
  • +
  • SpaceId (str) - (Required) 高性能UMem 内存空间Id
  • +
  • CouponId (str) - 使用的代金券Id
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_umem_space(req=None, **kwargs)[source]
+

ResizeUMemSpace - 调整内存空间容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024)
  • +
  • SpaceId (str) - (Required) UMem 内存空间Id
  • +
  • ChargeType (str) -
  • +
  • CouponId (str) - 使用的代金券Id
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+resize_uredis_group(req=None, **kwargs)[source]
+

ResizeURedisGroup - 调整主备redis容量

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • GroupId (str) - (Required) 组ID
  • +
  • Size (int) - (Required) 内存大小, 单位:GB (需要大于原size,且小于等于32) 目前仅支持1/2/4/8/16/32 G 六种容量规格
  • +
  • ChargeType (str) -
  • +
  • CouponId (int) - 代金券ID 请参考DescribeCoupon接口
  • +
  • Type (str) - 空间类型:single(无热备),double(热备)(默认: double)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
+ +
+
+restart_umem_cache_group(req=None, **kwargs)[source]
+

RestartUMemcacheGroup - 重启单机Memcache

+

Request

+ +

Response

+
+ +
+ +
+
+

UNet

+
+
+class ucloud.services.unet.client.UNetClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_eip(req=None, **kwargs)[source]
+

AllocateEIP - 根据提供信息, 申请弹性IP

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域。
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-200],带宽计费[1-800]
  • +
  • OperatorName (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International
  • +
  • ChargeType (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按需付费(需开启权限); Trial, 试用(需开启权限) 默认为按月付费
  • +
  • CouponId (str) - 代金券ID, 默认不使用
  • +
  • Name (str) - 弹性IP的名称, 默认为 “EIP”
  • +
  • PayMode (str) - 弹性IP的计费模式. 枚举值: “Traffic”, 流量计费; “Bandwidth”, 带宽计费; “ShareBandwidth”,共享带宽模式. 默认为 “Bandwidth”.
  • +
  • Quantity (int) - 购买时长, 默认: 1
  • +
  • Remark (str) - 弹性IP的备注, 默认为空
  • +
  • ShareBandwidthId (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效
  • +
  • Tag (str) - 业务组名称, 默认为 “Default”
  • +
+

Response

+
    +
  • EIPSet (list) - 见 UnetAllocateEIPSet 模型定义
  • +
+

Response Model

+

UnetEIPAddrSet

+
    +
  • IP (str) - IP地址
  • +
  • OperatorName (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp
  • +
+

UnetAllocateEIPSet

+
    +
  • EIPAddr (list) - 见 UnetEIPAddrSet 模型定义
  • +
  • EIPId (str) - 申请到的EIP资源ID
  • +
+
+ +
+
+allocate_share_bandwidth(req=None, **kwargs)[source]
+

AllocateShareBandwidth - 开通共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ChargeType (str) - (Required) 付费方式:Year 按年,Month 按月,Dynamic 按时;
  • +
  • Name (str) - (Required) 共享带宽名字
  • +
  • ShareBandwidth (int) - (Required) 共享带宽值
  • +
  • BwType (str) - 共享带宽类型,ipv4或者ipv6,不传默认ipv4
  • +
  • Quantity (int) - 购买时长
  • +
  • ShareBandwidthGuarantee (int) - 共享带宽保底值(后付费)
  • +
+

Response

+
    +
  • ShareBandwidthId (str) - 共享带宽资源Id
  • +
+
+ +
+
+allocate_vip(req=None, **kwargs)[source]
+

AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域
  • +
  • SubnetId (str) - (Required) 子网id
  • +
  • VPCId (str) - (Required) 指定vip所属的VPC
  • +
  • BusinessId (str) - 业务组
  • +
  • Count (int) - 申请数量,默认: 1
  • +
  • Ip (str) - 指定ip
  • +
  • Name (str) - vip名,默认为VIP
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组名称,默认为Default
  • +
  • Zone (str) - 可用区
  • +
+

Response

+
    +
  • DataSet (list) - 申请到的VIP地址
  • +
  • VIPSet (list) - 见 VIPSet 模型定义
  • +
+

Response Model

+

VIPSet

+
    +
  • VIP (str) - 虚拟ip
  • +
  • VIPId (str) - 虚拟ip id
  • +
  • VPCId (str) - VPC id
  • +
+
+ +
+
+associate_eip_with_share_bandwidth(req=None, **kwargs)[source]
+

AssociateEIPWithShareBandwidth - 将EIP加入共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域。
  • +
  • EIPIds (list) - (Required) 要加入共享带宽的EIP的资源Id
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽ID
  • +
+

Response

+
+ +
+
+bind_eip(req=None, **kwargs)[source]
+

BindEIP - 将尚未使用的弹性IP绑定到指定的资源

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • EIPId (str) - (Required) 弹性IP的资源Id
  • +
  • ResourceId (str) - (Required) 弹性IP请求绑定的资源ID
  • +
  • ResourceType (str) - (Required) 弹性IP请求绑定的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:natgw;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni:虚拟网卡。
  • +
+

Response

+
+ +
+
+create_bandwidth_package(req=None, **kwargs)[source]
+

CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。
  • +
  • Region (str) - (Config) 地域
  • +
  • Bandwidth (int) - (Required) 带宽大小(单位Mbps), 取值范围[2,800] (最大值受地域限制)
  • +
  • EIPId (str) - (Required) 所绑定弹性IP的资源ID
  • +
  • TimeRange (int) - (Required) 带宽包有效时长, 取值范围为大于0的整数, 即该带宽包在EnableTime到 EnableTime+TimeRange时间段内生效
  • +
  • CouponId (str) - 代金券ID
  • +
  • EnableTime (int) - 生效时间, 格式为 Unix timestamp, 默认为立即开通
  • +
+

Response

+
    +
  • BandwidthPackageId (str) - 所创建带宽包的资源ID
  • +
+
+ +
+
+create_firewall(req=None, **kwargs)[source]
+

CreateFirewall - 创建防火墙

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • Name (str) - (Required) 防火墙名称
  • +
  • Rule (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注
  • +
  • Remark (str) - 防火墙描述,默认为空
  • +
  • Tag (str) - 防火墙业务组,默认为Default
  • +
+

Response

+
    +
  • FWId (str) - 防火墙ID
  • +
+
+ +
+
+delete_bandwidth_package(req=None, **kwargs)[source]
+

DeleteBandwidthPackage - 删除弹性IP上已附加带宽包

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • BandwidthPackageId (str) - (Required) 带宽包资源ID
  • +
+

Response

+
+ +
+
+delete_firewall(req=None, **kwargs)[source]
+

DeleteFirewall - 删除防火墙

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
+

Response

+
+ +
+
+describe_bandwidth_package(req=None, **kwargs)[source]
+

DescribeBandwidthPackage - 获取某地域下的带宽包信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20
  • +
  • Offset (int) - 返回数据偏移量, 默认为0
  • +
+

Response

+
    +
  • DataSets (list) - 见 UnetBandwidthPackageSet 模型定义
  • +
  • TotalCount (int) - 满足条件的带宽包总数
  • +
+

Response Model

+

EIPAddrSet

+
    +
  • IP (str) - 弹性IP地址
  • +
  • OperatorName (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际.
  • +
+

UnetBandwidthPackageSet

+
    +
  • Bandwidth (int) - 带宽包的临时带宽值, 单位Mbps
  • +
  • BandwidthPackageId (str) - 带宽包的资源ID
  • +
  • CreateTime (int) - 创建时间, 格式为 Unix Timestamp
  • +
  • DisableTime (int) - 失效时间, 格式为 Unix Timestamp
  • +
  • EIPAddr (list) - 见 EIPAddrSet 模型定义
  • +
  • EIPId (str) - 带宽包所绑定弹性IP的资源ID
  • +
  • EnableTime (int) - 生效时间, 格式为 Unix Timestamp
  • +
+
+ +
+
+describe_bandwidth_usage(req=None, **kwargs)[source]
+

DescribeBandwidthUsage - 获取带宽用量信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPIds (list) - 弹性IP的资源Id. 如果为空, 则返回当前 Region中符合条件的所有EIP的带宽用量, n为自然数
  • +
  • Limit (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20
  • +
  • OffSet (int) - 返回数据偏移量, 默认为0
  • +
+

Response

+
    +
  • EIPSet (list) - 见 UnetBandwidthUsageEIPSet 模型定义
  • +
  • TotalCount (int) - EIPSet中的元素个数
  • +
+

Response Model

+

UnetBandwidthUsageEIPSet

+
    +
  • CurBandwidth (float) - 最近5分钟带宽用量, 单位Mbps
  • +
  • EIPId (str) - 弹性IP资源ID
  • +
+
+ +
+
+describe_eip(req=None, **kwargs)[source]
+

DescribeEIP - 获取弹性IP信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • EIPIds (list) - 弹性IP的资源ID如果为空, 则返回当前 Region中符合条件的的所有EIP
  • +
  • Limit (int) - 数据分页值, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
+

Response

+
    +
  • EIPSet (list) - 见 UnetEIPSet 模型定义
  • +
  • TotalBandwidth (int) - 满足条件的弹性IP带宽总和, 单位Mbps
  • +
  • TotalCount (int) - 满足条件的弹性IP总数
  • +
+

Response Model

+

ShareBandwidthSet

+
    +
  • ShareBandwidth (int) - 共享带宽带宽值
  • +
  • ShareBandwidthId (str) - 共享带宽ID
  • +
  • ShareBandwidthName (str) - 共享带宽的资源名称
  • +
+

UnetEIPAddrSet

+
    +
  • IP (str) - IP地址
  • +
  • OperatorName (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp
  • +
+

UnetEIPResourceSet

+
    +
  • EIPId (str) - 弹性IP的资源ID
  • +
  • ResourceId (str) - 已绑定资源的资源ID
  • +
  • ResourceName (str) - 已绑定的资源名称
  • +
  • ResourceType (str) - 已绑定的资源类型, 枚举值为: uhost, 云主机;natgw:NAT网关;ulb:负载均衡器;upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;vpngw:IPSec VPN;ucdr:云灾备;dbaudit:数据库审计,uni:虚拟网卡。
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡的ID
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡的名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡的类型。uni,虚拟网卡。
  • +
+

UnetEIPSet

+
    +
  • Bandwidth (int) - 弹性IP的带宽, 单位为Mbps, 当BandwidthType=1时, 该处显示为共享带宽值. 当BandwidthType=0时, 该处显示这个弹性IP的带宽.
  • +
  • BandwidthType (int) - 带宽模式, 枚举值为: 0: 非共享带宽模式, 1: 共享带宽模式
  • +
  • ChargeType (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按小时付费; Trial, 试用. 按小时付费和试用这两种付费模式需要开通权限.
  • +
  • CreateTime (int) - 弹性IP的创建时间, 格式为Unix Timestamp
  • +
  • EIPAddr (list) - 见 UnetEIPAddrSet 模型定义
  • +
  • EIPId (str) - 弹性IP的资源ID
  • +
  • Expire (bool) - 弹性IP是否到期
  • +
  • ExpireTime (int) - 弹性IP的到期时间, 格式为Unix Timestamp
  • +
  • Name (str) - 弹性IP的名称,缺省值为 “EIP”
  • +
  • PayMode (str) - 弹性IP的计费模式, 枚举值为: “Bandwidth”, 带宽计费; “Traffic”, 流量计费; “ShareBandwidth”,共享带宽模式. 默认为 “Bandwidth”.
  • +
  • Remark (str) - 弹性IP的备注, 缺省值为 “”
  • +
  • Resource (dict) - 见 UnetEIPResourceSet 模型定义
  • +
  • ShareBandwidthSet (dict) - 见 ShareBandwidthSet 模型定义
  • +
  • Status (str) - 弹性IP的资源绑定状态, 枚举值为: used: 已绑定, free: 未绑定, freeze: 已冻结
  • +
  • Tag (str) - 弹性IP的业务组标识, 缺省值为 “Default”
  • +
  • Weight (int) - 外网出口权重, 默认为50, 范围[0-100]
  • +
+
+ +
+
+describe_firewall(req=None, **kwargs)[source]
+

DescribeFirewall - 获取防火墙组信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • FWId (str) - 防火墙ID,默认为返回所有防火墙
  • +
  • Limit (int) - 返回数据长度,默认为20,最大10000000
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
  • ResourceId (str) - 绑定防火墙组的资源ID
  • +
  • ResourceType (str) - 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:”unatgw”,NAT网关; “uhost”,云主机; “upm”,物理云主机; “hadoophost”,hadoop节点; “fortresshost”,堡垒机; “udhost”,私有专区主机;”udockhost”,容器;”dbaudit”,数据库审计.
  • +
+

Response

+
    +
  • DataSet (list) - 见 FirewallDataSet 模型定义
  • +
  • TotalCount (int) -
  • +
+

Response Model

+

FirewallRuleSet

+
    +
  • DstPort (str) - 目标端口
  • +
  • Priority (str) - 优先级
  • +
  • ProtocolType (str) - 协议类型
  • +
  • Remark (str) - 防火墙规则备注
  • +
  • RuleAction (str) - 防火墙动作
  • +
  • SrcIP (str) - 源地址
  • +
+

FirewallDataSet

+
    +
  • CreateTime (int) - 防火墙组创建时间,格式为Unix Timestamp
  • +
  • FWId (str) - 防火墙ID
  • +
  • GroupId (str) - 安全组ID(即将废弃)
  • +
  • Name (str) - 防火墙名称
  • +
  • Remark (str) - 防火墙备注
  • +
  • ResourceCount (int) - 防火墙绑定资源数量
  • +
  • Rule (list) - 见 FirewallRuleSet 模型定义
  • +
  • Tag (str) - 防火墙业务组
  • +
  • Type (str) - 防火墙组类型,枚举值为: “user defined”, 用户自定义防火墙; “recommend web”, 默认Web防火墙; “recommend non web”, 默认非Web防火墙
  • +
+
+ +
+
+describe_firewall_resource(req=None, **kwargs)[source]
+

DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙ID
  • +
  • Limit (int) - 返回数据长度,默认为20,最大10000000
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
+

Response

+
    +
  • ResourceSet (list) - 见 ResourceSet 模型定义
  • +
  • TotalCount (int) - 绑定资源总数
  • +
+

Response Model

+

ResourceSet

+
    +
  • Name (str) - 名称
  • +
  • PrivateIP (str) - 内网IP
  • +
  • Remark (str) - 备注
  • +
  • ResourceID (str) - 绑定该防火墙的资源id
  • +
  • ResourceType (str) - 绑定资源的资源类型,如”uhost”,”upm”,”umem”,”uhive”,”uvip”,”uredis”,”uhadoop”,”ufortress”,”dbaudit”,”udw”,”udocker”, “umemcache”
  • +
  • Status (int) - 状态
  • +
  • Tag (str) - 业务组
  • +
  • Zone (int) - 可用区
  • +
+
+ +
+
+describe_share_bandwidth(req=None, **kwargs)[source]
+

DescribeShareBandwidth - 获取共享带宽信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ShareBandwidthIds (list) - 需要返回的共享带宽Id
  • +
+

Response

+
    +
  • DataSet (list) - 见 UnetShareBandwidthSet 模型定义
  • +
  • TotalCount (int) - 符合条件的共享带宽总数,大于等于返回DataSet长度
  • +
+

Response Model

+

EIPAddrSet

+
    +
  • IP (str) - 弹性IP地址
  • +
  • OperatorName (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际.
  • +
+

EIPSetData

+
    +
  • Bandwidth (int) - EIP带宽值
  • +
  • EIPAddr (list) - 见 EIPAddrSet 模型定义
  • +
  • EIPId (str) - EIP资源Id
  • +
+

UnetShareBandwidthSet

+
    +
  • BandwidthGuarantee (int) - 共享带宽保底值(后付费)
  • +
  • ChargeType (str) - 付费方式, 预付费:Year 按年,Month 按月,Dynamic 按需;后付费:PostPay(按月)
  • +
  • CreateTime (int) - 创建时间, 格式为Unix Timestamp
  • +
  • EIPSet (list) - 见 EIPSetData 模型定义
  • +
  • ExpireTime (int) - 过期时间, 格式为Unix Timestamp
  • +
  • Name (str) - 共享带宽名称
  • +
  • PostPayStartTime (int) - 共享带宽后付费开始计费时间(后付费)
  • +
  • ShareBandwidth (int) - 共享带宽值(预付费)/共享带宽峰值(后付费), 单位Mbps
  • +
  • ShareBandwidthId (str) - 共享带宽的资源ID
  • +
+
+ +
+
+describe_vip(req=None, **kwargs)[source]
+

DescribeVIP - 获取内网VIP详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - 业务组
  • +
  • SubnetId (str) - 子网id,不指定则获取VPCId下的所有vip
  • +
  • Tag (str) - 业务组名称, 默认为 Default
  • +
  • VPCId (str) - vpc的id,指定SubnetId时必填
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • DataSet (list) - 内网VIP地址列表
  • +
  • TotalCount (int) - vip数量
  • +
  • VIPSet (list) - 见 VIPDetailSet 模型定义
  • +
+

Response Model

+

VIPDetailSet

+
    +
  • CreateTime (int) - 创建时间
  • +
  • Name (str) -
  • +
  • RealIp (str) - 真实主机ip
  • +
  • SubnetId (str) - 子网id
  • +
  • VIP (str) - 虚拟ip
  • +
  • VIPId (str) - 虚拟ip id
  • +
  • VPCId (str) - VPC id
  • +
  • Zone (str) - 地域
  • +
+
+ +
+
+disassociate_eip_with_share_bandwidth(req=None, **kwargs)[source]
+

DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 移出共享带宽后,EIP的外网带宽, 单位为Mbps. 各地域带宽范围如下: 流量计费[1-200],带宽计费[1-800]
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽ID
  • +
  • EIPIds (list) - EIP的资源Id;默认移出该共享带宽下所有的EIP
  • +
  • PayMode (str) - 移出共享带宽后,EIP的计费模式. 枚举值: “Traffic”, 流量计费; “Bandwidth”, 带宽计费; 默认为 “Bandwidth”.
  • +
+

Response

+
+ +
+
+get_eip_pay_mode(req=None, **kwargs)[source]
+

GetEIPPayMode - 获取弹性IP计费模式

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • EIPId (list) - (Required) 弹性IP的资源Id
  • +
+

Response

+
    +
  • EIPPayMode (list) - 见 EIPPayModeSet 模型定义
  • +
+

Response Model

+

EIPPayModeSet

+
    +
  • EIPId (str) - EIP的资源ID
  • +
  • EIPPayMode (str) - EIP的计费模式. 枚举值为:Bandwidth, 带宽计费;Traffic, 流量计费; “ShareBandwidth”,共享带宽模式
  • +
+
+ +
+
+get_eip_price(req=None, **kwargs)[source]
+

GetEIPPrice - 获取弹性IP价格

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [0-800]
  • +
  • OperatorName (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International,泉州为移动单线cn-qz:ChinaMobile
  • +
  • ChargeType (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按时付费; 默认为获取三种价格
  • +
  • PayMode (str) - 弹性IP计费方式r. 枚举值为: Traffic, 流量计费; Bandwidth, 带宽计费; “ShareBandwidth”,共享带宽模式. 默认为Bandwidth
  • +
  • Quantity (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末
  • +
+

Response

+
    +
  • PriceSet (list) - 见 EIPPriceDetailSet 模型定义
  • +
+

Response Model

+

EIPPriceDetailSet

+
    +
  • ChargeType (str) - 弹性IP付费方式
  • +
  • Price (float) - 弹性IP价格, 单位”元”
  • +
  • PurchaseValue (int) - 资源有效期, 以Unix Timestamp表示
  • +
+
+ +
+
+get_eip_upgrade_price(req=None, **kwargs)[source]
+

GetEIPUpgradePrice - 获取弹性IP带宽改动价格

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [1-800]
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
+

Response

+
    +
  • Price (float) - 调整带宽后的EIP价格, 单位为”元”, 如需退费此处为负值
  • +
+
+ +
+
+grant_firewall(req=None, **kwargs)[source]
+

GrantFirewall - 将防火墙应用到资源上

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
  • ResourceId (str) - (Required) 所应用资源ID
  • +
  • ResourceType (str) - (Required) 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:”unatgw”,NAT网关; “uhost”,云主机; “upm”,物理云主机; “hadoophost”,hadoop节点; “fortresshost”,堡垒机; “udhost”,私有专区主机;”udockhost”,容器;”dbaudit”,数据库审计,”uni“,虚拟网卡。
  • +
+

Response

+
+ +
+
+modify_eip_bandwidth(req=None, **kwargs)[source]
+

ModifyEIPBandwidth - 调整弹性IP的外网带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 各地域的带宽值范围如下:流量计费[1-200],带宽计费[1-800]
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
+

Response

+
+ +
+
+modify_eip_weight(req=None, **kwargs)[source]
+

ModifyEIPWeight - 修改弹性IP的外网出口权重

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
  • Weight (int) - (Required) 外网出口权重, 范围[0-100] 取值为0时, 该弹性IP不会被使用. 取值为100时, 同主机下只会使用这个弹性IP,其他弹性IP不会被使用 请勿将多个绑定在同一资源的弹性IP设置为相同权重
  • +
+

Response

+
+ +
+
+release_eip(req=None, **kwargs)[source]
+

ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态.

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) 弹性IP的资源ID
  • +
+

Response

+
+ +
+
+release_share_bandwidth(req=None, **kwargs)[source]
+

ReleaseShareBandwidth - 关闭共享带宽

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPBandwidth (int) - (Required) 关闭共享带宽后,各EIP恢复为的带宽值
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽ID
  • +
  • PayMode (str) - Bandwidth 带宽计费, Traffic 转流量计费
  • +
+

Response

+
+ +
+
+release_vip(req=None, **kwargs)[source]
+

ReleaseVIP - 释放VIP资源

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写
  • +
  • Region (str) - (Config) 地域
  • +
  • VIPId (str) - (Required) 内网VIP的id
  • +
  • Zone (str) - 可用区
  • +
+

Response

+
+ +
+
+resize_share_bandwidth(req=None, **kwargs)[source]
+

ResizeShareBandwidth - 调整共享带宽的带宽值

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ShareBandwidth (int) - (Required) 带宽值,单位为Mb,范围 [20-5000] (最大值受地域限制)
  • +
  • ShareBandwidthId (str) - (Required) 共享带宽的Id
  • +
+

Response

+
+ +
+
+set_eip_pay_mode(req=None, **kwargs)[source]
+

SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费.

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Bandwidth (int) - (Required) 调整的目标带宽值, 单位Mbps. 各地域的带宽值范围如下: 流量计费[1-200],其余情况[1-800]
  • +
  • EIPId (str) - (Required) 弹性IP的资源Id
  • +
  • PayMode (str) - (Required) 计费模式. 枚举值:”Traffic”, 流量计费模式; “Bandwidth”, 带宽计费模式
  • +
+

Response

+
+ +
+
+un_bind_eip(req=None, **kwargs)[source]
+

UnBindEIP - 将弹性IP从资源上解绑

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) 弹性IP的资源Id
  • +
  • ResourceId (str) - (Required) 弹性IP请求解绑的资源ID
  • +
  • ResourceType (str) - (Required) 弹性IP请求解绑的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:NAT网关;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni,虚拟网卡。
  • +
+

Response

+
+ +
+
+update_eip_attribute(req=None, **kwargs)[source]
+

UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • EIPId (str) - (Required) EIP资源ID
  • +
  • Name (str) - 名字(Name Tag Remark都为空则报错)
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务
  • +
+

Response

+
+ +
+
+update_firewall(req=None, **kwargs)[source]
+

UpdateFirewall - 更新防火墙规则

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
  • Rule (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注
  • +
+

Response

+
    +
  • FWId (str) - 防火墙id
  • +
+
+ +
+
+update_firewall_attribute(req=None, **kwargs)[source]
+

UpdateFirewallAttribute - 更新防火墙规则

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • FWId (str) - (Required) 防火墙资源ID
  • +
  • Name (str) - 防火墙名称,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上
  • +
  • Remark (str) - 防火墙备注,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上
  • +
  • Tag (str) - 防火墙业务组,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上
  • +
+

Response

+
+ +
+ +
+
+

UPHost

+
+
+class ucloud.services.uphost.client.UPHostClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_phost(req=None, **kwargs)[source]
+

CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ImageId (str) - (Required) 镜像ID。 请通过 [DescribePHostImage]获取
  • +
  • Password (str) - (Required) 密码(密码需使用base64进行编码)
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ChargeType (str) - 计费模式,枚举值为:year, 按年付费; month,按月付费;dynamic,按需付费,(需开启权限) trial, 试用(需开启权限)。默认为按月付费
  • +
  • Cluster (str) - 网络环境,可选千兆:1G ,万兆:10G, 默认1G
  • +
  • Count (int) - 购买数量,默认为1,(暂不支持)
  • +
  • CouponId (str) - 代金券
  • +
  • Name (str) - 物理机名称,默认为phost
  • +
  • Quantity (str) - 购买时长,默认为1,范围[1-10]
  • +
  • Raid (str) - Raid配置,默认Raid10 支持:Raid0、Raid1、Raid5、Raid10,NoRaid
  • +
  • Remark (str) - 物理机备注,默认为空
  • +
  • SecurityGroupId (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 DescribeSecurityGroup
  • +
  • SubnetId (str) - 子网ID,不填为默认,VPC2.0下需要填写此字段。
  • +
  • Tag (str) - 业务组,默认为default
  • +
  • Type (str) - 物理机类型,默认为:db-2(基础型-SAS-V3)
  • +
  • VPCId (str) - VPC ID,不填为默认,VPC2.0下需要填写此字段。
  • +
+

Response

+
    +
  • PHostId (list) - PHost的资源ID数组
  • +
+
+ +
+
+describe_phost(req=None, **kwargs)[source]
+

DescribePHost - 获取物理机详细信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 返回数据长度,默认为20
  • +
  • Offset (int) - 数据偏移量,默认为0
  • +
  • PHostId (list) - PHost资源ID,若为空,则返回当前Region所有PHost。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PHostSet (list) - 见 PHostSet 模型定义
  • +
  • TotalCount (int) - 满足条件的PHost总数
  • +
+

Response Model

+

PHostCPUSet

+
    +
  • CoreCount (int) - CPU核数
  • +
  • Count (int) - CPU个数
  • +
  • Frequence (float) - CPU主频
  • +
  • Model (str) - CPU型号
  • +
+

PHostDiskSet

+
    +
  • Count (int) - 磁盘数量
  • +
  • IOCap (int) - 磁盘IO性能,单位MB/s(待废弃)
  • +
  • Name (str) - 磁盘名称,sys/data
  • +
  • Space (int) - 单盘大小,单位GB
  • +
  • Type (str) - 磁盘属性
  • +
+

PHostIPSet

+
    +
  • Bandwidth (int) - IP对应带宽,单位Mb,内网IP不显示带宽信息
  • +
  • IPAddr (str) - IP地址,
  • +
  • IPId (str) - IP资源ID(内网IP无资源ID)(待废弃)
  • +
  • MACAddr (str) - MAC地址
  • +
  • OperatorName (str) - 国际: Internation, BGP: BGP, 内网: Private
  • +
  • SubnetId (str) - 子网ID
  • +
  • VPCId (str) - VPC ID
  • +
+

PHostSet

+
    +
  • AutoRenew (str) - 自动续费
  • +
  • CPUSet (dict) - 见 PHostCPUSet 模型定义
  • +
  • ChargeType (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限)默认为月付
  • +
  • Cluster (str) - 网络环境。枚举值:千兆:1G ,万兆:10G
  • +
  • Components (str) - 组件信息(暂不支持)
  • +
  • CreateTime (int) - 创建时间
  • +
  • DiskSet (list) - 见 PHostDiskSet 模型定义
  • +
  • ExpireTime (int) - 到期时间
  • +
  • IPSet (list) - 见 PHostIPSet 模型定义
  • +
  • ImageName (str) - 镜像名称
  • +
  • IsSupportKVM (str) - 是否支持紧急登录
  • +
  • Memory (int) - 内存大小,单位:MB
  • +
  • Name (str) - 物理机名称
  • +
  • OSType (str) - 操作系统类型
  • +
  • OSname (str) - 操作系统名称
  • +
  • PHostId (str) - PHost资源ID
  • +
  • PHostType (str) - 物理机类型,参见DescribePHostMachineType返回值
  • +
  • PMStatus (str) - 物理云主机状态。枚举值:> 初始化:Initializing; > 启动中:Starting; > 运行中:Running;> 关机中:Stopping; > 安装失败:InstallFailed; > 重启中:Rebooting;> 关机:Stopped;
  • +
  • PowerState (str) - 电源状态,on 或 off
  • +
  • RaidSupported (str) - 是否支持Raid。枚举值:Yes:支持;No:不支持。
  • +
  • Remark (str) - 物理机备注
  • +
  • SN (str) - 物理机序列号
  • +
  • Tag (str) - 业务组
  • +
  • Zone (str) - 可用区,参见 可用区列表
  • +
+
+ +
+
+describe_phost_image(req=None, **kwargs)[source]
+

DescribePHostImage - 获取物理云主机镜像列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ImageId (list) - 镜像ID
  • +
  • ImageType (str) - 镜像类别,枚举为:Base,标准镜像;默认为标准镜像。
  • +
  • Limit (int) - 返回数据长度,默认为20
  • +
  • Offset (int) - 数据偏移量,默认为0
  • +
+

Response

+
    +
  • ImageSet (list) - 见 PHostImageSet 模型定义
  • +
  • TotalCount (int) - 满足条件的镜像总数
  • +
+

Response Model

+

PHostImageSet

+
    +
  • ImageId (str) - 镜像ID
  • +
  • ImageName (str) - 镜像名称
  • +
  • OsName (str) - 操作系统名称
  • +
  • OsType (str) - 操作系统类型
  • +
+
+ +
+
+describe_phost_tags(req=None, **kwargs)[source]
+

DescribePHostTags - 获取物理机tag列表(业务组)

+

Request

+ +

Response

+
    +
  • TagSet (list) - 见 PHostTagSet 模型定义
  • +
  • TotalCount (int) - Tag的个数
  • +
+

Response Model

+

PHostTagSet

+
    +
  • Tag (str) - 业务组名称
  • +
  • TotalCount (int) - 该业务组中包含的主机个数
  • +
+
+ +
+
+get_phost_price(req=None, **kwargs)[source]
+

GetPHostPrice - 获取物理机价格列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ChargeType (str) - (Required) 计费模式,枚举值为: Year/Month/Trial/Dynamic
  • +
  • Count (int) - (Required) 购买数量,范围[1-5]
  • +
  • Quantity (int) - (Required) 购买时长,1-10个月或1-10年
  • +
  • Cluster (str) - 网络环境,可选千兆:1G ,万兆:10G
  • +
  • Type (str) - 默认为:DB(数据库型)
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PriceSet (list) - 见 PHostPriceSet 模型定义
  • +
+

Response Model

+

PHostPriceSet

+
    +
  • ChargeType (str) - Year/Month/Trial/Dynamic
  • +
  • Price (float) - 价格, 单位:元, 保留小数点后两位有效数字
  • +
+
+ +
+
+modify_phost_info(req=None, **kwargs)[source]
+

ModifyPHostInfo - 更改物理机信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PHostId (str) - (Required) 物理机资源ID
  • +
  • Name (str) - 物理机名称,默认不更改
  • +
  • Remark (str) - 物理机备注,默认不更改
  • +
  • Tag (str) - 业务组,默认不更改
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+poweroff_phost(req=None, **kwargs)[source]
+

PoweroffPHost - 断电物理云主机

+

Request

+ +

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+reboot_phost(req=None, **kwargs)[source]
+

RebootPHost - 重启物理机

+

Request

+ +

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+reinstall_phost(req=None, **kwargs)[source]
+

ReinstallPHost - 重装物理机操作系统

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PHostId (str) - (Required) PHost资源ID
  • +
  • Password (str) - (Required) 密码
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • ImageId (str) - 镜像Id,参考镜像列表,默认使用原镜像
  • +
  • Name (str) - 物理机名称,默认不更改
  • +
  • Raid (str) - 不保留数据盘重装,可选Raid
  • +
  • Remark (str) - 物理机备注,默认为不更改。
  • +
  • ReserveDisk (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes
  • +
  • Tag (str) - 业务组,默认不更改。
  • +
+

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+start_phost(req=None, **kwargs)[source]
+

StartPHost - 启动物理机

+

Request

+ +

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+
+terminate_phost(req=None, **kwargs)[source]
+

TerminatePHost - 删除物理云主机

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PHostId (str) - (Required) PHost资源ID
  • +
  • ReleaseEIP (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • PHostId (str) - PHost 的资源ID
  • +
+
+ +
+ +
+
+

USMS

+
+
+class ucloud.services.usms.client.USMSClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_usms_signature(req=None, **kwargs)[source]
+

CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • CertificateType (int) - (Required) 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书;
  • +
  • Description (str) - (Required) 短信签名申请原因
  • +
  • File (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB
  • +
  • SigContent (str) - (Required) 短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加
  • +
  • SigPurpose (int) - (Required) 签名用途,0-自用,1-他用;
  • +
  • SigType (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称;
  • +
  • ProxyFile (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项;
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
  • SigContent (str) - 短信签名名称
  • +
  • SigId (str) - 短信签名ID(短信签名申请时的工单ID)
  • +
+
+ +
+
+create_usms_template(req=None, **kwargs)[source]
+

CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Purpose (int) - (Required) 短信模板用途类型:1-验证码类短信模板;2-系统通知类短信模板;3-会员推广类短信模板;
  • +
  • Template (str) - (Required) 短信模板内容,说明如下:字数不超过500,每个中文、符号、英文、数组等都计为一个字;模板中的变量填写格式:{N},其中N为大于1的整数,有多个参数时,建议N从1开始顺次,例如:{1}、{2}等;短信模板禁止仅包括变量的情况;
  • +
  • TemplateName (str) - (Required) 短信模板名称,不超过32个字符,每个中文、符号、英文、数字等都计为1个字。
  • +
  • Remark (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。
  • +
  • UnsubscribeInfo (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
  • TemplateId (str) - 短信模板ID(短信模板申请时的工单ID)
  • +
+
+ +
+
+delete_usms_signature(req=None, **kwargs)[source]
+

DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • SigIds (list) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1…SigIds.N方式传入
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
+
+ +
+
+delete_usms_template(req=None, **kwargs)[source]
+

DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • TemplateIds (list) - (Required) 模板ID(也即短信模板申请时的工单ID),支持以数组的方式,举例,以TemplateIds.0、TemplateIds.1…TemplateIds.N方式传入
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
+
+ +
+
+get_usms_send_receipt(req=None, **kwargs)[source]
+

GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SessionNoSet (list) - (Required) 发送短信时返回的SessionNo集合,SessionNoSet.0,SessionNoSet.1….格式
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Data (list) - 见 ReceiptPerSession 模型定义
  • +
  • Message (str) - 错误描述
  • +
+

Response Model

+

ReceiptPerPhone

+
    +
  • CostCount (int) - 消耗短信条数
  • +
  • Phone (str) - 手机号码
  • +
  • ReceiptDesc (str) - 回执结果描述
  • +
  • ReceiptResult (str) - 回执结果
  • +
  • ReceiptTime (int) - 回执返回时间
  • +
+

ReceiptPerSession

+
    +
  • ReceiptSet (list) - 见 ReceiptPerPhone 模型定义
  • +
  • SessionNo (str) - 发送短信时返回的SessionNo
  • +
+
+ +
+
+query_usms_signature(req=None, **kwargs)[source]
+

QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • SigContent (str) - 签名内容;签名ID和签名至少需填写1项;
  • +
  • SigId (str) - 已申请的短信签名ID(短信签名申请时的工单ID);签名ID和签名至少需填写1项;
  • +
+

Response

+
    +
  • Data (dict) - 见 OutSignature 模型定义
  • +
  • Message (str) - 发生错误时,表示具体错误描述
  • +
+

Response Model

+

OutSignature

+
    +
  • ErrDesc (str) - 签名审核失败原因
  • +
  • SigContent (str) - 签名内容
  • +
  • SigId (str) - 签名ID
  • +
  • Status (int) - 签名状态。0-待审核 1-审核中 2-审核通过 3-审核未通过 4-被禁用
  • +
+
+ +
+
+query_usms_template(req=None, **kwargs)[source]
+

QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • TemplateId (str) - (Required) 模板ID
  • +
+

Response

+
    +
  • Data (dict) - 见 OutTemplate 模型定义
  • +
  • Message (str) - 当RetCode不为0时,Message中显示具体错误描述
  • +
+

Response Model

+

OutTemplate

+
    +
  • CreateTime (int) - 创建时间
  • +
  • ErrDesc (str) - 审核失败原因
  • +
  • Purpose (int) - 模板类型,选项:1-验证码类 2-通知类 3-会员推广类
  • +
  • Remark (str) - 模板说明
  • +
  • Status (int) - 短信模板状态;状态说明:0-待审核,1-审核中,2-审核通过,3-审核未通过,4-被禁用
  • +
  • Template (str) - 短信模板内容
  • +
  • TemplateId (str) - 短信模板ID
  • +
  • TemplateName (str) - 短信模板名称
  • +
  • UnsubscribeInfo (str) - 退订信息;一般填写方式“回T退订”,当purpose为3(也即会员推广类)时,为必填项
  • +
+
+ +
+
+send_usms_message(req=None, **kwargs)[source]
+

SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • PhoneNumbers (list) - (Required) 电话号码数组,电话号码格式为(60)1xxxxxxxx,()中为国际长途区号(如中国为86或0086,两种格式都支持),后面为电话号码.若不传入国际区号,如1851623xxxx,则默认为国内手机号
  • +
  • TemplateId (str) - (Required) 模板ID。若指定的模板ID审核未通过(status不等于2)则不允许发送
  • +
  • TemplateParams (list) - (Required) 模板参数数组,以TempalteParams.0,TempalteParams.1.。。格式。若模板ID指定的模板无可变参数,则不传入该参数。模板参数个数与模板不匹配,则不允许发送
  • +
  • SigContent (str) - 使用的签名,如果不输入则使用默认签名,若没有申请默认签名不允许发送;若输入的签名没有申请,则无法发送
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Action (str) - 操作名称
  • +
  • Message (str) - 发生错误时表示错误描述
  • +
  • RetCode (int) - 返回码
  • +
  • SessionNo (str) - 本次提交发送的短信的唯一ID,可根据该值查询本次发送的短信列表
  • +
+
+ +
+
+update_usms_signature(req=None, **kwargs)[source]
+

UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • File (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB
  • +
  • SigContent (str) - (Required) 新的短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加
  • +
  • SigId (str) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1…SigIds.N方式传入
  • +
  • SigPurpose (int) - (Required) 签名用途,0-自用,1-他用;
  • +
  • SigType (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称;
  • +
  • CertificateType (int) - 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书;
  • +
  • ProxyFile (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项;
  • +
+

Response

+
    +
  • Message (str) - 返回状态码描述,如果操作成功,默认返回为空
  • +
+
+ +
+
+update_usms_template(req=None, **kwargs)[source]
+

UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Template (str) - (Required) 新的模板内容。模板名称和模板内容必须提供一个,否则会报错。小于等于600个字
  • +
  • TemplateId (str) - (Required) 短信模板ID
  • +
  • Remark (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。
  • +
  • TemplateName (str) - 新的模板名称。小于等于32个字,每个中文、英文、数组、符合都计为一个字
  • +
  • UnsubscribeInfo (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T
  • +
  • Zone (str) - 可用区。参见 可用区列表
  • +
+

Response

+
    +
  • Message (str) - 发生错误时表示错误描述
  • +
+
+ +
+ +
+
+

VPC

+
+
+class ucloud.services.vpc.client.VPCClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+add_vpc_network(req=None, **kwargs)[source]
+

AddVPCNetwork - 添加VPC网段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Network (list) - (Required) 增加网段
  • +
  • VPCId (str) - (Required) 源VPC短ID
  • +
+

Response

+
+ +
+
+associate_route_table(req=None, **kwargs)[source]
+

AssociateRouteTable - 绑定子网的路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 路由表ID,仅限自定义路由表
  • +
  • SubnetId (str) - (Required) 子网ID
  • +
+

Response

+
+ +
+
+clone_route_table(req=None, **kwargs)[source]
+

CloneRouteTable - 根据一张现有路由表复制一张新的路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 被克隆的路由表ID
  • +
+

Response

+
+ +
+
+create_route_table(req=None, **kwargs)[source]
+

CreateRouteTable - 创建路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • VPCId (str) - (Required) VPC ID
  • +
  • Name (str) - 路由表名称 Default RouteTable
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组
  • +
+

Response

+
    +
  • RouteTableId (str) - 路由表ID
  • +
+
+ +
+
+create_subnet(req=None, **kwargs)[source]
+

CreateSubnet - 创建子网

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Subnet (str) - (Required) 子网网络地址,例如192.168.0.0
  • +
  • VPCId (str) - (Required) VPC资源ID
  • +
  • Netmask (int) - 子网网络号位数,默认为24
  • +
  • Remark (str) - 备注
  • +
  • SubnetName (str) - 子网名称,默认为Subnet
  • +
  • Tag (str) - 业务组名称,默认为Default
  • +
+

Response

+
    +
  • SubnetId (str) - 子网ID
  • +
+
+ +
+
+create_vpc(req=None, **kwargs)[source]
+

CreateVPC - 创建VPC

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Name (str) - (Required) VPC名称
  • +
  • Network (list) - (Required) VPC网段
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组名称
  • +
  • Type (int) - VPC类型
  • +
+

Response

+
    +
  • VPCId (str) - VPC资源Id
  • +
+
+ +
+
+create_vpc_intercom(req=None, **kwargs)[source]
+

CreateVPCIntercom - 新建VPC互通关系

+

Request

+
    +
  • ProjectId (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 源VPC所在地域。 参见 地域和可用区列表
  • +
  • DstVPCId (str) - (Required) 目的VPC短ID
  • +
  • VPCId (str) - (Required) 源VPC短ID
  • +
  • DstProjectId (str) - 目的VPC项目ID。默认与源VPC同项目。
  • +
  • DstRegion (str) - 目的VPC所在地域,默认与源VPC同地域。
  • +
+

Response

+
+ +
+
+delete_route_table(req=None, **kwargs)[source]
+

DeleteRouteTable - 删除自定义路由表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 路由ID
  • +
+

Response

+
+ +
+
+delete_subnet(req=None, **kwargs)[source]
+

DeleteSubnet - 删除子网

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SubnetId (str) - (Required) 子网ID
  • +
+

Response

+
+ +
+
+delete_vpc(req=None, **kwargs)[source]
+

DeleteVPC - 删除VPC

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • VPCId (str) - (Required) VPC资源Id
  • +
+

Response

+
+ +
+
+delete_vpc_intercom(req=None, **kwargs)[source]
+

DeleteVPCIntercom - 删除VPC互通关系

+

Request

+
    +
  • ProjectId (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 源VPC所在地域。 参见 地域和可用区列表
  • +
  • DstVPCId (str) - (Required) 目的VPC短ID
  • +
  • VPCId (str) - (Required) 源VPC短ID
  • +
  • DstProjectId (str) - 目的VPC所在项目ID,默认为源VPC所在项目ID
  • +
  • DstRegion (str) - 目的VPC所在地域,默认为源VPC所在地域
  • +
+

Response

+
+ +
+
+describe_route_table(req=None, **kwargs)[source]
+

DescribeRouteTable - 获取路由表详细信息(包括路由策略)

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - 业务组ID
  • +
  • Limit (int) - Limit
  • +
  • OffSet (int) - OffSet
  • +
  • RouteTableId (str) - 路由表ID
  • +
  • VPCId (str) - VPC ID
  • +
+

Response

+
    +
  • RouteTables (list) - 见 RouteTableInfo 模型定义
  • +
  • TotalCount (int) - RouteTables字段的数量
  • +
+

Response Model

+

RouteRuleInfo

+
    +
  • DstAddr (str) - 目的地址,比如10.10.8/24
  • +
  • NexthopId (str) - 路由下一跳ID,比如uvnet-3eljvj
  • +
  • NexthopType (str) - 下一跳类型,比如local、vnet
  • +
  • Remark (str) - 路由规则备注
  • +
  • RouteRuleId (str) - 规则ID
  • +
  • RuleType (int) - 路由规则类型(0表示系统路由,1表示自定义路由)
  • +
+

RouteTableInfo

+
    +
  • CreateTime (int) - 创建时间戳
  • +
  • Remark (str) - 路由表备注
  • +
  • RouteRules (list) - 见 RouteRuleInfo 模型定义
  • +
  • RouteTableId (str) - 路由表ID
  • +
  • RouteTableType (int) - 路由表类型,1为默认,0为自定义
  • +
  • SubnetCount (str) - 绑定了该路由表的子网数量
  • +
  • Tag (str) - 业务组
  • +
  • VPCId (str) - 路由表所属vpc
  • +
  • VPCName (str) - vpc名称
  • +
+
+ +
+
+describe_subnet(req=None, **kwargs)[source]
+

DescribeSubnet - 获取子网信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BusinessId (str) - 业务组
  • +
  • Limit (int) - 列表长度,默认为20
  • +
  • Offset (int) - 偏移量,默认为0
  • +
  • RouteTableId (str) - 路由表Id
  • +
  • ShowAvailableIPs (bool) - 是否返回子网的可用IP数,true为是,false为否,默认不返回
  • +
  • SubnetId (str) - 子网id,适用于一次查询一个子网信息
  • +
  • SubnetIds (list) - 子网id数组,适用于一次查询多个子网信息
  • +
  • Tag (str) - 业务组名称,默认为Default
  • +
  • VPCId (str) - VPC资源id
  • +
+

Response

+
    +
  • DataSet (list) - 见 SubnetInfo 模型定义
  • +
  • TotalCount (int) - 子网总数量
  • +
+

Response Model

+

SubnetInfo

+
    +
  • AvailableIPs (int) - 可用IP数量
  • +
  • CreateTime (int) - 创建时间
  • +
  • Gateway (str) - 子网网关
  • +
  • HasNATGW (bool) - 是否有natgw
  • +
  • IPv6Network (str) - 子网关联的IPv6网段
  • +
  • Netmask (str) - 子网掩码
  • +
  • Remark (str) - 备注
  • +
  • RouteTableId (str) - 路由表Id
  • +
  • Subnet (str) - 子网网段
  • +
  • SubnetId (str) - 子网Id
  • +
  • SubnetName (str) - 子网名称
  • +
  • SubnetType (int) - 子网类型
  • +
  • Tag (str) - 业务组
  • +
  • VPCId (str) - VPCId
  • +
  • VPCName (str) - VPC名称
  • +
  • Zone (str) - 可用区名称
  • +
+
+ +
+
+describe_subnet_resource(req=None, **kwargs)[source]
+

DescribeSubnetResource - 展示子网资源 +Request +- ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口 +- Region (str) - (Config) 地域。 参见 地域和可用区列表 +- SubnetId (str) - (Required) 子网id +- Limit (int) - 单页返回数据长度,默认为20 +- Offset (int) - 列表起始位置偏移量,默认为0 +- ResourceType (str) - 资源类型,默认为全部资源类型。枚举值为:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP.

+

Response +- DataSet (list) - 见 SubnetResource 模型定义 +- TotalCount (int) - 总数

+

Response Model

+

SubnetResource

+
    +
  • IP (str) - 资源ip
  • +
  • IPv6Address (str) - 资源的IPv6地址
  • +
  • Name (str) - 资源名称
  • +
  • ResourceId (str) - 资源Id
  • +
  • ResourceType (str) - 资源类型。对应的资源类型:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP.
  • +
  • SubResourceId (str) - 资源绑定的虚拟网卡的实例ID
  • +
  • SubResourceName (str) - 资源绑定的虚拟网卡的实例名称
  • +
  • SubResourceType (str) - 资源绑定的虚拟网卡的类型
  • +
+
+ +
+
+describe_vpc(req=None, **kwargs)[source]
+

DescribeVPC - 获取VPC信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) -
  • +
  • Offset (int) -
  • +
  • Tag (str) - 业务组名称
  • +
  • VPCIds (list) - VPCId
  • +
+

Response

+
    +
  • DataSet (list) - 见 VPCInfo 模型定义
  • +
+

Response Model

+

VPCNetworkInfo

+
    +
  • Network (str) - vpc地址空间
  • +
  • SubnetCount (int) - 地址空间中子网数量
  • +
+

VPCInfo

+
    +
  • CreateTime (int) -
  • +
  • IPv6Network (str) - VPC关联的IPv6网段
  • +
  • Name (str) -
  • +
  • Network (list) -
  • +
  • NetworkInfo (list) - 见 VPCNetworkInfo 模型定义
  • +
  • OperatorName (str) - VPC关联的IPv6网段所属运营商
  • +
  • SubnetCount (int) -
  • +
  • Tag (str) -
  • +
  • UpdateTime (int) -
  • +
  • VPCId (str) - VPCId
  • +
+
+ +
+
+describe_vpc_intercom(req=None, **kwargs)[source]
+

DescribeVPCIntercom - 获取VPC互通信息

+

Request

+
    +
  • ProjectId (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 源VPC所在地域。 参见 地域和可用区列表
  • +
  • VPCId (str) - (Required) VPC短ID
  • +
  • DstProjectId (str) - 目的项目ID,默认为全部项目
  • +
  • DstRegion (str) - 目的VPC所在地域,默认为全部地域
  • +
+

Response

+
    +
  • DataSet (list) - 见 VPCIntercomInfo 模型定义
  • +
+

Response Model

+

VPCIntercomInfo

+
    +
  • DstRegion (str) - 所属地域
  • +
  • Name (str) - VPC名字
  • +
  • Network (list) - VPC的地址空间
  • +
  • ProjectId (str) - 项目Id
  • +
  • Tag (str) - 业务组(未分组显示为 Default)
  • +
  • VPCId (str) - VPCId
  • +
+
+ +
+
+modify_route_rule(req=None, **kwargs)[source]
+

ModifyRouteRule - 路由策略增、删、改

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteRule (list) - (Required) 格式: RouteRuleId | 目的网段 | 下一跳类型 | 下一跳 |优先级| 备注 | 增、删、改标志 (下一跳类型为instance或者vip,下一跳为云主机id或者vip的id,优先级使用0,动作标志为add/delete/update) 。”添加”示例: test_id | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| add (添加的RouteRuleId填任意非空字符串) 。”删除”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| delete (RouteRuleId来自DescribeRouteTable中) 。“修改”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-cjksa2 | 0 | Default Route Rule| update (RouteRuleId来自DescribeRouteTable中)
  • +
  • RouteTableId (str) - (Required) 通过DescribeRouteTable拿到
  • +
+

Response

+
+ +
+
+update_route_table_attribute(req=None, **kwargs)[source]
+

UpdateRouteTableAttribute - 更新路由表基本信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • RouteTableId (str) - (Required) 路由表ID
  • +
  • Name (str) - 名称
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 业务组名称
  • +
+

Response

+
+ +
+
+update_subnet_attribute(req=None, **kwargs)[source]
+

UpdateSubnetAttribute - 更新子网信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • SubnetId (str) - (Required) 子网ID
  • +
  • Name (str) - 子网名称(如果Name不填写,Tag必须填写)
  • +
  • Tag (str) - 业务组名称(如果Tag不填写,Name必须填写)
  • +
+

Response

+
+ +
+
+update_vpc_network(req=None, **kwargs)[source]
+

UpdateVPCNetwork - 更新VPC网段

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Network (list) - (Required) 需要保留的VPC网段。当前仅支持删除VPC网段,添加网段请参考 AddVPCNetwork
  • +
  • VPCId (str) - (Required) VPC的ID
  • +
+

Response

+
    +
  • Message (str) - 错误信息
  • +
+
+ +
+ +
+
+

IPSecVPN

+
+
+class ucloud.services.ipsecvpn.client.IPSecVPNClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+describe_remote_vpn_gateway(req=None, **kwargs)[source]
+

DescribeRemoteVPNGateway - 获取客户VPN网关信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 数据分页值, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • RemoteVPNGatewayIds (list) - 客户VPN网关的资源ID,例如RemoteVPNGatewayIds.0代表希望获取客户VPN网关1的信息,RemoteVPNGatewayIds.1代表客户VPN网关2,如果为空,则返回当前Region中所有客户VPN网关实例的信息
  • +
  • Tag (str) - 业务组名称,若指定则返回业务组下所有客户VPN网关信息
  • +
+

Response

+
    +
  • DataSet (list) - 见 RemoteVPNGatewayDataSet 模型定义
  • +
  • TotalCount (int) - 符合条件的客户VPN网关总数
  • +
+

Response Model

+

RemoteVPNGatewayDataSet

+
    +
  • ActiveTunnels (str) - 活跃的隧道id
  • +
  • CreateTime (int) - 创建时间
  • +
  • Remark (str) - 备注
  • +
  • RemoteVPNGatewayAddr (str) - 客户网关IP地址
  • +
  • RemoteVPNGatewayId (str) - 客户网关ID
  • +
  • RemoteVPNGatewayName (str) - 客户网关名称
  • +
  • Tag (str) - 用户组
  • +
  • TunnelCount (int) - 活跃的隧道数量
  • +
+
+ +
+
+describe_vpn_tunnel(req=None, **kwargs)[source]
+

DescribeVPNTunnel - 获取VPN隧道信息

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 数据分页值, 默认为20
  • +
  • Offset (int) - 数据偏移量, 默认为0
  • +
  • Tag (str) - 业务组名称,若指定则返回指定的业务组下的所有VPN网关的信息
  • +
  • VPNTunnelIds (list) - VPN隧道的资源ID,例如VPNTunnelIds.0代表希望获取信息的VPN隧道1,VPNTunneIds.1代表VPN隧道2,如果为空,则返回当前Region中所有的VPN隧道实例
  • +
+

Response

+
    +
  • DataSet (list) - 见 VPNTunnelDataSet 模型定义
  • +
  • TotalCount (int) - VPN隧道总数
  • +
+

Response Model

+

IPSecData

+
    +
  • IPSecAuthenticationAlgorithm (str) - IPSec通道中使用的认证算法
  • +
  • IPSecEncryptionAlgorithm (str) - IPSec通道中使用的加密算法
  • +
  • IPSecLocalSubnetIds (list) - 指定VPN连接的本地子网,用逗号分隔
  • +
  • IPSecPFSDhGroup (str) - 是否开启PFS功能,Disable表示关闭,数字表示DH组
  • +
  • IPSecProtocol (str) - 使用的安全协议,ESP或AH
  • +
  • IPSecRemoteSubnets (list) - 指定VPN连接的客户网段,用逗号分隔
  • +
  • IPSecSALifetime (str) - IPSec中SA的生存时间
  • +
  • IPSecSALifetimeBytes (str) - IPSec中SA的生存时间(以字节计)
  • +
+

IKEData

+
    +
  • IKEAuthenticationAlgorithm (str) - IKE认证算法
  • +
  • IKEDhGroup (str) - IKEDH组
  • +
  • IKEEncryptionAlgorithm (str) - IKE加密算法
  • +
  • IKEExchangeMode (str) - IKEv1协商模式
  • +
  • IKELocalId (str) - IKE本地ID标识
  • +
  • IKEPreSharedKey (str) - IKE预共享秘钥
  • +
  • IKERemoteId (str) - IKE对端ID标识
  • +
  • IKESALifetime (str) - IKE秘钥生存时间
  • +
  • IKEVersion (str) - IKE版本
  • +
+

VPNTunnelDataSet

+
    +
  • CreateTime (int) - 创建时间
  • +
  • IKEData (dict) - 见 IKEData 模型定义
  • +
  • IPSecData (dict) - 见 IPSecData 模型定义
  • +
  • Remark (str) - 备注
  • +
  • RemoteVPNGatewayId (str) - 对端网关Id
  • +
  • RemoteVPNGatewayName (str) - 对端网关名字
  • +
  • Tag (str) - 用户组
  • +
  • VPCId (str) - 所属VPCId
  • +
  • VPCName (str) - 所属VOC名字
  • +
  • VPNGatewayId (str) - 所属VPN网关id
  • +
  • VPNGatewayName (str) - VPN网关名字
  • +
  • VPNTunnelId (str) - 隧道id
  • +
  • VPNTunnelName (str) - 隧道名称
  • +
+
+ +
+ +
+
+

UCloudStack

+
+
+class ucloud.services.ucloudstack.client.UCloudStackClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+allocate_eip(req=None, **kwargs)[source]
+

AllocateEIP - 申请外网IP

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • Bandwidth (int) - (Required) 带宽,默认值1,默认范围1~100
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • Name (str) - (Required) 名称
  • +
  • OperatorName (str) - (Required) 线路。目前支持Bgp
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • EIPID (str) - 申请的EIP的ID
  • +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+attach_disk(req=None, **kwargs)[source]
+

AttachDisk - 绑定硬盘

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • DiskID (str) - (Required) 硬盘ID
  • +
  • ResourceID (str) - (Required) 绑定的资源ID
  • +
  • ResourceType (str) - (Required) 绑定的资源类型,枚举值:VM,标识虚拟机
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+bind_alarm_template(req=None, **kwargs)[source]
+

BindAlarmTemplate - 绑定告警模板

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • AlarmTemplateID (str) - (Required) 告警模板ID
  • +
  • ResourceIDs (list) - (Required) 【数组】告警模板ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性IP
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+bind_eip(req=None, **kwargs)[source]
+

BindEIP - 绑定UCoudStack外网IP

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;中国
  • +
  • EIPID (str) - (Required) 外网IP的ID
  • +
  • ResourceID (str) - (Required) 资源ID
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回描述
  • +
+
+ +
+
+bind_physical_ip(req=None, **kwargs)[source]
+

BindPhysicalIP - 绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • PhysicalIPID (str) - (Required) 物理IP的ID
  • +
  • ResourceID (str) - (Required) 资源ID
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回描述
  • +
+
+ +
+
+bind_security_group(req=None, **kwargs)[source]
+

BindSecurityGroup - 绑定安全组

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • ResourceID (str) - (Required) 绑定的资源ID。调用方式举例:ResourceID=“one-id”。
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • NICID (str) - 网卡ID
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+clone_disk(req=None, **kwargs)[source]
+

CloneDisk - 克隆硬盘

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • Name (str) - (Required) 名称
  • +
  • SrcID (str) - (Required) 源硬盘ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • DiskID (str) - 克隆出的硬盘ID
  • +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+create_certificate(req=None, **kwargs)[source]
+

CreateCertificate - 创建证书

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Certificate (str) - (Required) 证书内容
  • +
  • CertificateType (str) - (Required) 证书类型,枚举值[“ServerCrt”,”CACrt”]。分别表示服务器证书和CA证书。只有在双向认证的时候才需要CA证书
  • +
  • Name (str) - (Required) 证书名称
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • PrivateKey (str) - 私钥内容,服务器证书必传,CA证书不用传递
  • +
  • Remark (str) - 证书描述
  • +
+

Response

+
    +
  • CertificateID (str) - 证书ID
  • +
  • Message (str) - 错误描述
  • +
+
+ +
+
+create_custom_image(req=None, **kwargs)[source]
+

CreateCustomImage - 创建自制镜像

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ImageName (str) - (Required) 镜像名称
  • +
  • VMID (str) - (Required) 虚拟机ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • ImageDescription (str) - 镜像描述。
  • +
+

Response

+
    +
  • ImageID (str) - 创建的自制镜像ID
  • +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+create_disk(req=None, **kwargs)[source]
+

CreateDisk - 创建硬盘

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • DiskSpace (int) - (Required) 磁盘大小
  • +
  • Name (str) - (Required) 磁盘名称
  • +
  • SetType (str) - (Required) 磁盘类型。例如:Normal,SSD
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • DiskID (str) - 创建的磁盘ID
  • +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+create_lb(req=None, **kwargs)[source]
+

CreateLB - 创建负载均衡

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • LBType (str) - (Required) 枚举值。LAN:内网,WAN:外网
  • +
  • Name (str) - (Required) 名称。
  • +
  • SubnetID (str) - (Required) LB 实例所在的子网 ID 。
  • +
  • VMType (str) - (Required) 运行负载均衡实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口)
  • +
  • VPCID (str) - (Required) LB实例所在的 VPC ID 。
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • EIPID (str) - 外网IP的ID,创建外网LB时为必需
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
  • Remark (str) - 描述。
  • +
  • SGID (str) - 安全组ID,创建外网LB时为必需
  • +
+

Response

+
    +
  • LBID (str) - 返回创建的负载均衡ID
  • +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+create_natgw(req=None, **kwargs)[source]
+

CreateNATGW - 创建NAT网关

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • EIPID (str) - (Required) 外网IP的ID
  • +
  • Name (str) - (Required) 名称。
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • SubnetID (str) - (Required) NAT网关实例所在的子网 ID
  • +
  • VMType (str) - (Required) 运行NAT网关实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口)
  • +
  • VPCID (str) - (Required) NAT网关实例所在的 VPC ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
  • Remark (str) - 描述
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
  • NATGWID (str) - 返回创建的NAT网关ID
  • +
+
+ +
+
+create_natgw_rule(req=None, **kwargs)[source]
+

CreateNATGWRule - 添加NAT网关白名单

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • BindResourceID (str) - (Required) 绑定的虚拟机资源ID
  • +
  • NATGWID (str) - (Required) NAT网关ID
  • +
  • NATGWType (str) - (Required) NAT的类型。枚举值:SNAT,DNAT
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
  • RuleID (str) - 白名单ID
  • +
+
+ +
+
+create_physical_ip(req=None, **kwargs)[source]
+

CreatePhysicalIP - 创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • Name (str) - (Required) 物理IP名称,限制字符长度30
  • +
  • OperatorName (str) - (Required) 物理IP线路
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Remark (str) - 描述
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
  • PhysicalIPID (str) - 返回创建的物理IP的ID
  • +
+
+ +
+
+create_rs(req=None, **kwargs)[source]
+

CreateRS - 为负载均衡的 VServer 添加后端服务节点。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • BindResourceID (str) - (Required) 服务节点的资源 ID ,仅支持添加与 LB 相同 VPC 的虚拟机资源
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • Port (int) - (Required) 服务节点暴露的服务端口号
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Weight (int) - (Required) 服务节点的权重
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
  • RSID (str) - 返回创建的RSID
  • +
+
+ +
+
+create_security_group(req=None, **kwargs)[source]
+

CreateSecurityGroup - 创建安全组

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Name (str) - (Required) 名称;
  • +
  • Rule (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1”
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Remark (str) - 描述;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
  • SGID (str) - 创建的安全组ID
  • +
+
+ +
+
+create_security_group_rule(req=None, **kwargs)[source]
+

CreateSecurityGroupRule - 创建安全组规则

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Rules (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1”
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
  • SGRuleID (str) - 创建的安全组规则ID
  • +
+
+ +
+
+create_snapshot(req=None, **kwargs)[source]
+

CreateSnapshot - 创建硬盘快照

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • DiskID (str) - (Required) 硬盘ID,输入“有效”状态的ID
  • +
  • Name (str) - (Required) 快照名称,限制字符长度30
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
  • Remark (str) - 描述,限制字符长度100
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
  • SnapshotID (str) - 创建的快照ID
  • +
+
+ +
+
+create_subnet(req=None, **kwargs)[source]
+

CreateSubnet - 创建子网

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Name (str) - (Required) 名称;
  • +
  • Network (str) - (Required) 网段。列如:10.0.0.0/16;
  • +
  • VPCID (str) - (Required) 所属VPCID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Remark (str) - 描述;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
  • SubnetID (str) - 创建Subnet的ID;
  • +
+
+ +
+
+create_user(req=None, **kwargs)[source]
+

CreateUser - 管理员添加账号

+

Request

+
    +
  • PassWord (str) - (Required) 账号密码。
  • +
  • UserEmail (str) - (Required) 账号邮箱。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
  • UserID (int) - 账户ID
  • +
+
+ +
+
+create_vm_instance(req=None, **kwargs)[source]
+

CreateVMInstance - 创建虚拟机

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • BootDiskSetType (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD;
  • +
  • CPU (int) - (Required) CPU个数,如1,2,4,8,16,32,64等。
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • DataDiskSetType (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD;
  • +
  • ImageID (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。
  • +
  • Memory (int) - (Required) 内存容量,如1024,2048,4096,8192,16384,32768,65535等。
  • +
  • Name (str) - (Required) 虚拟机名称。可输入如:myVM。名称只能包含中英文、数字以及- _ .且1-30个字符。
  • +
  • Password (str) - (Required) 密码。可输入如:ucloud.cn。密码长度限6-30个字符;需要同时包含两项或以上(大写字母/小写字母/数字/特殊符号);windows不能包含用户名(administrator)中超过2个连续字符的部分。
  • +
  • SubnetID (str) - (Required) 子网 ID。
  • +
  • VMType (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD;
  • +
  • VPCID (str) - (Required) VPC ID。
  • +
  • WANSGID (str) - (Required) 外网安全组 ID。输入“有效”状态的安全组的ID。
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Bandwidth (str) - 带宽
  • +
  • DataDiskSpace (int) - 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。
  • +
  • GPU (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配.
  • +
  • IPVersion (str) - 外网IP版本,默认IPv4
  • +
  • InternalIP (str) - 指定内网IP。输入有效的指定内网 IP。默认为系统自动分配内网 IP。
  • +
  • InternetIP (str) - 指定外网IP
  • +
  • LANSGID (str) - 内网安全组 ID。输入“有效”状态的安全组的ID。
  • +
  • OperatorName (str) - 线路
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • DiskID (str) - 返回创建数据盘的 ID
  • +
  • EIPID (str) - 返回创建外网IP的 ID
  • +
  • Message (str) - 返回信息描述。
  • +
  • VMID (str) - 返回创建虚拟机的 ID
  • +
+
+ +
+
+create_vpc(req=None, **kwargs)[source]
+

CreateVPC - 创建VPC

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Name (str) - (Required) 名称;
  • +
  • Network (str) - (Required) 网段。例如:10.0.0.0/16;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Remark (str) - 描述;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
  • VPCID (str) - 创建的VPCID;
  • +
+
+ +
+
+create_vs(req=None, **kwargs)[source]
+

CreateVS - 创建负载均衡VServer

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • HealthcheckType (str) - (Required) 健康检查类型,枚举值,Port:端口,Path:域名。TCP和UDP协议只支持Port类型。
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • Port (int) - (Required) VServer 的监听端口。端口范围为 1~65535 ,其中 323、9102、9103、9104、9105、60909、60910 被系统占用。
  • +
  • Protocol (str) - (Required) VServer 的监听协议。枚举值:支持 TCP、UDP、HTTP、HTTPS 四种协议转发。
  • +
  • Scheduler (str) - (Required) 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • CACertificateID (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。
  • +
  • Domain (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。
  • +
  • KeepaliveTimeout (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。
  • +
  • Path (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。
  • +
  • PersistenceKey (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。
  • +
  • PersistenceType (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。
  • +
  • SSLMode (str) - SSL认证模式,HTTPS协议下必传,取值范围[“simplex”,”duplex”]分别表示单向认证和双向认证。
  • +
  • ServerCertificateID (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS时有效。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
  • VSID (str) - 返回创建的VSID
  • +
+
+ +
+
+create_vs_policy(req=None, **kwargs)[source]
+

CreateVSPolicy - 创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • RSIDs (list) - (Required) 【数组】内容转发规则应用的服务节点的 ID,来源于 VServer 中添加的服务节点。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Domain (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。
  • +
  • Path (str) - 内容转发规则关联的请求访问路径,如 “/” 。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
  • PolicyID (str) - 返回创建的内容转发规则ID
  • +
+
+ +
+
+delete_certificate(req=None, **kwargs)[source]
+

DeleteCertificate - 删除证书

+

Request

+ +

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+delete_custom_image(req=None, **kwargs)[source]
+

DeleteCustomImage - 删除自制镜像

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ImageID (str) - (Required) 自制镜像ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_disk(req=None, **kwargs)[source]
+

DeleteDisk - 删除硬盘

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • DiskID (str) - (Required) 被删除的硬盘ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_lb(req=None, **kwargs)[source]
+

DeleteLB - 删除负载均衡

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_natgw(req=None, **kwargs)[source]
+

DeleteNATGW - 删除NAT网关

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • NATGWID (str) - (Required) NAT网关ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_natgw_rule(req=None, **kwargs)[source]
+

DeleteNATGWRule - 删除NAT网关白名单

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • NATGWID (str) - (Required) nat网关ID
  • +
  • RuleID (str) - (Required) 白名单ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_physical_ip(req=None, **kwargs)[source]
+

DeletePhysicalIP - 删除物理IP

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • PhysicalIPID (str) - (Required) 物理IP的ID
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回状态描述
  • +
+
+ +
+
+delete_rs(req=None, **kwargs)[source]
+

DeleteRS - 移除负载均衡的单个服务节点

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • RSID (str) - (Required) RServer的ID
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_security_group(req=None, **kwargs)[source]
+

DeleteSecurityGroup - 删除安全组

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
+
+ +
+
+delete_security_group_rule(req=None, **kwargs)[source]
+

DeleteSecurityGroupRule - 删除安全组规则

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • SGRuleID (str) - (Required) 安全组规则ID
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
+
+ +
+
+delete_snapshot(req=None, **kwargs)[source]
+

DeleteSnapshot - 删除快照,仅支持状态为正常的快照进行删除操作。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • SnapshotID (str) - (Required) 快照ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+delete_subnet(req=None, **kwargs)[source]
+

DeleteSubnet - 删除子网

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • SubnetID (str) - (Required) SubnetID
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
+
+ +
+
+delete_vm_instance(req=None, **kwargs)[source]
+

DeleteVMInstance - 删除虚拟机

+

Request

+
    +
  • Region (str) - (Config) 地域。 枚举值:cn,表示中国;
  • +
  • VMID (str) - (Required) 虚拟机 ID。输入有效的虚拟机 ID。
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_vpc(req=None, **kwargs)[source]
+

DeleteVPC - 删除VPC

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • VPCID (str) - (Required) ID
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
+
+ +
+
+delete_vs(req=None, **kwargs)[source]
+

DeleteVS - 删除VServer

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) VServer 监听器所属的负载均衡 ID
  • +
  • VSID (str) - (Required) 负载均衡VServer监听器ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+delete_vs_policy(req=None, **kwargs)[source]
+

DeleteVSPolicy - 删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • PolicyID (str) - (Required) 内容转发规则ID
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+describe_certificate(req=None, **kwargs)[source]
+

DescribeCertificate - 查询证书

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • CertificateIDs (list) - 证书ID列表
  • +
  • CertificateType (str) - 证书类型,枚举值[“ServerCrt”,”CACrt”]。分别表示服务器证书和CA证书。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0
  • +
+

Response

+
    +
  • Infos (list) - 见 CertificateInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
  • TotalCount (int) - 证书总个数
  • +
+

Response Model

+

BindVSInfo

+
    +
  • LBID (str) - LB ID
  • +
  • LBName (str) - LB名称
  • +
  • Port (int) - VS的端口
  • +
  • Protocol (str) - VS的协议
  • +
  • VSID (str) - VS ID
  • +
+

CertificateInfo

+
    +
  • CertificateContent (str) - 证书内容
  • +
  • CertificateID (str) - 证书ID
  • +
  • CertificateType (str) - 证书类型,枚举值[“ServerCrt”,”CACrt”]
  • +
  • CommonName (str) - 主域名
  • +
  • CreateTime (int) - 创建时间(平台创建时间)
  • +
  • ExpireTime (int) - 证书内容的过期时间
  • +
  • Fingerprint (str) - 证书指纹
  • +
  • Name (str) - 证书名
  • +
  • Privatekey (str) - 私钥内容
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 证书描述
  • +
  • SubjectAlternativeNames (list) - 备域名
  • +
  • VSInfos (list) - 见 BindVSInfo 模型定义
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_disk(req=None, **kwargs)[source]
+

DescribeDisk - 获取硬盘信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • DiskIDs (list) - 【数组】磁盘的 ID。输入有效的 ID。调用方式举例:DiskIDs.0=“one-id”、DiskIDs.1=“two-id”。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
+

Response

+
    +
  • Infos (list) - 见 DiskInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回磁盘总个数。
  • +
+

Response Model

+

DiskInfo

+
    +
  • AttachResourceID (str) - 绑定资源ID
  • +
  • ChargeType (str) - 硬盘计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • CreateTime (int) - 创建时间。时间戳
  • +
  • DiskID (str) - 硬盘ID
  • +
  • DiskStatus (str) - 硬盘状态。Creating:创建中,BeingCloned:正在被克隆中,Unbound:已解绑,Unbounding:解绑中,Bounding:绑定中,Bound:已绑定,Upgrading:升级中,Deleting:删除中,Deleted:已删除,Releasing:销毁中,Released:已销毁
  • +
  • ExpireTime (int) - 过期时间。时间戳
  • +
  • Name (str) - 名称
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 备注
  • +
  • SetType (str) - 磁盘类型。例如:Normal,SSD
  • +
  • Size (int) - 大小。单位GB
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_eip(req=None, **kwargs)[source]
+

DescribeEIP - 获取外网IP的信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • EIPIDs (list) - 【数组】外网的 ID。输入有效的 ID。调用方式举例:EIPIDs.0=“one-id”、EIPIDs.1=“two-id”
  • +
  • Limit (str) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (str) - 列表起始位置偏移量,默认为0。
  • +
+

Response

+
    +
  • Infos (list) - 见 EIPInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
  • Totalcount (int) - 返回现有外网IP总数
  • +
+

Response Model

+

EIPInfo

+
    +
  • Bandwidth (int) - 带宽大小
  • +
  • BindResourceID (str) - 绑定资源ID
  • +
  • BindResourceType (str) - 绑定资源类型
  • +
  • ChargeType (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • CreateTime (int) - 创建时间。时间戳
  • +
  • EIPID (str) - ID
  • +
  • ExpireTime (int) - 过期时间。时间戳
  • +
  • IP (str) - 外网IP
  • +
  • Name (str) - 名称
  • +
  • OperatorName (str) - 线路
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 备注
  • +
  • Status (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁,BandwidthChanging:带宽修改中
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_image(req=None, **kwargs)[source]
+

DescribeImage - 获取镜像信息,包括默认镜像和自制镜像。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • ImageIDs (list) - 【数组】镜像的 ID。输入有效的 ID。调用方式举例:ImageIDs.0=“one-id”、ImageIDs.1=“two-id”。
  • +
  • ImageType (str) - 镜像类型。枚举值:Base(基础镜像,平台默认提供的镜像),Custom(自制镜像,通过虚拟机导出的镜像) 。若该值为空,默认查询所有镜像。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
+

Response

+
    +
  • Action (str) - 操作名称
  • +
  • Infos (list) - 见 ImageInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • RetCode (int) - 返回码
  • +
  • TotalCount (int) - 返回镜像的总个数。
  • +
+

Response Model

+

ImageInfo

+
    +
  • CreateTime (int) - 创建时间。时间戳。
  • +
  • ImageID (str) - 镜像ID
  • +
  • ImageStatus (str) - 镜像状态。枚举类型:Making(创建中),Available(可用),Unavailable(不可用),Terminating(销毁中),Used(被使用中),Deleting(删除中),Deleted(已删除), Uploading(导入中)
  • +
  • ImageType (str) - 镜像类型。枚举类型:Base(基础镜像),Custom(自制镜像)。
  • +
  • Name (str) - 镜像名称
  • +
  • OSDistribution (str) - 镜像系统发行版本。例如:Centos, Ubuntu, Windows等
  • +
  • OSName (str) - 系统名称。例如:CentOS 7.4 x86_64
  • +
  • OSType (str) - 系统类型。例如:Linux, Windows,Kylin
  • +
  • Region (str) - 地域
  • +
  • SetArch (str) - 架构名称。例如:x86_64
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_lb(req=None, **kwargs)[source]
+

DescribeLB - 获取负载均衡信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • LBIDs (list) - 【数组】负载均衡的 ID。调用方式举例:LBIDs.0=“one-id”、LBIDs.1=“two-id”。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • SubnetID (str) - 子网ID
  • +
  • VPCID (str) - VPCID
  • +
+

Response

+
    +
  • Infos (list) - 见 LBInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回负载均衡总个数。
  • +
+

Response Model

+

LBInfo

+
    +
  • AlarmTemplateID (str) - 告警模板ID
  • +
  • ChargeType (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • ExpireTime (int) - 过期时间,时间戳
  • +
  • LBID (str) - 负载均衡ID
  • +
  • LBStatus (str) - 状态。Creating:创建中,Running:运行中,Deleting:删除中,Deleted:已删除
  • +
  • LBType (str) - 负载均衡类型,枚举值,WAN:外网负载均衡,LAN:内网负载均衡。
  • +
  • Name (str) - 名称
  • +
  • PrivateIP (str) - 负载均衡的内网 IP 地址,当LB为外网类型时,该值为空。
  • +
  • PublicIP (str) - 负载均衡的外网 IP 地址,当LB为内网类型时,该值为空。
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 描述
  • +
  • SGID (str) - 安全组 ID ,当LB为内网类型时,该值为空。
  • +
  • SubnetID (str) - 子网ID
  • +
  • VPCID (str) - VPCID
  • +
  • VSCount (int) - VServer的数量
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_metric(req=None, **kwargs)[source]
+

DescribeMetric - 获取资源监控信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • BeginTime (str) - (Required) 开始时间。使用unix时间戳
  • +
  • EndTime (str) - (Required) 结束时间。使用Unix时间戳
  • +
  • MetricName (list) - (Required) 监控指标。1. 获取虚拟机监控信息调用举例,MetricName.0=”CPUUtilization”、MetricName.0=”MemUsage”。虚拟机监控指标枚举值:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数;2. EIP监控指标:NetPacketIn:入包量;NetPacketOut:出包量;NICIn:入带宽;NICOut:出带宽;NICOutUsage:出带宽使用率;
  • +
  • ResourceID (str) - (Required) 资源ID
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机;EIP:弹性IP
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,中国;
  • +
+

Response

+
    +
  • Infos (list) - 见 MetricInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
  • TotalCount (int) - 返回监控信息条数
  • +
+

Response Model

+

MetricSet

+
    +
  • Timestamp (int) - 监控时间
  • +
  • Value (float) - 监控值
  • +
+

MetricInfo

+
    +
  • Infos (list) - 见 MetricSet 模型定义
  • +
  • MetricName (str) - 监控指标。虚拟机的监控指标枚举值为:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数;
  • +
+
+ +
+
+describe_natgw(req=None, **kwargs)[source]
+

DescribeNATGW - 获取NAT网关信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • NATGWIDs (list) - 【数组】NAT网关的 ID。调用方式举例:NATGWIDs.0=“one-id”、NATGWIDs.1=“two-id”。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
+

Response

+
    +
  • Infos (list) - 见 NATGWInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回NAT网关总个数
  • +
+

Response Model

+

NATGWInfo

+
    +
  • AlarmTemplateID (str) - 告警模板ID
  • +
  • ChargeType (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • EIP (str) - 虚拟IP
  • +
  • ExpireTime (int) - 过期时间,时间戳
  • +
  • NATGWID (str) - NAT网关ID
  • +
  • NATGWStatus (str) - 状态。Creating:创建中, Running:运行中, Deleting:删除中, Deleted:已删除
  • +
  • Name (str) - 名称
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 备注
  • +
  • SGID (str) - NAT网关绑定的安全组ID
  • +
  • SubnetID (str) - NAT网关实例所在的子网 ID
  • +
  • VPCID (str) - NAT网关实例所在的 VPC ID
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_natgw_rule(req=None, **kwargs)[source]
+

DescribeNATGWRule - 获取NAT网关白名单信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • NATGWID (str) - (Required) NAT网关ID
  • +
  • NATGWType (str) - (Required) NAT类型。枚举值:SNAT,DNAT
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • BindResourceIDs (list) - 【数组】NAT网关白名单资源ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • RuleIDs (list) - 【数组】NAT网关白名单ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。
  • +
+

Response

+
    +
  • Infos (list) - 见 NATGWRuleInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回NAT网关白名单资源总个数。
  • +
+

Response Model

+

NATGWRuleInfo

+
    +
  • BindResourceID (str) - 绑定的资源ID
  • +
  • BindResourceType (str) - 绑定资源的类型
  • +
  • CreateTime (int) - 创建时间,时间戳。
  • +
  • IP (str) - 白名单资源的内网IP地址
  • +
  • NATGWID (str) - NAT网关ID
  • +
  • NATGWType (str) - nat网关类型
  • +
  • Name (str) - 添加的白名单资源名称
  • +
  • RuleID (str) - 白名单ID
  • +
  • RuleStatus (str) - 状态。Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Unbound:已解绑
  • +
+
+ +
+
+describe_op_logs(req=None, **kwargs)[source]
+

DescribeOPLogs - 查询操作日志

+

Request

+
    +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • BeginTime (int) - (Required) 开始时间
  • +
  • EndTime (int) - (Required) 结束时间
  • +
  • Zone (str) - (Required) 可用区。参见 可用区列表
  • +
  • IsSuccess (str) - 是否操作成功
  • +
  • Limit (int) -
  • +
  • Offset (int) -
  • +
  • ResourceID (str) - 资源ID
  • +
  • ResourceType (str) - 资源类型
  • +
+

Response

+
    +
  • Infos (list) - 见 OPLogInfo 模型定义
  • +
  • Message (str) - 错误信息
  • +
  • TotalCount (int) - 总数
  • +
+

Response Model

+

OPLogInfo

+
    +
  • CreateTime (int) - 创建时间
  • +
  • IsSuccess (str) - 是否操作成功, Yes, No
  • +
  • OPLogsID (str) - 日志ID
  • +
  • OPName (str) - API
  • +
  • OPTime (int) - 操作时间
  • +
  • OpMessage (str) - 错误信息
  • +
  • Region (str) -
  • +
  • ResourceID (str) - 资源ID
  • +
  • ResourceType (int) - 资源类型
  • +
  • RetCode (int) - 状态码
  • +
  • UserEmail (str) - 账号邮箱
  • +
  • Zone (str) -
  • +
+
+ +
+
+describe_physical_ip(req=None, **kwargs)[source]
+

DescribePhysicalIP - 获取物理IP信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Limit (str) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (str) - 列表起始位置偏移量,默认为0。
  • +
  • PhysicalIPIDs (list) - 【数组】物理IP的 ID。输入有效的 ID。调用方式举例:PhysicalIPIDs.0=“one-id”、PhysicalIPIDs.1=“two-id”
  • +
+

Response

+
    +
  • Infos (list) - 见 PhysicalIPInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
  • TotalCount (int) - 返回现有物理IP总数
  • +
+

Response Model

+

PhysicalIPInfo

+
    +
  • BindResourceID (str) - 绑定资源ID
  • +
  • BindResourceType (str) - 绑定资源类型
  • +
  • CreateTime (int) - 创建时间。时间戳
  • +
  • IP (str) - 物理IP
  • +
  • Name (str) - 名称
  • +
  • OperatorName (str) - 线路
  • +
  • PhysicalIPID (str) - 物理IP的ID
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 备注
  • +
  • Status (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁
  • +
  • UpdateTime (int) - 过期时间。时间戳
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_recycled_resource(req=None, **kwargs)[source]
+

DescribeRecycledResource - 查询回收站资源

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • ResourceIDs (list) - 【数组】资源ID,输入“有效”的ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。
  • +
+

Response

+
    +
  • Infos (list) - 见 RecycledResourceInfo 模型定义
  • +
  • TotalCount (int) - 返回回收站资源的总个数
  • +
+

Response Model

+

RecycledResourceInfo

+
    +
  • CreateTime (int) - 创建时间
  • +
  • DeleteTime (int) - 删除时间
  • +
  • Description (str) - 描述
  • +
  • ExpireTime (int) - 过期时间
  • +
  • IsAutoTerminated (bool) - 是否自动销户
  • +
  • Name (str) - 名称
  • +
  • Region (str) - 地域
  • +
  • ResourceID (str) - 资源ID
  • +
  • ResourceType (str) - 资源类型:VM:虚拟机,Disk:硬盘,EIP:外网IP,PIP:物理IP,MySQL:数据库,Redis:缓存
  • +
  • Status (str) - 资源状态
  • +
  • WillTerminateTime (int) - 销毁时间
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_rs(req=None, **kwargs)[source]
+

DescribeRS - 获取负载均衡服务的服务节点信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • RSIDs (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。
  • +
  • VSID (str) - VServer的ID
  • +
+

Response

+
    +
  • Infos (list) - 见 RSInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回该负载均衡下VServer的总个数。
  • +
+

Response Model

+

RSInfo

+
    +
  • BindResourceID (str) - 绑定的资源ID
  • +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • IP (str) - 服务节点的内网 IP 地址
  • +
  • LBID (str) - 服务节点所属的负载均衡 ID
  • +
  • Name (str) - 服务节点的资源名称
  • +
  • Port (int) - 服务节点暴露的服务端口号
  • +
  • RSID (str) - 服务节点的 ID
  • +
  • RSMode (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用
  • +
  • RSStatus (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • VSID (str) - 服务节点所属的 VServer ID
  • +
  • Weight (int) - 服务节点的权重
  • +
+
+ +
+
+describe_security_group(req=None, **kwargs)[source]
+

DescribeSecurityGroup - 查询安全组信息

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • Zone (str) - (Required) 可用区。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • SGIDs (list) - 【数组】安全组的 ID。输入有效的 ID。调用方式举例:SGIDs.0=“one-id”、SGIDs.1=“two-id”
  • +
+

Response

+
    +
  • Infos (list) - 见 SGInfo 模型定义
  • +
  • Message (str) - 返回信息描述;
  • +
  • TotalCount (int) - 安全组的总数
  • +
+

Response Model

+

SGRuleInfo

+
    +
  • DstPort (str) - 端口号
  • +
  • IsIn (str) - 方向。1:入,0:出
  • +
  • Priority (str) - 优先级。HIGH:高,MEDIUM:中,LOW:低
  • +
  • ProtocolType (str) - 协议
  • +
  • RuleAction (str) - 动作。ACCEPT:接受,DROP:拒绝
  • +
  • RuleID (str) - 规则ID
  • +
  • SrcIP (str) - IP或者掩码/段形式。10.0.0.2,10.0.10.10/16
  • +
+

SGInfo

+
    +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Name (str) - 名称
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 描述
  • +
  • ResourceCount (int) - 资源绑定数量
  • +
  • Rule (list) - 见 SGRuleInfo 模型定义
  • +
  • RuleCount (int) - 规则数量
  • +
  • SGID (str) - 安全组ID
  • +
  • Status (str) - 状态。Creating:创建中,Updating:更新中,Available:有效,Deleted:已删除,Terminating:销毁中,Terminated:已销毁
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_storage_type(req=None, **kwargs)[source]
+

DescribeStorageType - 查询存储类型

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Infos (list) - 见 StorageTypeInfo 模型定义
  • +
  • Message (str) - 返回信息描述;
  • +
  • TotalCount (int) - 存储类型的总数
  • +
+

Response Model

+

StorageTypeInfo

+
    +
  • Region (str) - 地域
  • +
  • SetArch (str) - 架构
  • +
  • StorageType (str) - 存储类型
  • +
  • StorageTypeAlias (str) - 存储类型别名
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_subnet(req=None, **kwargs)[source]
+

DescribeSubnet - 查询子网信息

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • Zone (str) - (Required) 可用区。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • SubnetIDs (list) - 【数组】子网 ID。调用方式举例:SubnetIDs.0=“one-id”、SubnetIDs.1=“two-id”
  • +
  • VPCID (str) - VPCID
  • +
+

Response

+
    +
  • Infos (list) - 见 SubnetInfo 模型定义
  • +
  • Message (str) - 返回信息描述;
  • +
  • TotalCount (int) - 子网的总数
  • +
+

Response Model

+

SubnetInfo

+
    +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Name (str) - 名称
  • +
  • Network (str) - 网段
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 描述
  • +
  • State (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除
  • +
  • SubnetID (str) - ID
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_user(req=None, **kwargs)[source]
+

DescribeUser - 查询租户信息

+

Request

+
    +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • UserIDs (list) - 【数组】租户的 ID。输入有效的 ID。调用方式举例:UserIDs.0=123”、UserIDs.1=456
  • +
+

Response

+
    +
  • Infos (list) - 见 UserInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
  • TotalCount (int) - 返回现有租户总数
  • +
+

Response Model

+

UserInfo

+
    +
  • Amount (float) - 账户余额
  • +
  • CreateTime (int) - 账户创建时间。时间戳
  • +
  • Email (str) - 租户名称
  • +
  • PrivateKey (str) - 私钥
  • +
  • PublicKey (str) - 公钥
  • +
  • Status (str) - 用户状态。USER_STATUS_AVAILABLE:正常,USER_STATUS_FREEZE:冻结
  • +
  • UpdateTime (int) - 更新时间。时间戳
  • +
  • UserID (int) - 租户ID.
  • +
+
+ +
+
+describe_vm_instance(req=None, **kwargs)[source]
+

DescribeVMInstance - 查询虚拟机

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (str) - 列表起始位置偏移量,默认为0。
  • +
  • SubnetID (str) - 子网 ID。输入“有效”状态的子网 ID。
  • +
  • VMIDs (list) - 【数组】虚拟机的 ID。输入有效的 ID。调用方式举例:PrivateIp.0=“one-id”、PrivateIp.1=“two-id”。
  • +
  • VPCID (str) - VPC ID。输入“有效”状态的VPC ID。
  • +
+

Response

+
    +
  • Infos (list) - 见 VMInstanceInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
  • TotalCount (int) - 返回虚拟机总个数
  • +
+

Response Model

+

VMIPInfo

+
    +
  • IP (str) - IP 值
  • +
  • IPVersion (str) - IP版本,支持值:IPv4IPv6
  • +
  • InterfaceID (str) - 网卡 ID
  • +
  • IsElastic (str) - 是否是弹性网卡。枚举值:Y,表示是;N,表示否;
  • +
  • MAC (str) - MAC 地址值
  • +
  • SGID (str) - 安全组 ID
  • +
  • SGName (str) - 安全组名称
  • +
  • SubnetID (str) - 子网 ID
  • +
  • SubnetName (str) - 子网名称
  • +
  • Type (str) - IP 类型。枚举值:Private,表示内网;Public,表示外网;Physical,表示物理网;
  • +
  • VPCID (str) - VPC ID
  • +
  • VPCName (str) - VPC 名称
  • +
+

VMDiskInfo

+
    +
  • DiskID (str) - 磁盘 ID
  • +
  • Drive (str) - 磁盘盘符
  • +
  • IsElastic (str) - 是否是弹性磁盘。枚举值为:Y,表示是;N,表示否;
  • +
  • Name (str) - 磁盘名称
  • +
  • Size (int) - 磁盘大小,单位 GB
  • +
  • Type (str) - 磁盘类型。枚举值:Boot,表示系统盘;Data,表示数据盘;
  • +
+

VMInstanceInfo

+
    +
  • CPU (int) - CPU 个数
  • +
  • ChargeType (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • CreateTime (int) - 虚拟机创建时间
  • +
  • DiskInfos (list) - 见 VMDiskInfo 模型定义
  • +
  • ExpireTime (int) - 虚拟机过期时间
  • +
  • IPInfos (list) - 见 VMIPInfo 模型定义
  • +
  • ImageID (str) - 镜像 ID
  • +
  • Memory (int) - 内存大小,单位 M
  • +
  • Name (str) - 虚拟机名称
  • +
  • OSName (str) - 操作系统名称
  • +
  • OSType (str) - 操作系统类型
  • +
  • Region (str) - Region
  • +
  • RegionAlias (str) - Region 别名
  • +
  • Remark (str) - 备注
  • +
  • State (str) - 虚拟机状态。枚举值:Initializing,表示初始化;Starting,表示启动中;Restarting,表示重启中;Running,表示运行;Stopping,表示关机中;Stopped,表示关机;Deleted,表示已删除;Resizing,表示修改配置中;Terminating,表示销毁中;Terminated,表示已销毁;Migrating,表示迁移中;WaitReinstall,表示等待重装系统;Reinstalling,表示重装中;Poweroffing,表示断电中;ChangeSGing,表示修改防火墙中;
  • +
  • SubnetID (str) - 子网 ID
  • +
  • SubnetName (str) - 子网 名称
  • +
  • VMID (str) - 虚拟机 ID
  • +
  • VMType (str) - 虚拟机类型
  • +
  • VMTypeAlias (str) - 虚拟机类型别名
  • +
  • VPCID (str) - VPC ID
  • +
  • VPCName (str) - VPC 名称
  • +
  • Zone (str) - Zone
  • +
  • ZoneAlias (str) - Zone 别名
  • +
+
+ +
+
+describe_vm_type(req=None, **kwargs)[source]
+

DescribeVMType - 查询主机机型

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Infos (list) - 见 VMTypeInfo 模型定义
  • +
  • Message (str) - 返回信息描述;
  • +
  • TotalCount (int) - 主机机型的总数
  • +
+

Response Model

+

VMTypeInfo

+
    +
  • Region (str) - 地域
  • +
  • SetArch (str) - 架构
  • +
  • VMType (str) - 机型
  • +
  • VMTypeAlias (str) - 机型别名
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_vpc(req=None, **kwargs)[source]
+

DescribeVPC - 查询VPC信息

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • Zone (str) - (Required) 可用区。
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • VPCIDs (list) - 【数组】VPC的 ID。调用方式举例:VPCIDs.0=“one-id”、VPCIDs.1=“two-id”
  • +
+

Response

+
    +
  • Infos (list) - 见 VPCInfo 模型定义
  • +
  • Message (str) - 返回信息描述;
  • +
  • TotalCount (int) - VPC的总数
  • +
+

Response Model

+

SubnetInfo

+
    +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Name (str) - 名称
  • +
  • Network (str) - 网段
  • +
  • Region (str) - 地域
  • +
  • Remark (str) - 描述
  • +
  • State (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除
  • +
  • SubnetID (str) - ID
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • Zone (str) - 可用区
  • +
+

VPCInfo

+
    +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Name (str) - 名称
  • +
  • Network (str) - 网段,比如10.0.0.0/16
  • +
  • Region (str) - 地域。
  • +
  • Remark (str) - 描述
  • +
  • State (str) - 状态;Allocating:申请中,Available:有效,Terminating:销毁中,Terminated:已销毁
  • +
  • SubnetCount (int) - 该VPC下拥有的子网数目
  • +
  • SubnetInfos (list) - 见 SubnetInfo 模型定义
  • +
  • UpdateTime (int) - 修改时间,时间戳
  • +
  • VPCID (str) - VPC的ID
  • +
  • Zone (str) - 可用区
  • +
+
+ +
+
+describe_vs(req=None, **kwargs)[source]
+

DescribeVS - 获取负载均衡 VServer 信息

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • VSIDs (list) - 【数组】VServer的 ID。调用方式举例:VSIDs.0=“one-id”、VSIDs.1=“two-id”。
  • +
+

Response

+
    +
  • Infos (list) - 见 VSInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回当前负载均衡 VServer 总个数。
  • +
+

Response Model

+

VSPolicyInfo

+
    +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Domain (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。
  • +
  • LBID (str) - 负载均衡ID
  • +
  • Path (str) - 内容转发规则关联的请求访问路径,如 “/” 。
  • +
  • PolicyID (str) - 内容转发规则ID
  • +
  • PolicyStatus (str) - 状态,枚举值,Available:有效,Deleted:已删除
  • +
  • RSInfos (list) - 见 RSInfo 模型定义
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • VSID (str) - VServerID
  • +
+

RSInfo

+
    +
  • BindResourceID (str) - 绑定的资源ID
  • +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • IP (str) - 服务节点的内网 IP 地址
  • +
  • LBID (str) - 服务节点所属的负载均衡 ID
  • +
  • Name (str) - 服务节点的资源名称
  • +
  • Port (int) - 服务节点暴露的服务端口号
  • +
  • RSID (str) - 服务节点的 ID
  • +
  • RSMode (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用
  • +
  • RSStatus (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • VSID (str) - 服务节点所属的 VServer ID
  • +
  • Weight (int) - 服务节点的权重
  • +
+

VSInfo

+
    +
  • AlarmTemplateID (str) - 告警模板ID
  • +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Domain (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。
  • +
  • HealthcheckType (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。
  • +
  • KeepaliveTimeout (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。
  • +
  • LBID (str) - VServer 所属的负载均衡 ID
  • +
  • Path (str) - HTTP 健康检查的路径。当健康检查类型为端口检查时,该值为空。
  • +
  • PersistenceKey (str) - 会话保持KEY,仅当 VServer 协议为 HTTP 且会话保持为手动时有效。
  • +
  • PersistenceType (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值为空;当协议为 UDP 时 Auto 表示开启会话保持 。
  • +
  • Port (int) - 端口
  • +
  • Protocol (str) - 协议
  • +
  • RSHealthStatus (str) - 健康检查状态,枚举值,Empty:全部异常,Parts:部分异常,All:正常
  • +
  • RSInfos (list) - 见 RSInfo 模型定义
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • VSID (str) - VServer的ID
  • +
  • VSPolicyInfos (list) - 见 VSPolicyInfo 模型定义
  • +
  • VSStatus (str) - VServer 的资源状态。枚举值,Available:可用,Updating:更新中,Deleted:已删除 。
  • +
+
+ +
+
+describe_vs_policy(req=None, **kwargs)[source]
+

DescribeVSPolicy - 获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Limit (int) - 返回数据长度,默认为20,最大100。
  • +
  • Offset (int) - 列表起始位置偏移量,默认为0。
  • +
  • PolicyIDs (list) - 【数组】七层负载均衡内容转发规则的 ID。调用方式举例:PolicyIDs.0=“one-id”、PolicyIDs.1=“two-id”
  • +
  • VSID (str) - VServerID
  • +
+

Response

+
    +
  • Infos (list) - 见 VSPolicyInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
  • TotalCount (int) - 返回内容转发规则的总个数。
  • +
+

Response Model

+

RSInfo

+
    +
  • BindResourceID (str) - 绑定的资源ID
  • +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • IP (str) - 服务节点的内网 IP 地址
  • +
  • LBID (str) - 服务节点所属的负载均衡 ID
  • +
  • Name (str) - 服务节点的资源名称
  • +
  • Port (int) - 服务节点暴露的服务端口号
  • +
  • RSID (str) - 服务节点的 ID
  • +
  • RSMode (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用
  • +
  • RSStatus (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • VSID (str) - 服务节点所属的 VServer ID
  • +
  • Weight (int) - 服务节点的权重
  • +
+

VSPolicyInfo

+
    +
  • CreateTime (int) - 创建时间,时间戳
  • +
  • Domain (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。
  • +
  • LBID (str) - 负载均衡ID
  • +
  • Path (str) - 内容转发规则关联的请求访问路径,如 “/” 。
  • +
  • PolicyID (str) - 内容转发规则ID
  • +
  • PolicyStatus (str) - 状态,枚举值,Available:有效,Deleted:已删除
  • +
  • RSInfos (list) - 见 RSInfo 模型定义
  • +
  • UpdateTime (int) - 更新时间,时间戳
  • +
  • VSID (str) - VServerID
  • +
+
+ +
+
+detach_disk(req=None, **kwargs)[source]
+

DetachDisk - 解绑UClouStack硬盘

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • DiskID (str) - (Required) 硬盘ID
  • +
  • ResourceID (str) - (Required) 绑定的资源ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+disable_rs(req=None, **kwargs)[source]
+

DisableRS - 禁用负载均衡的单个服务节点

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • RSID (str) - (Required) RServer的ID
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+enable_rs(req=None, **kwargs)[source]
+

EnableRS - 启用负载均衡的单个服务节点

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • RSID (str) - (Required) RServer的ID
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+get_disk_price(req=None, **kwargs)[source]
+

GetDiskPrice - 获取硬盘价格

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • DiskSpace (int) - (Required) 磁盘大小
  • +
  • SetType (str) - (Required) 磁盘类型
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • Infos (list) - 见 PriceInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
+

Response Model

+

PriceInfo

+
    +
  • ChargeType (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • Price (float) - 价格
  • +
+
+ +
+
+get_eip_price(req=None, **kwargs)[source]
+

GetEIPPrice - 获取外网IP价格

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • Bandwidth (int) - (Required) 带宽,默认值1,默认范围1~100
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • OpertatorName (str) - (Required) 线路。目前支持Bgp
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • Infos (list) - 见 PriceInfo 模型定义
  • +
  • Message (str) - 返回信息描述
  • +
+

Response Model

+

PriceInfo

+
    +
  • ChargeType (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • Price (float) - 价格
  • +
+
+ +
+
+get_vm_instance_price(req=None, **kwargs)[source]
+

GetVMInstancePrice - 获取虚拟机价格

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • BootDiskSetType (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD;
  • +
  • CPU (int) - (Required) CPU 个数,目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。
  • +
  • ChargeType (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • DataDiskSetType (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD;
  • +
  • DataDiskSpace (int) - (Required) 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。
  • +
  • ImageID (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。
  • +
  • Memory (int) - (Required) 内存大小,单位 M。目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。
  • +
  • OSType (str) - (Required) 系统类型。
  • +
  • VMType (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • GPU (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配.
  • +
  • Quantity (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。
  • +
+

Response

+
    +
  • Infos (list) - 见 PriceInfo 模型定义
  • +
  • Message (str) - 返回信息描述。
  • +
+

Response Model

+

PriceInfo

+
    +
  • ChargeType (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年;
  • +
  • Price (float) - 价格
  • +
+
+ +
+
+modify_eip_bandwidth(req=None, **kwargs)[source]
+

ModifyEIPBandwidth - 调整外网IP带宽

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • Bandwidth (int) - (Required) 调整后的带宽
  • +
  • EIPID (str) - (Required) 外网IP的ID
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
+
+ +
+
+modify_name_and_remark(req=None, **kwargs)[source]
+

ModifyNameAndRemark - 修改资源名称和备注

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Name (str) - (Required) 名称;
  • +
  • ResourceID (str) - (Required) 资源ID;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Remark (str) - 描述;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+poweroff_vm_instance(req=None, **kwargs)[source]
+

PoweroffVMInstance - 断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • VMID (str) - (Required) 虚拟机ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+recharge(req=None, **kwargs)[source]
+

Recharge - 管理员给租户充值

+

Request

+
    +
  • Amount (int) - (Required) 充值金额。最少100,最大500000
  • +
  • FromType (str) - (Required) 充值来源。INPOUR_FROM_ALIPAY:支付宝,INPOUR_FROM_OFFLINE:银行转账,INPOUR_FROM_SINPAY:新浪支付,INPOUR_FROM_WECHAT_PAY:微信转账。
  • +
  • SerialNo (str) - (Required) 充值单号。充值方式为“账户余额”时为必要参数。
  • +
  • UserID (int) - (Required) 租户的账户ID。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+reinstall_vm_instance(req=None, **kwargs)[source]
+

ReinstallVMInstance - 重装系统,关机的虚拟机才可以重装系统

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • ImageID (str) - (Required) 镜像ID
  • +
  • VMID (str) - (Required) 虚拟机ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+release_eip(req=None, **kwargs)[source]
+

ReleaseEIP - 删除外网IP

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;中国
  • +
  • EIPID (str) - (Required) 外网IP的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国
  • +
+

Response

+
    +
  • Message (str) - 返回状态描述
  • +
+
+ +
+
+renew_resource(req=None, **kwargs)[source]
+

RenewResource - 续费回收站资源

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • ResourceID (str) - (Required) 待续续的资源ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
  • Quantity (int) - 购买时长,默认为 1。按小时(Dynamic)付费的资源无需此参数,按月付费的资源传 0 时,代表购买至月末。
  • +
+

Response

+
    +
  • Message (str) - 返回描述信息
  • +
+
+ +
+
+reset_vm_instance_password(req=None, **kwargs)[source]
+

ResetVMInstancePassword - 重置虚拟机密码,主机必须开机才可以重置密码

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Password (str) - (Required) 密码
  • +
  • VMID (str) - (Required) 虚拟机ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+resize_vm_config(req=None, **kwargs)[source]
+

ResizeVMConfig - 修改虚拟机配置

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • CPU (int) - (Required) CPU 个数,如 1、2、4、8、16、32、64。
  • +
  • Memory (int) - (Required) 内存容量,如 2048、4096、8192、16384、32768、65536、131072。
  • +
  • VMID (str) - (Required) 虚拟机ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+restart_vm_instance(req=None, **kwargs)[source]
+

RestartVMInstance - 重启虚拟机

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • VMID (str) - (Required) 虚拟机ID;
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+rollback_resource(req=None, **kwargs)[source]
+

RollbackResource - 恢复回收站资源

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • ResourceID (str) - (Required) 待恢复的资源ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
+

Response

+
    +
  • Message (str) - 返回描述信息
  • +
+
+ +
+
+rollback_snapshot(req=None, **kwargs)[source]
+

RollbackSnapshot - 将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:如 cn,表示中国。
  • +
  • DiskID (str) - (Required) 对应的云硬盘 ID;
  • +
  • SnapshotID (str) - (Required) 快照ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+start_vm_instance(req=None, **kwargs)[source]
+

StartVMInstance - 开启虚拟机

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • VMID (str) - (Required) 虚拟机 ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+stop_vm_instance(req=None, **kwargs)[source]
+

StopVMInstance - 关闭虚拟机

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • VMID (str) - (Required) 虚拟机 ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
  • VMID (str) - 虚拟机 ID
  • +
+
+ +
+
+terminate_resource(req=None, **kwargs)[source]
+

TerminateResource - 销毁资源

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • ResourceID (str) - (Required) 资源id
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回描述信息
  • +
+
+ +
+
+un_bind_eip(req=None, **kwargs)[source]
+

UnBindEIP - 解绑外网IP

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;中国
  • +
  • EIPID (str) - (Required) 外网IP的ID
  • +
  • ResourceID (str) - (Required) 资源ID
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+un_bind_security_group(req=None, **kwargs)[source]
+

UnBindSecurityGroup - 解绑安全组

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • ResourceID (str) - (Required) 解绑的资源ID。调用方式举例:ResourceID=“one-id”。
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+unbind_alarm_template(req=None, **kwargs)[source]
+

UnbindAlarmTemplate - 解绑告警模板

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • AlarmTemplateID (str) - (Required) 告警模板ID
  • +
  • ResourceIDs (list) - (Required) 【数组】资源的 ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性网卡
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述
  • +
+
+ +
+
+unbind_physical_ip(req=None, **kwargs)[source]
+

UnbindPhysicalIP - 解绑物理IP

+

Request

+
    +
  • Region (str) - (Config) 地域。
  • +
  • PhysicalIPID (str) - (Required) 物理IP的ID
  • +
  • ResourceID (str) - (Required) 资源ID
  • +
  • ResourceType (str) - (Required) 资源类型。VM:虚拟机
  • +
  • Zone (str) - (Required) 可用区。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+update_alarm_template_rule(req=None, **kwargs)[source]
+

UpdateAlarmTemplateRule - 更新告警模板规则

+

Request

+
    +
  • Region (str) - (Config) 地域
  • +
  • AlarmStrategy (str) - (Required) 瘦脸策略
  • +
  • AlarmTemplateID (str) - (Required) 告警模板ID
  • +
  • AlarmTemplateRuleID (str) - (Required) 告警规则ID
  • +
  • Compare (str) - (Required) 对比方式
  • +
  • ContactGroupID (str) - (Required) 通知组ID
  • +
  • MetricName (str) - (Required) 监控指标名称
  • +
  • ResourceType (str) - (Required) 资源类型
  • +
  • Threshold (str) - (Required) 告警阈值
  • +
  • TriggerCount (str) - (Required) 连续触发次数
  • +
  • Zone (str) - (Required) 可用区
  • +
+

Response

+
    +
  • Message (str) - 返回描述信息
  • +
+
+ +
+
+update_rs(req=None, **kwargs)[source]
+

UpdateRS - 修改负载均衡的服务节点

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) VServer 监听器所属的负载均衡 ID
  • +
  • RSID (str) - (Required) RServer的ID
  • +
  • VSID (str) - (Required) RServer所属的VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Port (int) - 端口号
  • +
  • Weight (int) - 权重
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+update_security_group_rule(req=None, **kwargs)[source]
+

UpdateSecurityGroupRule - 修改安全组规则

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值: cn,表示中国;
  • +
  • Rules (list) - (Required) 【数组】规则。输入有效的 规则。调用方式举例:Rules.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rules.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1”
  • +
  • SGID (str) - (Required) 安全组ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述;
  • +
+
+ +
+
+update_vs(req=None, **kwargs)[source]
+

UpdateVS - 修改负载均衡VServer

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) VServer 监听器所属的负载均衡 ID
  • +
  • VSID (str) - (Required) 需要更新的VSID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • CACertificateID (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。
  • +
  • Domain (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。
  • +
  • HealthcheckType (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。仅当 VServer 协议类型为 HTTP 时,才可进行 HTTP 检查。
  • +
  • KeepaliveTimeout (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。
  • +
  • Path (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。
  • +
  • PersistenceKey (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。
  • +
  • PersistenceType (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。
  • +
  • Port (int) - VServer 监听端口
  • +
  • SSLMode (str) - SSL认证模式,HTTPS协议下必传,取值范围[“simplex”,”duplex”]分别表示单向认证和双向认证。
  • +
  • Scheduler (str) - 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用
  • +
  • ServerCertificateID (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS 时有效。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+update_vs_policy(req=None, **kwargs)[source]
+

UpdateVSPolicy - 更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • LBID (str) - (Required) 负载均衡ID
  • +
  • PolicyID (str) - (Required) 内容转发规则ID
  • +
  • VSID (str) - (Required) VServer的ID
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
  • Domain (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。
  • +
  • Path (str) - 内容转发规则关联的请求访问路径,如 “/” 。
  • +
  • RSIDs (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+
+upgrade_disk(req=None, **kwargs)[source]
+

UpgradeDisk - 升级硬盘

+

Request

+
    +
  • Region (str) - (Config) 地域。枚举值:cn,表示中国;
  • +
  • DiskID (str) - (Required) 硬盘ID
  • +
  • DiskSpace (int) - (Required) 硬盘升级后的容量, 不能小于原硬盘容量,单位为 GB 。
  • +
  • Zone (str) - (Required) 可用区。枚举值:zone-01,表示中国;
  • +
+

Response

+
    +
  • Message (str) - 返回信息描述。
  • +
+
+ +
+ +
+
+

UFS

+
+
+class ucloud.services.ufs.client.UFSClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_ufs_volume(req=None, **kwargs)[source]
+

CreateUFSVolume - 创建文件系统

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • ProtocolType (str) - (Required) 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议
  • +
  • Size (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB
  • +
  • StorageType (str) - (Required) 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型
  • +
  • ChargeType (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限) 默认为Dynamic
  • +
  • CouponId (str) - 使用的代金券id
  • +
  • Quantity (int) - 购买时长 默认: 1
  • +
  • Remark (str) - 备注
  • +
  • Tag (str) - 文件系统所属业务组
  • +
  • VolumeName (str) - 文件系统名称
  • +
+

Response

+
    +
  • VolumeId (str) - 文件系统ID
  • +
  • VolumeName (str) - 文件系统名称
  • +
  • VolumeStatus (str) - 文件系统挂载点状态
  • +
+
+ +
+
+describe_ufs_volume_2(req=None, **kwargs)[source]
+

DescribeUFSVolume2 - 获取文件系统列表

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Limit (int) - 文件列表长度
  • +
  • Offset (int) - 文件列表起始
  • +
  • VolumeId (str) - 文件系统ID
  • +
+

Response

+
    +
  • DataSet (list) - 见 UFSVolumeInfo2 模型定义
  • +
  • TotalCount (int) - 文件系统总数
  • +
+

Response Model

+

UFSVolumeInfo2

+
    +
  • CreateTime (int) - 文件系统创建时间(unix时间戳)
  • +
  • ExpiredTime (int) - 文件系统过期时间(unix时间戳)
  • +
  • IsExpired (str) - 是否过期
  • +
  • MaxMountPointNum (int) - 文件系统允许创建的最大挂载点数目
  • +
  • ProtocolType (str) - 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议
  • +
  • Remark (str) - 文件系统备注信息
  • +
  • Size (int) - 文件系统大小,单位GB
  • +
  • StorageType (str) - 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型
  • +
  • Tag (str) - 文件系统所属业务组
  • +
  • TotalMountPointNum (int) - 当前文件系统已创建的挂载点数目
  • +
  • UsedSize (int) - 文件系统当前使用容量,单位GB
  • +
  • VolumeId (str) - 文件系统ID
  • +
  • VolumeName (str) - 文件系统名称
  • +
+
+ +
+
+extend_ufs_volume(req=None, **kwargs)[source]
+

ExtendUFSVolume - 文件系统扩容

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • Size (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB
  • +
  • VolumeId (str) - (Required) 文件系统ID
  • +
+

Response

+
+ +
+
+remove_ufs_volume(req=None, **kwargs)[source]
+

RemoveUFSVolume - 删除UFS文件系统

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Region (str) - (Config) 地域。 参见 地域和可用区列表
  • +
  • VolumeId (str) - (Required) 文件系统ID
  • +
+

Response

+
+ +
+ +
+
+

UHub

+
+
+class ucloud.services.uhub.client.UHubClient(config, transport=None, middleware=None, logger=None)[source]
+
+
+create_repo(req=None, **kwargs)[source]
+

CreateRepo - 创建镜像仓库

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • RepoName (str) - (Required) 仓库名称,不可修改
  • +
  • Description (str) - 仓库备注
  • +
  • IsShared (bool) - 镜像仓库是否公开,公开为true、不公开为false;默认为false
  • +
+

Response

+
    +
  • Message (str) - 有错误时返回内容
  • +
+
+ +
+
+delete_repo(req=None, **kwargs)[source]
+

DeleteRepo - 删除镜像仓库

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • RepoName (str) - (Required) 镜像仓库名称
  • +
+

Response

+
+ +
+
+delete_repo_image(req=None, **kwargs)[source]
+

DeleteRepoImage - 删除镜像

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • ImageName (str) - (Required) 镜像名称
  • +
  • RepoName (str) - (Required) 镜像仓库名称
  • +
  • TagName (str) - 不指定tag则删除全部tag
  • +
+

Response

+
+ +
+
+get_image_tag(req=None, **kwargs)[source]
+

GetImageTag - 获取镜像tag

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • ImageName (str) - (Required) 镜像名称
  • +
  • RepoName (str) - (Required) 镜像仓库名称
  • +
  • Limit (int) - 每次获取数量,默认为20
  • +
  • Offset (int) - 偏移量,默认0
  • +
  • TagName (str) - 默认不写,如果填写,代表查询该tag,否则查全部tag
  • +
+

Response

+
    +
  • TagSet (list) - 见 TagSet 模型定义
  • +
  • TotalCount (int) - tag总数
  • +
+

Response Model

+

TagSet

+
    +
  • TagName (str) - Tag名称
  • +
  • UpdateTime (str) - 镜像更新时间
  • +
+
+ +
+
+get_repo(req=None, **kwargs)[source]
+

GetRepo - 获取镜像仓库

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • Limit (int) - 数量,默认20
  • +
  • Offset (int) - 偏移量,默认0
  • +
  • Type (str) - private私有仓库,public公共仓库,默认public
  • +
+

Response

+
    +
  • RepoSet (list) - 见 RepoSet 模型定义
  • +
  • TotalCount (int) - 总的仓库数量
  • +
+

Response Model

+

RepoSet

+
    +
  • CreateTime (str) - 仓库创建时间
  • +
  • Description (str) - 镜像仓库描述
  • +
  • IsOutSide (str) - 镜像仓库是否外网可以访问,可以为ture,不可以为false
  • +
  • IsShared (str) - 镜像仓库类型,false为私有;true为公有
  • +
  • RepoName (str) - 镜像仓库名称
  • +
  • UpdateTime (str) - 仓库更新时间
  • +
+
+ +
+
+get_repo_image(req=None, **kwargs)[source]
+

GetRepoImage - 获取镜像仓库下的镜像

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • RepoName (str) - (Required) 镜像仓库名称
  • +
  • Limit (int) - 显示数量,默认为20
  • +
  • Offset (int) - 偏移量,默认0
  • +
+

Response

+
    +
  • ImageSet (list) - 见 ImageSet 模型定义
  • +
  • TotalCount (int) -
  • +
+

Response Model

+

ImageSet

+
    +
  • CreateTime (str) - 创建时间
  • +
  • ImageName (str) - 镜像名称
  • +
  • LatestTag (str) - 最新push的Tag
  • +
  • PullCount (int) - 镜像被下载次数
  • +
  • RepoName (str) - 镜像仓库名称
  • +
  • UpdateTime (str) - 修改时间
  • +
+
+ +
+
+update_repo(req=None, **kwargs)[source]
+

UpdateRepo - 更新镜像仓库

+

Request

+
    +
  • ProjectId (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 GetProjectList接口
  • +
  • RepoName (str) - (Required) 镜像仓库名称,不可修改
  • +
  • Description (str) - 备注
  • +
  • IsShared (str) - false设置为私有;true设置为公有。默认false
  • +
+

Response

+
    +
  • Message (str) - 错误的时候返回
  • +
+
+ +
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index 90b7ff5..0000000 --- a/setup.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you 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. - -from setuptools import setup, find_packages - -import importlib -import io -import logging -import os -import sys - -logger = logging.getLogger(__name__) - -PY2 = sys.version_info[0] == 2 and sys.version_info[1] >= 7 - -if not PY2: - raise NotImplementedError(( - "ucloud-sdk-python2 should be used in 2.7" - "and above of python interpreter" - )) - - -def load_version(): - return importlib.import_module( - "ucloud.version", os.path.join("ucloud", "version.py") - ).version - - -def load_long_description(): - try: - with io.open("README.md", encoding="utf-8") as f: - return f.read() - except IOError: - return "" - - -def load_requirements(requirements_file): - try: - with io.open(requirements_file, encoding="utf-8") as f: - return list(f.readlines()) - except IOError: - return [] - - -dependencies = load_requirements("requirements.txt") - -dependencies_test = dependencies + [ - 'flake8>=3.6.0', - 'pytest', - 'pytest-cov', -] - -dependencies_doc = dependencies + ['sphinx'] - -dependencies_ci = list(set(dependencies_test + dependencies_doc)) - -dependencies_dev = list(set(dependencies_ci + ['black'])) - - -def do_setup(): - setup( - name="ucloud-sdk-python2", - description="UCloud Service Development Kit - Python", - long_description=load_long_description(), - long_description_content_type='text/markdown', - license="Apache License 2.0", - version=load_version(), - packages=find_packages(exclude=["tests*"]), - package_data={"": []}, - include_package_data=True, - zip_safe=False, - install_requires=dependencies, - extras_require={ - "test": dependencies_test, - "doc": dependencies_doc, - "dev": dependencies_dev, - "ci": dependencies_ci, - }, - classifiers=[ - "Development Status :: 3 - Alpha", - "Environment :: Console", - "Environment :: Web Environment", - "Intended Audience :: Developers", - "Intended Audience :: System Administrators", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 2 :: Only", - "Topic :: Software Development", - ], - author="ucloud", - author_email="esl_ipdd@ucloud.cn", - url="https://github.com/ucloud/ucloud-sdk-python2", - python_requires=">=2.7", - ) - - -if __name__ == "__main__": - do_setup() diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_acceptance/conftest.py b/tests/test_acceptance/conftest.py deleted file mode 100644 index b77c39a..0000000 --- a/tests/test_acceptance/conftest.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- - -import json -import os -import pytest -from ucloud.testing.driver import spec -from ucloud.client import Client - - -@pytest.fixture(scope="session", autouse=True) -def ustack_client(): - return Client( - { - "base_url": "http://console.pre.ucloudstack.com/api", - "region": "cn", - "public_key": os.getenv("UCLOUDSTACK_PUBLIC_KEY"), - "private_key": os.getenv("UCLOUDSTACK_PRIVATE_KEY"), - "max_retries": 10, - "timeout": 60, - } - ) - - -@pytest.fixture(scope="session", autouse=True) -def client(): - return Client( - { - "region": "cn-bj2", - "project_id": os.getenv("UCLOUD_PROJECT_ID"), - "public_key": os.getenv("UCLOUD_PUBLIC_KEY"), - "private_key": os.getenv("UCLOUD_PRIVATE_KEY"), - "max_retries": 10, - "timeout": 60, - } - ) - - -@pytest.fixture(scope="module", autouse=True, name="variables") -def variables_factory(): - return { - "Region": "cn-bj2", - "Zone": "cn-bj2-05", - "ProjectId": os.getenv("UCLOUD_PROJECT_ID"), - } - - -@pytest.fixture(scope="session", autouse=True) -def save_report(request): - def save_report_handler(): - with open("./report.json", "w") as f: - json.dump(spec.json(), f) - - request.addfinalizer(save_report_handler) diff --git a/tests/test_acceptance/test_scenario_5183.py b/tests/test_acceptance/test_scenario_5183.py deleted file mode 100644 index 10f4aed..0000000 --- a/tests/test_acceptance/test_scenario_5183.py +++ /dev/null @@ -1,843 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -from ucloud.core import exc -from ucloud.testing import funcs, op, env, utest -from ucloud.testing.driver import spec - -scenario = spec.scenario(5183, "UCloudStack_02", owners=["lisa.wang@ucloud.cn"]) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_scenario_5183(ustack_client, variables): - scenario.store.update(variables) - scenario.store["Region"] = "cn" - scenario.store["Zone"] = "zone-01" - scenario.store["BeginTime"] = funcs.get_timestamp(10) - 3600 - scenario.store["EndTime"] = funcs.get_timestamp(10) - describe_vpc_00(ustack_client) - describe_security_group_01(ustack_client) - describe_storage_type_02(ustack_client) - describe_vm_type_03(ustack_client) - describe_image_04(ustack_client) - describe_image_05(ustack_client) - create_vm_instance_06(ustack_client) - describe_vm_instance_07(ustack_client) - allocate_eip_08(ustack_client) - create_lb_09(ustack_client) - describe_lb_10(ustack_client) - create_vs_11(ustack_client) - update_vs_12(ustack_client) - create_rs_13(ustack_client) - update_rs_14(ustack_client) - describe_rs_15(ustack_client) - disable_rs_16(ustack_client) - describe_rs_17(ustack_client) - enable_rs_18(ustack_client) - describe_rs_19(ustack_client) - create_vs_policy_20(ustack_client) - describe_vs_policy_21(ustack_client) - update_vs_policy_22(ustack_client) - delete_vs_policy_23(ustack_client) - delete_rs_24(ustack_client) - poweroff_vm_instance_25(ustack_client) - delete_vm_instance_26(ustack_client) - delete_lb_27(ustack_client) - - -@scenario.api( - title="查询VPC信息", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVPCResponse"), - ], - action="DescribeVPC", -) -def describe_vpc_00(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VPCID"] = utest.value_at_path(resp, "Infos.0.VPCID") - variables["SubnetID"] = utest.value_at_path( - resp, "Infos.0.SubnetInfos.0.SubnetID" - ) - return resp - - -@scenario.api( - title="查询安全组信息", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeSecurityGroupResponse"), - ], - action="DescribeSecurityGroup", -) -def describe_security_group_01(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_security_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SGID"] = utest.value_at_path(resp, "Infos.0.SGID") - return resp - - -@scenario.api( - title="查询存储类型", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeStorageTypeResponse"), - ], - action="DescribeStorageType", -) -def describe_storage_type_02(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_storage_type(d) - except exc.RetCodeException as e: - resp = e.json() - variables["StorageType"] = utest.value_at_path(resp, "Infos.0.StorageType") - return resp - - -@scenario.api( - title="查询主机机型", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVMTypeResponse"), - ], - action="DescribeVMType", -) -def describe_vm_type_03(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_vm_type(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VMType"] = "ComputeSetBBBB" - return resp - - -@scenario.api( - title="获取镜像信息,包括默认镜像和自制镜像。", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_04(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Infos"] = utest.value_at_path(resp, "Infos") - return resp - - -@scenario.api( - title="获取镜像信息,包括默认镜像和自制镜像。", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_05(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ImageIDs": [ - funcs.search_value( - variables.get("Infos"), "OSName", "CentOS 6.5 x86_64", "ImageID" - ) - ], - } - try: - resp = client.ucloudstack().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID"] = utest.value_at_path(resp, "Infos.0.ImageID") - return resp - - -@scenario.api( - title="创建虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateVMInstanceResponse"), - ], - action="CreateVMInstance", -) -def create_vm_instance_06(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "WANSGID": variables.get("SGID"), - "VPCID": variables.get("VPCID"), - "VMType": variables.get("VMType"), - "SubnetID": variables.get("SubnetID"), - "Region": variables.get("Region"), - "Quantity": 1, - "Password": "Zhongshang_2018", - "Name": "host_test", - "Memory": 2048, - "ImageID": variables.get("ImageID"), - "DataDiskSpace": 10, - "DataDiskSetType": "StorageSetBBBB", - "ChargeType": "Month", - "CPU": 1, - "BootDiskSetType": "StorageSetBBBB", - } - try: - resp = client.ucloudstack().create_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VMID"] = utest.value_at_path(resp, "VMID") - return resp - - -@scenario.api( - title="查询虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=90, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVMInstanceResponse"), - ("str_eq", "Infos.0.State", "Running"), - ], - action="DescribeVMInstance", -) -def describe_vm_instance_07(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMIDs": [variables.get("VMID")], - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().describe_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["InterfaceID"] = utest.value_at_path( - resp, "Infos.0.IPInfos.0.InterfaceID" - ) - variables["DiskID"] = utest.value_at_path( - resp, "Infos.0.DiskInfos.0.DiskID" - ) - return resp - - -@scenario.api( - title="申请外网IP", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "AllocateEIPResponse"), - ], - action="AllocateEIP", -) -def allocate_eip_08(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OperatorName": "Bgp", - "Name": "test_eip", - "ChargeType": "Month", - "Bandwidth": 2, - } - try: - resp = client.ucloudstack().allocate_eip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["EIPID"] = utest.value_at_path(resp, "EIPID") - return resp - - -@scenario.api( - title="创建负载均衡", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateLBResponse"), - ], - action="CreateLB", -) -def create_lb_09(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VPCID": variables.get("VPCID"), - "VMType": variables.get("VMType"), - "SubnetID": variables.get("SubnetID"), - "SGID": variables.get("SGID"), - "Region": variables.get("Region"), - "Name": "lb_test1", - "LBType": "WAN", - "EIPID": variables.get("EIPID"), - "ChargeType": "Month", - } - try: - resp = client.ucloudstack().create_lb(d) - except exc.RetCodeException as e: - resp = e.json() - variables["LBID"] = utest.value_at_path(resp, "LBID") - return resp - - -@scenario.api( - title="获取负载均衡信息", - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeLBResponse"), - ("str_eq", "Infos.0.LBStatus", "Running"), - ], - action="DescribeLB", -) -def describe_lb_10(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "LBIDs": [variables.get("LBID")], - } - try: - resp = client.ucloudstack().describe_lb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="创建负载均衡VServer", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateVSResponse"), - ], - action="CreateVS", -) -def create_vs_11(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Scheduler": "wrr", - "Region": variables.get("Region"), - "Protocol": "HTTP", - "Port": 123, - "LBID": variables.get("LBID"), - "HealthcheckType": "Port", - } - try: - resp = client.ucloudstack().create_vs(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VSID"] = utest.value_at_path(resp, "VSID") - return resp - - -@scenario.api( - title="修改负载均衡VServer", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateVSResponse"), - ], - action="UpdateVS", -) -def update_vs_12(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Scheduler": "ip_hash", - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().update_vs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="添加服务节点", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateRSResponse"), - ], - action="CreateRS", -) -def create_rs_13(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Weight": 1, - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "Port": 112, - "LBID": variables.get("LBID"), - "BindResourceID": variables.get("VMID"), - } - try: - resp = client.ucloudstack().create_rs(d) - except exc.RetCodeException as e: - resp = e.json() - variables["RSID"] = utest.value_at_path(resp, "RSID") - return resp - - -@scenario.api( - title="修改服务节点", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateRSResponse"), - ], - action="UpdateRS", -) -def update_rs_14(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Weight": 55, - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSID": variables.get("RSID"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().update_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="获取服务节点信息", - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeRSResponse"), - ], - action="DescribeRS", -) -def describe_rs_15(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().describe_rs(d) - except exc.RetCodeException as e: - resp = e.json() - variables["RSID_1"] = utest.value_at_path(resp, "Infos.0.RSID") - return resp - - -@scenario.api( - title="禁用服务节点", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DisableRSResponse"), - ], - action="DisableRS", -) -def disable_rs_16(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSID": variables.get("RSID"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().disable_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="获取服务节点信息", - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeRSResponse"), - ("str_eq", "Infos.0.RSMode", "Disable"), - ], - action="DescribeRS", -) -def describe_rs_17(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSIDs": [variables.get("RSID")], - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().describe_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="启用服务节点", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "EnableRSResponse"), - ], - action="EnableRS", -) -def enable_rs_18(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSID": variables.get("RSID"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().enable_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="获取服务节点信息", - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeRSResponse"), - ("str_eq", "Infos.0.RSMode", "Enable"), - ], - action="DescribeRS", -) -def describe_rs_19(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSIDs": [variables.get("RSID")], - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().describe_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="创建内容转发规则", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateVSPolicyResponse"), - ], - action="CreateVSPolicy", -) -def create_vs_policy_20(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSIDs": [variables.get("RSID")], - "Path": "/test12321", - "LBID": variables.get("LBID"), - "Domain": "test.com11", - } - try: - resp = client.ucloudstack().create_vs_policy(d) - except exc.RetCodeException as e: - resp = e.json() - variables["PolicyID"] = utest.value_at_path(resp, "PolicyID") - return resp - - -@scenario.api( - title="获取内容转发规则信息", - max_retries=3, - retry_interval=1, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVSPolicyResponse"), - ], - action="DescribeVSPolicy", -) -def describe_vs_policy_21(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "PolicyIDs": [variables.get("PolicyID")], - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().describe_vs_policy(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="更新内容转发规则", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateVSPolicyResponse"), - ], - action="UpdateVSPolicy", -) -def update_vs_policy_22(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "PolicyID": variables.get("PolicyID"), - "Path": "/testnew", - "LBID": variables.get("LBID"), - "Domain": "test.comnew", - } - try: - resp = client.ucloudstack().update_vs_policy(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除内容转发规则", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteVSPolicyResponse"), - ], - action="DeleteVSPolicy", -) -def delete_vs_policy_23(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "PolicyID": variables.get("PolicyID"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().delete_vs_policy(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="移除服务节点", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteRSResponse"), - ], - action="DeleteRS", -) -def delete_rs_24(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSID": variables.get("RSID"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().delete_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="断电虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PoweroffVMInstanceResponse"), - ], - action="PoweroffVMInstance", -) -def poweroff_vm_instance_25(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMID": variables.get("VMID"), - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().poweroff_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteVMInstanceResponse"), - ], - action="DeleteVMInstance", -) -def delete_vm_instance_26(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMID": variables.get("VMID"), - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().delete_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除负载均衡", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteLBResponse"), - ], - action="DeleteLB", -) -def delete_lb_27(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().delete_lb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_acceptance/test_scenario_5292.py b/tests/test_acceptance/test_scenario_5292.py deleted file mode 100644 index cc1ea83..0000000 --- a/tests/test_acceptance/test_scenario_5292.py +++ /dev/null @@ -1,1018 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -from ucloud.core import exc -from ucloud.testing import funcs, op, env, utest -from ucloud.testing.driver import spec - -scenario = spec.scenario(5292, "UCloudStack_05", owners=["lisa.wang@ucloud.cn"]) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_scenario_5292(ustack_client, variables): - scenario.store.update(variables) - scenario.store["Region"] = "cn" - scenario.store["Zone"] = "zone-01" - scenario.store["BeginTime"] = funcs.get_timestamp(10) - 3600 - scenario.store["EndTime"] = funcs.get_timestamp(10) - describe_vpc_00(ustack_client) - describe_security_group_01(ustack_client) - describe_vm_type_02(ustack_client) - describe_storage_type_03(ustack_client) - describe_image_04(ustack_client) - create_vm_instance_05(ustack_client) - create_vm_instance_06(ustack_client) - describe_vm_instance_07(ustack_client) - describe_vm_instance_08(ustack_client) - create_certificate_09(ustack_client) - create_certificate_10(ustack_client) - describe_certificate_11(ustack_client) - describe_certificate_12(ustack_client) - create_lb_13(ustack_client) - describe_lb_14(ustack_client) - create_vs_15(ustack_client) - create_rs_16(ustack_client) - describe_rs_17(ustack_client) - update_vs_18(ustack_client) - delete_rs_19(ustack_client) - delete_vs_20(ustack_client) - describe_op_logs_21(ustack_client) - delete_lb_22(ustack_client) - delete_certificate_23(ustack_client) - delete_certificate_24(ustack_client) - poweroff_vm_instance_25(ustack_client) - poweroff_vm_instance_26(ustack_client) - delete_vm_instance_27(ustack_client) - delete_vm_instance_28(ustack_client) - - -@scenario.api( - title="查询VPC信息", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVPCResponse"), - ], - action="DescribeVPC", -) -def describe_vpc_00(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VPCID"] = utest.value_at_path(resp, "Infos.0.VPCID") - variables["SubnetID"] = utest.value_at_path( - resp, "Infos.0.SubnetInfos.0.SubnetID" - ) - return resp - - -@scenario.api( - title="查询安全组信息", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeSecurityGroupResponse"), - ], - action="DescribeSecurityGroup", -) -def describe_security_group_01(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_security_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SGID"] = utest.value_at_path(resp, "Infos.0.SGID") - return resp - - -@scenario.api( - title="查询主机机型", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVMTypeResponse"), - ], - action="DescribeVMType", -) -def describe_vm_type_02(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_vm_type(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VMType"] = utest.value_at_path(resp, "Infos.0.VMType") - return resp - - -@scenario.api( - title="查询存储类型", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeStorageTypeResponse"), - ], - action="DescribeStorageType", -) -def describe_storage_type_03(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_storage_type(d) - except exc.RetCodeException as e: - resp = e.json() - variables["StorageType"] = utest.value_at_path(resp, "Infos.0.StorageType") - return resp - - -@scenario.api( - title="获取镜像信息,包括默认镜像和自制镜像。", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_04(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Image_id"] = utest.value_at_path(resp, "Infos.0.ImageID") - return resp - - -@scenario.api( - title="创建虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateVMInstanceResponse"), - ], - action="CreateVMInstance", -) -def create_vm_instance_05(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "WANSGID": variables.get("SGID"), - "VPCID": variables.get("VPCID"), - "VMType": "ComputeSetBBBB", - "SubnetID": variables.get("SubnetID"), - "Region": variables.get("Region"), - "Password": "Zhongshang_2018", - "Name": "host_test", - "Memory": 2048, - "ImageID": "cn-image-centos-65", - "DataDiskSetType": "StorageSetBBBB", - "ChargeType": "Month", - "CPU": 1, - "BootDiskSetType": "StorageSetBBBB", - } - try: - resp = client.ucloudstack().create_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VMID"] = utest.value_at_path(resp, "VMID") - return resp - - -@scenario.api( - title="创建虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateVMInstanceResponse"), - ], - action="CreateVMInstance", -) -def create_vm_instance_06(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "WANSGID": variables.get("SGID"), - "VPCID": variables.get("VPCID"), - "VMType": "ComputeSetBBBB", - "SubnetID": variables.get("SubnetID"), - "Region": variables.get("Region"), - "Password": "Zhongshang_2018", - "Name": "host_test", - "Memory": 2048, - "ImageID": "cn-image-centos-65", - "DataDiskSetType": "StorageSetBBBB", - "ChargeType": "Month", - "CPU": 1, - "BootDiskSetType": "StorageSetBBBB", - } - try: - resp = client.ucloudstack().create_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["EIPID"] = utest.value_at_path(resp, "EIPID") - variables["DiskID"] = utest.value_at_path(resp, "DiskID") - variables["VMID_1"] = utest.value_at_path(resp, "VMID") - return resp - - -@scenario.api( - title="查询虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=90, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVMInstanceResponse"), - ("str_eq", "Infos.0.State", "Running"), - ], - action="DescribeVMInstance", -) -def describe_vm_instance_07(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMIDs": [variables.get("VMID")], - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().describe_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="查询虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVMInstanceResponse"), - ("str_eq", "Infos.0.State", "Running"), - ], - action="DescribeVMInstance", -) -def describe_vm_instance_08(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMIDs": [variables.get("VMID_1")], - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().describe_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="创建证书", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateCertificateResponse"), - ], - action="CreateCertificate", -) -def create_certificate_09(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PrivateKey": """-----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA8QbLsBnQmXRFLONEkHL1LfvYZZi04HH5Kv4fX9UFT8S6vzwv -jrBu+oToMujfH+5O8eV4LTyovTuMnRZfFYmIRF0Y2EHFK05t5bu7PVE9gCFJitHS -Pj2YBVOYA8IfH0C6C9uE9pT35A/U54Apw2p36N8W8f3vYbCZH+4SlosfM68bWGAl -E7feqU6UHlo6+4IJdmwxH02siTTPoucaBgT4kBXcT5ylgozZl4tncLNHdsIYtXrk -VoCOcCF44uVin1H+hL8xtFM8+ovL7Eixr/KS+wtALlCODKzzQ3rBXgNixGHJUJKR -xBOPQZKULwqJAlvXfP6+QElK8vu0qySJ3FOhcQIDAQABAoIBAAPvZnfzk/JNcauv -8jihh9s+V2QhQCLB+Z14FK8N3U5WGe5xXx1nSAiTDu912d69l1BfvLyQVvjv9fXC -nb7ORglHs9YkDMIOP8EWdZIkt2pWIMtBbbtSah78JGk7TCLIfcEfzmXwPLPehk1Z -TFVCcb69lbRRvwzLQ1TAIFGQ5+uCEkW02KAl6kx+JnVpsE8/BjqZKG1Ne+sM6dOC -GRd44hgiNHKUT3Xtbw6jttiUFDLKYMYtb7PpRAkZFM8tgnBV6dWWJ3xTYW9kOjPh -XnScNARfphUZVibRhA04og5p1q/MUz9Sz9g2DURuSlo/MP3WZMbVRvZiUN1xhz5v -2WhsddkCgYEA+gWPFo0TbVbZXUrx9J/ptI9NXNx5zjyUrv87MDt1pnmMDgWrsCEI -RqQR4Lp2G11GA7IudiA/ipcZqgcRIIFvb+gu1kObox3BGGs59x+DqFeAPXt6dFG2 -W10f9k96/tcbdursurqwd3Zv3cqQqRTKgaP4xHFmexlcwGCF5YwewWMCgYEA9sos -2acNINXwcNRUPnpg82DOrG9Zjr1aiNo9PDJmwGEdC9QMOUWM85dq0M9g388ttiLU -Wr/U4r5yDuqWJPcKtff2BaxSsZpcQ4Id9eddD9L+sxaBGyD23RtOC+IOlkG6WS4g -iUYulQvW69tBHWiwxQu7YMSIE2B3EuySPOQYlBsCgYEAxNwvqB/4lfT2PUDPdj+b -cnILBf0LY1nL8GZCol2O6z91CW1pm8rGi2iQMxRd/nnYsPxRHO2TWnpS2M+rqp5/ -settRYQCPdMlwSZcg7oqnhgXf1GEP6Y/IX0Xt4cpXxLcKywarYRlggqdVlMyyA74 -zE7hhzuK5442u7rEctN7O+UCgYAoM78ipafp1XAZsT0YAG+Stg504J7CNe5tpL+c -8sjyRd+pcZ2cJsxTUjNAWMf7LZDQvtPBBMb1OPjznRtgYi4IfqBBRFUkQXUOOkAP -MuViEokTO3NErBYK5svL+8NMjuCAbpc2RYyJEyiru0fcNpW1Q7f+h4VzQp+jIY6h -BLdMSQKBgGauU7OQksZCEY2MVAcD5dShYYvWLxOkj4dVVwISN1M6ImCAHwXZ6Nak -6YlzCGT+NbRJbB2cPfsrKXtAJVX15I3iDCKAoGkb+9kiHnPj7Q71KVuWQE6BQx7E -vE88TSsshwtX1s+qU9UWUrMPodK32q5nO3p8N033NvS9wLNfbcdc ------END RSA PRIVATE KEY-----""", - "Name": "server", - "CertificateType": "ServerCrt", - "Certificate": """-----BEGIN CERTIFICATE----- -MIIFzTCCBLWgAwIBAgIQQ8IswmAhEIKfNhrKqb0F3DANBgkqhkiG9w0BAQsFADCB -lzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT -FERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM -IENBIC0gRzUwHhcNMTYxMjA2MDAwMDAwWhcNMTcxMjA2MjM1OTU5WjAgMR4wHAYD -VQQDDBVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDxBsuwGdCZdEUs40SQcvUt+9hlmLTgcfkq/h9f1QVPxLq/PC+O -sG76hOgy6N8f7k7x5XgtPKi9O4ydFl8ViYhEXRjYQcUrTm3lu7s9UT2AIUmK0dI+ -PZgFU5gDwh8fQLoL24T2lPfkD9TngCnDanfo3xbx/e9hsJkf7hKWix8zrxtYYCUT -t96pTpQeWjr7ggl2bDEfTayJNM+i5xoGBPiQFdxPnKWCjNmXi2dws0d2whi1euRW -gI5wIXji5WKfUf6EvzG0Uzz6i8vsSLGv8pL7C0AuUI4MrPNDesFeA2LEYclQkpHE -E49BkpQvCokCW9d8/r5ASUry+7SrJIncU6FxAgMBAAGjggKJMIIChTAgBgNVHREE -GTAXghVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBY -MFYGBmeBDAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2Nw -czAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSME -GDAWgBRtWMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l -BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8Bggr -BgEFBQcwAYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlk -YXRpb24uY29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGln -aXRhbGNlcnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEDBgorBgEE -AdZ5AgQCBIH0BIHxAO8AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+ -zAAAAVjT7zdSAAAEAwBGMEQCIDCzWufc1q7hjmrrCetGyoA8EsEqpRSIhmZXStX5 -8b7zAiA6x5aAaDK+yMyeAgw71yi3tRVrWayHN+W0+4BxC8u5UQB2AO5Lvbd1zmC6 -4UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWNPvN4kAAAQDAEcwRQIgZ/LNgg7n -7AE4O2yZkrXNcqAOmJ3NU2nT6zcnBxPFTTsCIQCjyPbMfWMZTD3kxgxPQ1COw5zJ -sM0dfNmSr3MiU7EhqDANBgkqhkiG9w0BAQsFAAOCAQEAeyfgUhg9ZWVCaz0f+BQU -6fMMfmQ1BDzvVFu+ORoAqyJQogxwIdfjrlz/63YFee5qpUsW/aaz4ma3bb4dpE1K -GsgYe5N3o0xybYlOj+KB61sufYkzQS3HgDevCwjfUlGEbNl4dpO2xh5s5AANXlnz -s/X0+AJ33/bm+fWIjAbIjluaEoM6GETHTXi4Tlxy0j3nsXsB9tIIUibAdTtButef -JJRnikGRN+eHjrsLYe0RUmdKOQz1ik6teHt0MQX0aCe8OlXeyGDd9m8u7+y0nAnH -TVaNuT7vXMWyyXLVUcV898wkBo3Bo3hUiaw0QR0ttgDrf5ZwqPfqpytRW2K5GMZT -uw== ------END CERTIFICATE----- - - ------BEGIN CERTIFICATE----- -MIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL -MAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu -Yy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv -bWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB -IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a -6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U -8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm -AI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC -0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05 -PmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ -oy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo -MCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B -Af8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z -eW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0 -cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5 -bWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud -EQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU -bVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6 -Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8 -I2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv -7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD -1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU -Zs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB -fnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU= ------END CERTIFICATE-----""", - } - try: - resp = client.ucloudstack().create_certificate(d) - except exc.RetCodeException as e: - resp = e.json() - variables["CertificateID_server"] = utest.value_at_path( - resp, "CertificateID" - ) - return resp - - -@scenario.api( - title="创建证书", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateCertificateResponse"), - ], - action="CreateCertificate", -) -def create_certificate_10(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Name": "ssl_client", - "CertificateType": "CACrt", - "Certificate": """-----BEGIN CERTIFICATE----- -MIIFzTCCBLWgAwIBAgIQQ8IswmAhEIKfNhrKqb0F3DANBgkqhkiG9w0BAQsFADCB -lzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT -FERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM -IENBIC0gRzUwHhcNMTYxMjA2MDAwMDAwWhcNMTcxMjA2MjM1OTU5WjAgMR4wHAYD -VQQDDBVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDxBsuwGdCZdEUs40SQcvUt+9hlmLTgcfkq/h9f1QVPxLq/PC+O -sG76hOgy6N8f7k7x5XgtPKi9O4ydFl8ViYhEXRjYQcUrTm3lu7s9UT2AIUmK0dI+ -PZgFU5gDwh8fQLoL24T2lPfkD9TngCnDanfo3xbx/e9hsJkf7hKWix8zrxtYYCUT -t96pTpQeWjr7ggl2bDEfTayJNM+i5xoGBPiQFdxPnKWCjNmXi2dws0d2whi1euRW -gI5wIXji5WKfUf6EvzG0Uzz6i8vsSLGv8pL7C0AuUI4MrPNDesFeA2LEYclQkpHE -E49BkpQvCokCW9d8/r5ASUry+7SrJIncU6FxAgMBAAGjggKJMIIChTAgBgNVHREE -GTAXghVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBY -MFYGBmeBDAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2Nw -czAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSME -GDAWgBRtWMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l -BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8Bggr -BgEFBQcwAYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlk -YXRpb24uY29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGln -aXRhbGNlcnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEDBgorBgEE -AdZ5AgQCBIH0BIHxAO8AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+ -zAAAAVjT7zdSAAAEAwBGMEQCIDCzWufc1q7hjmrrCetGyoA8EsEqpRSIhmZXStX5 -8b7zAiA6x5aAaDK+yMyeAgw71yi3tRVrWayHN+W0+4BxC8u5UQB2AO5Lvbd1zmC6 -4UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWNPvN4kAAAQDAEcwRQIgZ/LNgg7n -7AE4O2yZkrXNcqAOmJ3NU2nT6zcnBxPFTTsCIQCjyPbMfWMZTD3kxgxPQ1COw5zJ -sM0dfNmSr3MiU7EhqDANBgkqhkiG9w0BAQsFAAOCAQEAeyfgUhg9ZWVCaz0f+BQU -6fMMfmQ1BDzvVFu+ORoAqyJQogxwIdfjrlz/63YFee5qpUsW/aaz4ma3bb4dpE1K -GsgYe5N3o0xybYlOj+KB61sufYkzQS3HgDevCwjfUlGEbNl4dpO2xh5s5AANXlnz -s/X0+AJ33/bm+fWIjAbIjluaEoM6GETHTXi4Tlxy0j3nsXsB9tIIUibAdTtButef -JJRnikGRN+eHjrsLYe0RUmdKOQz1ik6teHt0MQX0aCe8OlXeyGDd9m8u7+y0nAnH -TVaNuT7vXMWyyXLVUcV898wkBo3Bo3hUiaw0QR0ttgDrf5ZwqPfqpytRW2K5GMZT -uw== ------END CERTIFICATE----- - - ------BEGIN CERTIFICATE----- -MIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL -MAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu -Yy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv -bWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB -IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a -6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U -8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm -AI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC -0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05 -PmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ -oy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo -MCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B -Af8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z -eW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0 -cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5 -bWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud -EQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU -bVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6 -Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8 -I2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv -7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD -1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU -Zs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB -fnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU= ------END CERTIFICATE-----""", - } - try: - resp = client.ucloudstack().create_certificate(d) - except exc.RetCodeException as e: - resp = e.json() - variables["CertificateID_client"] = utest.value_at_path( - resp, "CertificateID" - ) - return resp - - -@scenario.api( - title="查询证书", - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeCertificateResponse"), - ], - action="DescribeCertificate", -) -def describe_certificate_11(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "CertificateType": "ServerCrt", - "CertificateIDs": [variables.get("CertificateID_server")], - } - try: - resp = client.ucloudstack().describe_certificate(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ssl_ser"] = utest.value_at_path(resp, "Infos.0.CertificateID") - return resp - - -@scenario.api( - title="查询证书", - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeCertificateResponse"), - ], - action="DescribeCertificate", -) -def describe_certificate_12(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "CertificateType": "CACrt", - "CertificateIDs": [variables.get("CertificateID_client")], - } - try: - resp = client.ucloudstack().describe_certificate(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ssl_cl"] = utest.value_at_path(resp, "Infos.0.CertificateID") - return resp - - -@scenario.api( - title="创建负载均衡", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateLBResponse"), - ], - action="CreateLB", -) -def create_lb_13(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VPCID": variables.get("VPCID"), - "VMType": "ComputeSetBBBB", - "SubnetID": variables.get("SubnetID"), - "Region": variables.get("Region"), - "Name": "lb_test1", - "LBType": "LAN", - "ChargeType": "Month", - } - try: - resp = client.ucloudstack().create_lb(d) - except exc.RetCodeException as e: - resp = e.json() - variables["LBID"] = utest.value_at_path(resp, "LBID") - return resp - - -@scenario.api( - title="获取负载均衡信息", - max_retries=3, - retry_interval=1, - startup_delay=90, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeLBResponse"), - ("str_eq", "Infos.0.LBStatus", "Running"), - ], - action="DescribeLB", -) -def describe_lb_14(step, client): - variables = step.store - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.ucloudstack().describe_lb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="创建负载均衡VServer", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateVSResponse"), - ], - action="CreateVS", -) -def create_vs_15(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "ServerCertificateID": variables.get("ssl_ser"), - "Scheduler": "wrr", - "SSLMode": "duplex", - "Region": variables.get("Region"), - "Protocol": "HTTPS", - "Port": 443, - "LBID": variables.get("LBID"), - "HealthcheckType": "Port", - "CACertificateID": variables.get("ssl_cl"), - } - try: - resp = client.ucloudstack().create_vs(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VSID"] = utest.value_at_path(resp, "VSID") - return resp - - -@scenario.api( - title="添加服务节点", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateRSResponse"), - ], - action="CreateRS", -) -def create_rs_16(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Weight": 1, - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "Port": 189, - "LBID": variables.get("LBID"), - "BindResourceID": variables.get("VMID"), - } - try: - resp = client.ucloudstack().create_rs(d) - except exc.RetCodeException as e: - resp = e.json() - variables["RSID"] = utest.value_at_path(resp, "RSID") - return resp - - -@scenario.api( - title="获取服务节点信息", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeRSResponse"), - ], - action="DescribeRS", -) -def describe_rs_17(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().describe_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="修改负载均衡VServer", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateVSResponse"), - ], - action="UpdateVS", -) -def update_vs_18(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Scheduler": "ip_hash", - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().update_vs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="移除服务节点", - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteRSResponse"), - ], - action="DeleteRS", -) -def delete_rs_19(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "RSID": variables.get("RSID"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().delete_rs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除VServer", - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteVSResponse"), - ], - action="DeleteVS", -) -def delete_vs_20(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VSID": variables.get("VSID"), - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().delete_vs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="查询操作日志", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeOPLogsResponse"), - ], - action="DescribeOPLogs", -) -def describe_op_logs_21(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "ResourceType": "lb", - "ResourceID": variables.get("LBID"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "IsSuccess": 1, - "EndTime": variables.get("EndTime"), - "BeginTime": variables.get("BeginTime"), - } - try: - resp = client.ucloudstack().describe_op_logs(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除负载均衡", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteLBResponse"), - ], - action="DeleteLB", -) -def delete_lb_22(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "LBID": variables.get("LBID"), - } - try: - resp = client.ucloudstack().delete_lb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除证书", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteCertificateResponse"), - ], - action="DeleteCertificate", -) -def delete_certificate_23(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "CertificateID": variables.get("CertificateID_server"), - } - try: - resp = client.ucloudstack().delete_certificate(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除证书", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteCertificateResponse"), - ], - action="DeleteCertificate", -) -def delete_certificate_24(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "CertificateID": variables.get("CertificateID_client"), - } - try: - resp = client.ucloudstack().delete_certificate(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="断电虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PoweroffVMInstanceResponse"), - ], - action="PoweroffVMInstance", -) -def poweroff_vm_instance_25(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMID": variables.get("VMID"), - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().poweroff_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="断电虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PoweroffVMInstanceResponse"), - ], - action="PoweroffVMInstance", -) -def poweroff_vm_instance_26(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMID": variables.get("VMID_1"), - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().poweroff_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteVMInstanceResponse"), - ], - action="DeleteVMInstance", -) -def delete_vm_instance_27(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMID": variables.get("VMID"), - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().delete_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.api( - title="删除虚拟机", - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteVMInstanceResponse"), - ], - action="DeleteVMInstance", -) -def delete_vm_instance_28(step, client): - variables = step.store - d = { - "Zone": variables.get("Zone"), - "VMID": variables.get("VMID_1"), - "Region": variables.get("Region"), - } - try: - resp = client.ucloudstack().delete_vm_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_core/__init__.py b/tests/test_core/__init__.py deleted file mode 100644 index 4c48b5a..0000000 --- a/tests/test_core/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_core/test_auth.py b/tests/test_core/test_auth.py deleted file mode 100644 index 4e085e7..0000000 --- a/tests/test_core/test_auth.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core import auth - - -def test_verify_ac(): - d = { - "Action": "CreateUHostInstance", - "CPU": 2, - "ChargeType": "Month", - "DiskSpace": 10, - "ImageId": "f43736e1-65a5-4bea-ad2e-8a46e18883c2", - "LoginMode": "Password", - "Memory": 2048, - "Name": "Host01", - "Password": "VUNsb3VkLmNu", - "PublicKey": "ucloudsomeone@example.com1296235120854146120", - "Quantity": 1, - "Region": "cn-bj2", - "Zone": "cn-bj2-04", - } - cred = auth.Credential( - "ucloudsomeone@example.com1296235120854146120", - "46f09bb9fab4f12dfc160dae12273d5332b5debe", - ) - assert cred.verify_ac(d) == "4f9ef5df2abab2c6fccd1e9515cb7e2df8c6bb65" diff --git a/tests/test_core/test_client.py b/tests/test_core/test_client.py deleted file mode 100644 index 08939db..0000000 --- a/tests/test_core/test_client.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import pytest -import logging -from ucloud.client import Client -from ucloud.core import exc -from ucloud.testing.mock import MockedTransport - -logger = logging.getLogger(__name__) - - -@pytest.fixture(scope="session", autouse=True) -def client(): - return Client( - { - "region": "cn-bj2", - "public_key": "foo", - "private_key": "foo", - "timeout": 10, - "max_retries": 3, - } - ) - - -@pytest.fixture(scope="function", autouse=True) -def transport(): - return MockedTransport() - - -class TestClient(object): - def test_client_invoke(self, client, transport): - transport.mock_data(lambda _: {"RetCode": 0, "Action": "Foo"}) - client.transport = transport - assert client.invoke("Foo") == {"RetCode": 0, "Action": "Foo"} - - def test_client_invoke_code_error(self, client, transport): - transport.mock_data(lambda _: {"RetCode": 171, "Action": "Foo"}) - client.transport = transport - with pytest.raises(exc.RetCodeException): - try: - client.invoke("Foo") - except exc.RetCodeException as e: - assert str(e) - expected = {"RetCode": 171, "Action": "Foo", "Message": ""} - assert e.json() == expected - raise e - - def test_client_invoke_with_retryable_error(self, client, transport): - transport.mock_data(lambda _: {"RetCode": 10000, "Action": "Foo"}) - client.transport = transport - with pytest.raises(exc.RetCodeException): - client.invoke("Foo") - - def test_client_invoke_with_unexpected_error(self, client, transport): - def raise_error(_): - raise ValueError("temporary error") - - transport.mock_data(raise_error) - client.transport = transport - with pytest.raises(ValueError): - client.invoke("Foo") - - def test_client_try_import(self, client): - assert client.pathx() - assert client.stepflow() - assert client.uaccount() - assert client.udb() - assert client.udpn() - assert client.udisk() - assert client.uhost() - assert client.ulb() - assert client.umem() - assert client.unet() - assert client.uphost() - assert client.vpc() diff --git a/tests/test_core/test_encoder.py b/tests/test_core/test_encoder.py deleted file mode 100644 index 2f82646..0000000 --- a/tests/test_core/test_encoder.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.core.typesystem import encoder - - -@pytest.mark.parametrize( - "input_vector,expected", - [ - ({"foo": "bar"}, {"foo": "bar"}), - ({"foo": 42}, {"foo": "42"}), - ({"foo": 42.42}, {"foo": "42.42"}), - ({"foo": 42.0}, {"foo": "42"}), - ({"foo": True}, {"foo": "true"}), - ({"foo": False}, {"foo": "false"}), - ({"IP": ["127.0.0.1"]}, {"IP.0": "127.0.0.1"}), - ({"TemplateParams": [u"中文"]}, {"TemplateParams.0": u"中文"}), - ({"IP": ["foo", "bar"]}, {"IP.0": "foo", "IP.1": "bar"}), - ({"IP": [{"foo": "bar"}]}, {"IP.0.foo": "bar"}), - ], -) -def test_params_encode(input_vector, expected): - result = encoder.encode(input_vector) - assert result == expected diff --git a/tests/test_core/test_exc.py b/tests/test_core/test_exc.py deleted file mode 100644 index 8777fd4..0000000 --- a/tests/test_core/test_exc.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.core import exc - - -def test_ret_code_error(): - assert not exc.UCloudException().retryable - code_error = exc.RetCodeException("Foo", 1, "") - assert str(code_error) - assert not code_error.retryable - assert code_error.json() == {"Action": "Foo", "Message": "", "RetCode": 1} - validate_error = exc.ValidationException(ValueError("invalid type")) - assert not validate_error.retryable - assert str(validate_error) diff --git a/tests/test_core/test_fields.py b/tests/test_core/test_fields.py deleted file mode 100644 index 4742d07..0000000 --- a/tests/test_core/test_fields.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import pytest -from ucloud.core import exc -from ucloud.core.typesystem import fields - -logger = logging.getLogger(__name__) - - -def test_field_str(): - s = fields.Str() - assert s.dumps(s.loads("foo")) == "foo" - with pytest.raises(exc.ValidationException): - fields.Str(strict=True).loads(42) - - -def test_field_int(): - i = fields.Int() - assert i.dumps(i.loads("42")) == 42 - with pytest.raises(exc.ValidationException): - fields.Int().dumps("foo") - with pytest.raises(exc.ValidationException): - fields.Int(strict=True).loads("42") - - -def test_field_float(): - f = fields.Float() - assert f.dumps(f.loads("42.0")) == 42.0 - with pytest.raises(exc.ValidationException): - fields.Float().dumps("foo") - with pytest.raises(exc.ValidationException): - fields.Float(strict=True).loads("42.0") - - -def test_field_bool(): - b = fields.Bool() - assert b.dumps(b.loads("true")) - assert not b.dumps(b.loads("false")) - with pytest.raises(exc.ValidationException): - fields.Bool().dumps("foo") - with pytest.raises(exc.ValidationException): - fields.Bool(strict=True).loads("true") - - -def test_field_list(): - l = fields.List(fields.Int()) - assert l.dumps(l.loads(["42"])) == [42] - with pytest.raises(exc.ValidationException): - fields.List(fields.Int(), strict=True).dumps(42) - with pytest.raises(exc.ValidationException): - fields.List(fields.Int()).dumps(["foo"]) - with pytest.raises(exc.ValidationException): - fields.List(fields.Int(strict=True)).loads(["42"]) - - -def test_field_base64(): - b64 = fields.Base64() - assert b64.loads("Zm9v") == "foo" - assert b64.dumps("foo") == "Zm9v" diff --git a/tests/test_core/test_schema.py b/tests/test_core/test_schema.py deleted file mode 100644 index 5271b19..0000000 --- a/tests/test_core/test_schema.py +++ /dev/null @@ -1,189 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import pytest -from ucloud.core import exc -from ucloud.core.typesystem import fields, schema - -logger = logging.getLogger(__name__) - - -def test_request_basic(): - class Schema(schema.RequestSchema): - fields = { - "Foo": fields.Int(required=True), - "Bar": fields.Int(required=False), - } - - assert Schema().dumps({"Foo": "42"}) == {"Foo": 42} - assert Schema().dumps({"Foo": "42"}) == {"Foo": 42} - with pytest.raises(exc.ValidationException): - Schema().dumps({}) - with pytest.raises(exc.ValidationException): - Schema().dumps({"Foo": "bar"}) - - -def test_request_array(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str())} - - d = Schema().dumps({"IP": ["127.0.0.1"]}) - assert d == {"IP": ["127.0.0.1"]} - d = Schema().dumps({}) - assert d == {"IP": []} - - -def test_request_array_with_default(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str(), default=["127.0.0.1"])} - - d = Schema().dumps({"IP": ["192.168.0.1"]}) - assert d == {"IP": ["192.168.0.1"]} - d = Schema().dumps({}) - assert d == {"IP": ["127.0.0.1"]} - - -def test_request_object_model(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedObjectSchema(schema.RequestSchema): - fields = {"Interface": Schema()} - - d = NestedObjectSchema().dumps({"Interface": {"IP": ["127.0.0.1"]}}) - assert d == {"Interface": {"IP": ["127.0.0.1"]}} - with pytest.raises(exc.ValidationException): - NestedObjectSchema().dumps({"Interface": 1}) - - -def test_request_array_model_with_default(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedArraySchema(schema.RequestSchema): - fields = { - "Interface": fields.List( - Schema(default=lambda: "127.0.0.1"), - default=lambda: [{"IP": ["192.168.1.1"]}], - ) - } - - d = NestedArraySchema().dumps({}) - assert d == {"Interface": [{"IP": ["192.168.1.1"]}]} - d = { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } - d = NestedArraySchema().dumps(d) - assert d == { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } - - -def test_response_basic(): - class Schema(schema.ResponseSchema): - fields = { - "Foo": fields.Int(required=True), - "Bar": fields.Int(required=False), - "Default": fields.Int(default=42), - "Call": fields.List(fields.Int(), default=list), - } - - assert Schema().dumps({"Foo": "42"}) == { - "Foo": 42, - "Default": 42, - "Call": [], - } - assert Schema().loads({"Foo": "42"}) == { - "Foo": 42, - "Default": 42, - "Call": [], - } - with pytest.raises(exc.ValidationException): - Schema().dumps({}) - with pytest.raises(exc.ValidationException): - Schema().dumps({"Foo": "bar"}) - with pytest.raises(exc.ValidationException): - Schema().dumps({}) - with pytest.raises(exc.ValidationException): - Schema().dumps({"Foo": "bar"}) - - -def test_response_array(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - d = Schema().loads({}) - assert d == {"IP": []} - d = Schema().loads({"IP": ["127.0.0.1"]}) - assert d == {"IP": ["127.0.0.1"]} - with pytest.raises(exc.ValidationException): - Schema().loads({"IP": 1}) - - -def test_response_array_with_default(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str(), default=["127.0.0.1"])} - - d = Schema().dumps({"IP": ["192.168.0.1"]}) - assert d == {"IP": ["192.168.0.1"]} - d = Schema().dumps({}) - assert d == {"IP": ["127.0.0.1"]} - - -def test_response_object_model(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedObjectSchema(schema.ResponseSchema): - fields = {"EIP": Schema()} - - d = NestedObjectSchema().loads({"EIP": {"IP": ["127.0.0.1"]}}) - assert d == {"EIP": {"IP": ["127.0.0.1"]}} - d = NestedObjectSchema().loads({}) - assert d == {"EIP": {"IP": []}} - - -def test_response_object_model_case_insensitive(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedObjectSchema(schema.ResponseSchema): - fields = {"EIP": Schema()} - - d = NestedObjectSchema().loads({"eip": {"Ip": ["127.0.0.1"]}}) - assert d == {"EIP": {"IP": ["127.0.0.1"]}} - - -def test_response_array_model_with_default(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedArraySchema(schema.ResponseSchema): - fields = { - "Interface": fields.List( - Schema(default=lambda: {"IP": ["127.0.0.1"]}), - default=lambda: [{"IP": ["192.168.1.1"]}], - ) - } - - d = NestedArraySchema().dumps({}) - assert d == {"Interface": [{"IP": ["192.168.1.1"]}]} - d = { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } - d = NestedArraySchema().dumps(d) - assert d == { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } diff --git a/tests/test_core/test_transport.py b/tests/test_core/test_transport.py deleted file mode 100644 index ec519fb..0000000 --- a/tests/test_core/test_transport.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -import logging -from ucloud.core.transport import RequestsTransport, Request, Response, utils - -logger = logging.getLogger(__name__) - - -@pytest.fixture(scope="function", autouse=True) -def transport(): - return RequestsTransport() - - -class TestTransport(object): - def test_transport_send(self, transport): - req = Request( - url="http://httpbin.org/anything", - method="post", - json={"foo": "bar"}, - ) - resp = transport.send(req) - assert resp.text - assert resp.json()["json"] == {"foo": "bar"} - - def test_transport_handler(self, transport): - global_env = {} - - def request_handler(r): - global_env["req"] = r - return r - - def response_handler(r): - global_env["resp"] = r - return r - - transport.middleware.request(handler=request_handler) - transport.middleware.response(handler=response_handler) - req = Request( - url="http://httpbin.org/anything", - method="post", - json={"foo": "bar"}, - ) - resp = transport.send(req) - assert resp.text - assert resp.json()["json"] == {"foo": "bar"} - assert "req" in global_env - assert "resp" in global_env - - -class TestResponse(object): - def test_guess_json_utf(self): - import json - - encodings = [ - "utf-32", - "utf-8-sig", - "utf-16", - "utf-8", - "utf-16-be", - "utf-16-le", - "utf-32-be", - "utf-32-le", - ] - for e in encodings: - s = json.dumps("表意字符").encode(e) - assert utils.guess_json_utf(s) == e - - def test_response_empty_content(self): - r = Response("http://foo.bar", "post") - assert not r.text - assert r.json() is None diff --git a/tests/test_helpers/__init__.py b/tests/test_helpers/__init__.py deleted file mode 100644 index 4c48b5a..0000000 --- a/tests/test_helpers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_helpers/test_utils.py b/tests/test_helpers/test_utils.py deleted file mode 100644 index ca328f3..0000000 --- a/tests/test_helpers/test_utils.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.helpers import utils - - -def test_b64encode(): - encoded = utils.b64encode("foobar42") - assert encoded == "Zm9vYmFyNDI=" - - -def test_b64decode(): - decoded = utils.b64decode("Zm9vYmFyNDI=") - assert decoded == "foobar42" diff --git a/tests/test_helpers/test_wait.py b/tests/test_helpers/test_wait.py deleted file mode 100644 index 993ba31..0000000 --- a/tests/test_helpers/test_wait.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.helpers import wait - - -def test_wait(): - with pytest.raises(wait.WaitTimeoutException): - wait.wait_for_state( - pending=["pending"], - target=["running"], - refresh=lambda: "pending", - timeout=0.5, - ) - wait.wait_for_state( - pending=["pending"], - target=["running"], - refresh=lambda: "running", - timeout=0.5, - ) diff --git a/tests/test_services/__init__.py b/tests/test_services/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/tests/test_services/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_services/conftest.py b/tests/test_services/conftest.py deleted file mode 100644 index 5e4dca4..0000000 --- a/tests/test_services/conftest.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import pytest -from ucloud.client import Client - - -@pytest.fixture(scope="session", autouse=True, name="client") -def client_factory(): - return Client( - { - "region": "cn-bj2", - "project_id": os.getenv("UCLOUD_PROJECT_ID"), - "public_key": os.getenv("UCLOUD_PUBLIC_KEY"), - "private_key": os.getenv("UCLOUD_PRIVATE_KEY"), - "max_retries": 10, - "timeout": 60, - } - ) - - -@pytest.fixture(scope="module", autouse=True, name="variables") -def variables_factory(): - return { - "Region": "cn-bj2", - "Zone": "cn-bj2-05", - "ProjectId": os.getenv("UCLOUD_PROJECT_ID"), - } diff --git a/tests/test_services/test_set_1073.py b/tests/test_services/test_set_1073.py deleted file mode 100644 index 7265c3c..0000000 --- a/tests/test_services/test_set_1073.py +++ /dev/null @@ -1,381 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(1073) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_1073(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "dXFhQHVjbG91ZA==" - scenario.variables["Type"] = "SSD-2" - scenario.variables["Name"] = "test123123" - scenario.variables["Remark"] = "test123123" - scenario.variables["ChargeType"] = "Month" - scenario.variables["ProjectId"] = "ohrg-xbbyex" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostImageResponse"), - ], - action="DescribePHostImage", -) -def describe_phost_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ImageType": "Base", - } - try: - resp = client.uphost().describe_phost_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID1"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - variables["ImageID2"] = utest.value_at_path(resp, "ImageSet.2.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetPHostPriceResponse"), - ], - action="GetPHostPrice", -) -def get_phost_price_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 1, - "Count": 1, - "ChargeType": "Month", - } - try: - resp = client.uphost().get_phost_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostTagsResponse"), - ], - action="DescribePHostTags", -) -def describe_phost_tags_02(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.uphost().describe_phost_tags(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreatePHostResponse"), - ], - action="CreatePHost", -) -def create_phost_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Remark": variables.get("Remark"), - "Region": variables.get("Region"), - "Password": variables.get("Password"), - "Name": variables.get("Name"), - "ImageId": variables.get("ImageID1"), - "ChargeType": variables.get("ChargeType"), - } - try: - resp = client.uphost().create_phost(d) - except exc.RetCodeException as e: - resp = e.json() - variables["PHost"] = utest.value_at_path(resp, "PHostId.0") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=60, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PHostType", variables.get("Type")), - ("str_eq", "PHostSet.0.Name", variables.get("Name")), - ("str_eq", "PHostSet.0.PHostId", variables.get("PHost")), - ("str_eq", "PHostSet.0.Remark", variables.get("Remark")), - ("str_eq", "PHostSet.0.Zone", variables.get("Zone")), - ("str_eq", "PHostSet.0.PMStatus", "Running"), - ], - action="DescribePHost", -) -def describe_phost_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("PHost")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=600, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "RebootPHostResponse"), - ], - action="RebootPHost", -) -def reboot_phost_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ProjectId": variables.get("ProjectId"), - "PHostId": variables.get("PHost"), - } - try: - resp = client.uphost().reboot_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=60, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "PHostSet.0.PMStatus", "Running"), - ], - action="DescribePHost", -) -def describe_phost_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("PHost")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopPHostResponse"), - ], - action="StopPHost", -) -def stop_phost_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ProjectId": variables.get("ProjectId"), - "PHostId": variables.get("PHost"), - } - try: - resp = client.invoke("StopPHost", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=60, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "PHostSet.0.PMStatus", "Stopped"), - ], - action="DescribePHost", -) -def describe_phost_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("PHost")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ReinstallPHostResponse"), - ], - action="ReinstallPHost", -) -def reinstall_phost_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Password": variables.get("Password"), - "PHostId": variables.get("PHost"), - "ImageId": variables.get("ImageID2"), - } - try: - resp = client.uphost().reinstall_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=60, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PHostType", variables.get("Type")), - ("str_eq", "PHostSet.0.Name", variables.get("Name")), - ("str_eq", "PHostSet.0.PHostId", variables.get("PHost")), - ("str_eq", "PHostSet.0.Remark", variables.get("Remark")), - ("str_eq", "PHostSet.0.Zone", variables.get("Zone")), - ("str_eq", "PHostSet.0.PMStatus", "Running"), - ], - action="DescribePHost", -) -def describe_phost_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("PHost")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PoweroffPHostResponse"), - ], - action="PoweroffPHost", -) -def poweroff_phost_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ProjectId": variables.get("ProjectId"), - "PHostId": variables.get("PHost"), - } - try: - resp = client.uphost().poweroff_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=60, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "PHostSet.0.PMStatus", "Stopped"), - ], - action="DescribePHost", -) -def describe_phost_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("PHost")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "TerminatePHostResponse"), - ], - action="TerminatePHost", -) -def terminate_phost_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ProjectId": variables.get("ProjectId"), - "PHostId": variables.get("PHost"), - } - try: - resp = client.uphost().terminate_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_113.py b/tests/test_services/test_set_113.py deleted file mode 100644 index 5bf1c3b..0000000 --- a/tests/test_services/test_set_113.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(113) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_113(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUFSVolume", -) -def create_ufs_volume_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1024, - "Region": variables.get("Region"), - } - try: - resp = client.invoke("CreateUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - variables["Volume_Id"] = utest.value_at_path(resp, "VolumeId") - variables["Volume_Name"] = utest.value_at_path(resp, "VolumeName") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUFSVolume", -) -def describe_ufs_volume_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "VolumeId": variables.get("Volume_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUHostLite", -) -def describe_uhost_lite_02(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.invoke("DescribeUHostLite", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUFSVolume", -) -def describe_ufs_volume_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "VolumeId": "Volume_Id", - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ClearUFSVolumeWhiteList", -) -def clear_ufs_volume_white_list_04(client, variables): - d = { - "VolumeId": variables.get("Volume_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("ClearUFSVolumeWhiteList", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUFSVolume", -) -def describe_ufs_volume_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "VolumeId": "Volume_Id", - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ExtendUFSVolume", -) -def extend_ufs_volume_06(client, variables): - d = { - "VolumeId": variables.get("Volume_Id"), - "Size": 2048, - "Region": variables.get("Region"), - } - try: - resp = client.invoke("ExtendUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUFSVolume", -) -def describe_ufs_volume_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "VolumeId": "Volume_Id", - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RemoveUFSVolume", -) -def remove_ufs_volume_08(client, variables): - d = { - "VolumeId": variables.get("Volume_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("RemoveUFSVolume", d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_1201.py b/tests/test_services/test_set_1201.py deleted file mode 100644 index 118c3bd..0000000 --- a/tests/test_services/test_set_1201.py +++ /dev/null @@ -1,309 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(1201) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_1201(client, variables): - scenario.initial(variables) - scenario.variables["ConfigId"] = "03f58ca9-b64d-4bdd-abc7-c6b9a46fd801" - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWE=" - scenario.variables["HighAvailability"] = "disable" - scenario.variables["Version"] = 3.2 - scenario.variables["Protocol"] = "redis" - scenario.variables["ResourceType"] = "single" - scenario.variables["Name"] = "single_redis" - scenario.run(client) - - -@scenario.step( - max_retries=60, - retry_interval=100, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateURedisGroup", -) -def create_uredis_group_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Version": variables.get("Version"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "Protocol": variables.get("Protocol"), - "Name": variables.get("Name"), - "HighAvailability": variables.get("HighAvailability"), - "ConfigId": variables.get("ConfigId"), - "ChargeType": "Month", - "BackupTime": 3, - "AutoBackup": "enable", - } - try: - resp = client.umem().create_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["group_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceType": variables.get("ResourceType"), - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ModifyURedisGroupNameResponse"), - ], - action="ModifyURedisGroupName", -) -def modify_uredis_group_name_02(client, variables): - d = { - "Region": variables.get("Region"), - "Name": "Redis_Change", - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().modify_uredis_group_name(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceType": variables.get("ResourceType"), - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeURedisGroup", -) -def resize_uredis_group_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 2, - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().resize_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceType": variables.get("ResourceType"), - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=60, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ModifyURedisGroupPassword", -) -def modify_uredis_group_password_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceType": variables.get("ResourceType"), - "Region": variables.get("Region"), - "Password": variables.get("Password"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.invoke("ModifyURedisGroupPassword", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckURedisAllowanceResponse"), - ], - action="CheckURedisAllowance", -) -def check_uredis_allowance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "SlaveZone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Count": 1, - } - try: - resp = client.invoke("CheckURedisAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=15, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteURedisGroupResponse"), - ], - action="DeleteURedisGroup", -) -def delete_uredis_group_09(client, variables): - d = { - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().delete_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeURedisGroupResponse"), - ("object_not_contains", "DataSet", variables.get("group_id")), - ], - action="DescribeURedisGroup", -) -def describe_uredis_group_10(client, variables): - d = { - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().describe_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_1202.py b/tests/test_services/test_set_1202.py deleted file mode 100644 index c0ce2a8..0000000 --- a/tests/test_services/test_set_1202.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(1202) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_1202(client, variables): - scenario.initial(variables) - scenario.variables["Protocol"] = "memcache" - scenario.variables["ResourceType"] = "distributed" - scenario.variables["Name"] = "distributed_memcache" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUMemSpace", -) -def create_umem_space_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 8, - "Region": variables.get("Region"), - "Quantity": 1, - "Protocol": variables.get("Protocol"), - "Name": variables.get("Name"), - "ChargeType": "Month", - } - try: - resp = client.umem().create_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Space_Id"] = utest.value_at_path(resp, "SpaceId") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_01(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUMemSpace", -) -def resize_umem_space_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Size": 14, - "Region": variables.get("Region"), - } - try: - resp = client.umem().resize_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_03(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUMem", -) -def delete_umem_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceType": variables.get("ResourceType"), - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DeleteUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUMemSpaceResponse"), - ("object_not_contains", "DataSet", variables.get("Space_Id")), - ], - action="DescribeUMemSpace", -) -def describe_umem_space_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.umem().describe_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_1203.py b/tests/test_services/test_set_1203.py deleted file mode 100644 index 411894c..0000000 --- a/tests/test_services/test_set_1203.py +++ /dev/null @@ -1,271 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(1203) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_1203(client, variables): - scenario.initial(variables) - scenario.variables["Protocol"] = "redis" - scenario.variables["Type"] = "double" - scenario.variables["Name"] = "distributed_redis" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckUMemSpaceAllowanceResponse"), - ], - action="CheckUMemSpaceAllowance", -) -def check_umem_space_allowance_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 16, - "Region": variables.get("Region"), - "Count": 1, - } - try: - resp = client.invoke("CheckUMemSpaceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUMemSpace", -) -def create_umem_space_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Type": variables.get("Type"), - "Size": 16, - "Region": variables.get("Region"), - "Quantity": 1, - "Protocol": variables.get("Protocol"), - "Name": variables.get("Name"), - "ChargeType": "Month", - } - try: - resp = client.umem().create_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Space_Id"] = utest.value_at_path(resp, "SpaceId") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_02(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ModifyUMemSpaceNameResponse"), - ], - action="ModifyUMemSpaceName", -) -def modify_umem_space_name_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Name": "Rename_FBS", - } - try: - resp = client.umem().modify_umem_space_name(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_04(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUMemSpaceStateResponse"), - ], - action="GetUMemSpaceState", -) -def get_umem_space_state_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.umem().get_umem_space_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUMemSpace", -) -def resize_umem_space_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Size": 17, - "Region": variables.get("Region"), - } - try: - resp = client.umem().resize_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=40, - retry_interval=10, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_07(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUMemSpaceResponse"), - ], - action="DeleteUMemSpace", -) -def delete_umem_space_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.umem().delete_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUMemResponse"), - ("object_not_contains", "DataSet", variables.get("Space_Id")), - ], - action="DescribeUMem", -) -def describe_umem_09(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_179.py b/tests/test_services/test_set_179.py deleted file mode 100644 index ad09177..0000000 --- a/tests/test_services/test_set_179.py +++ /dev/null @@ -1,405 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(179) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_179(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "mongodb-3.2" - scenario.variables["InstanceMode"] = "Normal" - scenario.variables["InstanceType"] = "Normal" - scenario.variables["Port"] = 27017 - scenario.variables["MemoryLimit"] = 600 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "AUTO-" - scenario.variables["UseSSD"] = False - scenario.variables["GroupName"] = "mongodb3.2默认WiredTiger-configsvr配置" - scenario.variables["GroupNameMongos"] = "mongodb3.2默认mongos配置" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBParamGroupResponse"), - ], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 1, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "GroupName", - variables.get("GroupName"), - "GroupId", - ), - "Name": "auto-config3.2", - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": "Normal", - "InstanceMode": "Configsvr", - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminUser": "root", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["configid"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=500, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("configid"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUDBRouteInstanceResponse"), - ], - action="CreateUDBRouteInstance", -) -def create_udb_route_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "GroupName", - variables.get("GroupNameMongos"), - "GroupId", - ), - "Name": "mongos-auto", - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ConfigsvrId": [variables.get("configid")], - } - try: - resp = client.udb().create_udb_route_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ModifyUDBInstanceName", -) -def modify_udb_instance_name_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Name": "Rename-auto-data3.0", - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().modify_udb_instance_name(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=180, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RestartUDBInstance", -) -def restart_udb_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().restart_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="BackupUDBInstanceErrorLog", -) -def backup_udb_instance_error_log_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "BackupName": "errorlog-test", - } - try: - resp = client.udb().backup_udb_instance_error_log(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBLogPackage", -) -def describe_udb_log_package_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Type": 4, - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_log_package(d) - except exc.RetCodeException as e: - resp = e.json() - variables["backupidlog"] = utest.value_at_path(resp, "DataSet.0.BackupId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - action="DescribeUDBBinlogBackupURL", -) -def describe_udb_binlog_backup_url_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "BackupId": variables.get("backupidlog"), - } - try: - resp = client.udb().describe_udb_binlog_backup_url(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBLogPackage", -) -def delete_udb_log_package_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "BackupId": variables.get("backupidlog"), - } - try: - resp = client.udb().delete_udb_log_package(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ClearUDBLog", -) -def clear_udb_log_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "LogType": 30, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().clear_udb_log(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("configid"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=90, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=90, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("configid"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_181.py b/tests/test_services/test_set_181.py deleted file mode 100644 index 92226ea..0000000 --- a/tests/test_services/test_set_181.py +++ /dev/null @@ -1,247 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(181) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_181(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "mongodb-3.0" - scenario.variables["InstanceMode"] = "Normal" - scenario.variables["InstanceType"] = "Normal" - scenario.variables["Port"] = 27017 - scenario.variables["MemoryLimit"] = 600 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "AUTO" - scenario.variables["UseSSD"] = False - scenario.variables["GroupName"] = "mongodb3.0默认MMAPv1-shardsvr配置" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBParamGroupResponse"), - ], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": True, - "Region": variables.get("Region"), - "MemoryLimit": 6000, - "DiskSpace": 200, - "Count": 1, - "ClassType": "sql", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 1, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "GroupName", - variables.get("GroupName"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminUser": "root", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBReplicationInstance", -) -def create_udb_replication_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "SrcId": variables.get("DBId"), - "Region": variables.get("Region"), - "Port": variables.get("Port"), - "Name": "second-auto", - } - try: - resp = client.udb().create_udb_replication_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["secondid"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("secondid"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("secondid"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_207.py b/tests/test_services/test_set_207.py deleted file mode 100644 index 2bd41ad..0000000 --- a/tests/test_services/test_set_207.py +++ /dev/null @@ -1,564 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(207) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_207(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "percona-5.7" - scenario.variables["InstanceMode"] = "Normal" - scenario.variables["InstanceType"] = "Normal" - scenario.variables["Port"] = 3306 - scenario.variables["MemoryLimit"] = 1000 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "auto_ptbz_" - scenario.variables["UseSSD"] = False - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstancePrice", -) -def describe_udb_instance_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "Count": 1, - } - try: - resp = client.udb().describe_udb_instance_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VirtualIP"] = utest.value_at_path(resp, "DataSet.0.VirtualIP") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstanceUpgradePrice", -) -def describe_udb_instance_upgrade_price_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit") + 1, - "DiskSpace": variables.get("DiskSpace") + 1, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit") + 1, - "DiskSpace": variables.get("DiskSpace") + 1, - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ResizeUDBInstanceResponse"), - ], - action="ResizeUDBInstance", -) -def resize_udb_instance_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "StartAfterUpgrade": True, - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit") + 1, - "DiskSpace": variables.get("DiskSpace") + 1, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().resize_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Running"), - ("str_eq", "DataSet.0.MemoryLimit", variables.get("MemoryLimit") + 1), - ("str_eq", "DataSet.0.DiskSpace", variables.get("DiskSpace") + 10), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckUDBInstanceToHAAllowanceResponse"), - ("str_eq", "Allowance", "Yes"), - ], - action="CheckUDBInstanceToHAAllowance", -) -def check_udb_instance_to_ha_allowance_12(client, variables): - d = {"Region": variables.get("Region"), "DBId": variables.get("DBId")} - try: - resp = client.udb().check_udb_instance_to_ha_allowance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePromoteToHAPriceResponse"), - ], - action="DescribePromoteToHAPrice", -) -def describe_promote_to_ha_price_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.invoke("DescribePromoteToHAPrice", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PromoteUDBInstanceToHAResponse"), - ], - action="PromoteUDBInstanceToHA", -) -def promote_udb_instance_to_ha_14(client, variables): - d = {"Region": variables.get("Region"), "DBId": variables.get("DBId")} - try: - resp = client.udb().promote_udb_instance_to_ha(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceStateResponse"), - ("str_eq", "State", "WaitForSwitch"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "SwitchUDBInstanceToHAResponse"), - ], - action="SwitchUDBInstanceToHA", -) -def switch_udb_instance_to_ha_16(client, variables): - d = {"Region": variables.get("Region"), "DBId": variables.get("DBId")} - try: - resp = client.udb().switch_udb_instance_to_ha(d) - except exc.RetCodeException as e: - resp = e.json() - variables["HADBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.VirtualIP", variables.get("VirtualIP")), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("HADBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("HADBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=6, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("HADBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUDBInstanceResponse"), - ], - action="DeleteUDBInstance", -) -def delete_udb_instance_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("HADBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_2117.py b/tests/test_services/test_set_2117.py deleted file mode 100644 index 1aa89a0..0000000 --- a/tests/test_services/test_set_2117.py +++ /dev/null @@ -1,272 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(2117) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_2117(client, variables): - scenario.initial(variables) - scenario.variables["ResourceType"] = "single" - scenario.variables["ConfigId"] = "9a891891-c245-4b66-bce8-67e59430d67c" - scenario.variables["Name"] = "single_memcache" - scenario.variables["Protocol"] = "memcache" - scenario.variables["Count"] = 1 - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUMemcacheGroupResponse"), - ], - action="CreateUMemcacheGroup", -) -def create_umem_cache_group_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "Name": variables.get("Name"), - "ConfigId": variables.get("ConfigId"), - "ChargeType": "Month", - } - try: - resp = client.umem().create_umem_cache_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["group_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckUMemcacheAllowanceResponse"), - ], - action="CheckUMemcacheAllowance", -) -def check_umem_cache_allowance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Count": variables.get("Count"), - } - try: - resp = client.invoke("CheckUMemcacheAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_02(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=100, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUMemcacheGroupResponse"), - ], - action="DescribeUMemcacheGroup", -) -def describe_umem_cache_group_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().describe_umem_cache_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUMemcacheGroup", -) -def resize_umem_cache_group_04(client, variables): - d = { - "Size": 2, - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.invoke("ResizeUMemcacheGroup", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_05(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RestartUMemcacheGroup", -) -def restart_umem_cache_group_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().restart_umem_cache_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_07(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUMemcacheGroupResponse"), - ], - action="DeleteUMemcacheGroup", -) -def delete_umem_cache_group_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().delete_umem_cache_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUMemResponse"), - ("object_not_contains", "DataSet", variables.get("group_id")), - ], - action="DescribeUMem", -) -def describe_umem_09(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_2174.py b/tests/test_services/test_set_2174.py deleted file mode 100644 index 68bb219..0000000 --- a/tests/test_services/test_set_2174.py +++ /dev/null @@ -1,302 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(2174) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_2174(client, variables): - scenario.initial(variables) - scenario.variables["ConfigId"] = "03f58ca9-b64d-4bdd-abc7-c6b9a46fd801" - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWE=" - scenario.variables["HighAvailability"] = "disable" - scenario.variables["Version"] = 3.2 - scenario.variables["Protocol"] = "redis" - scenario.variables["ResourceType"] = "single" - scenario.variables["Name"] = "single_redis" - scenario.run(client) - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateURedisGroup", -) -def create_uredis_group_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Version": variables.get("Version"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "Protocol": variables.get("Protocol"), - "Name": variables.get("Name"), - "HighAvailability": variables.get("HighAvailability"), - "ConfigId": variables.get("ConfigId"), - "ChargeType": "Month", - "BackupTime": 3, - "AutoBackup": "enable", - } - try: - resp = client.umem().create_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["group_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_01(client, variables): - d = { - "ResourceType": variables.get("ResourceType"), - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckURedisAllowanceResponse"), - ], - action="CheckURedisAllowance", -) -def check_uredis_allowance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "SlaveZone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Count": 1, - } - try: - resp = client.invoke("CheckURedisAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateURedisBackupResponse"), - ], - action="CreateURedisBackup", -) -def create_uredis_backup_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - "BackupName": "backup_Redis", - } - try: - resp = client.invoke("CreateURedisBackup", d) - except exc.RetCodeException as e: - resp = e.json() - variables["backup_id"] = utest.value_at_path(resp, "BackupId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_04(client, variables): - d = { - "ResourceType": variables.get("ResourceType"), - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": variables.get("Protocol"), - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeURedisBackupStateResponse"), - ], - action="DescribeURedisBackupState", -) -def describe_uredis_backup_state_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - "BackupId": variables.get("backup_id"), - } - try: - resp = client.invoke("DescribeURedisBackupState", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeURedisBackupResponse"), - ], - action="DescribeURedisBackup", -) -def describe_uredis_backup_06(client, variables): - d = {"Region": variables.get("Region")} - try: - resp = client.umem().describe_uredis_backup(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeURedisBackupURLResponse"), - ], - action="DescribeURedisBackupURL", -) -def describe_uredis_backup_url_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "BackupId": variables.get("backup_id"), - } - try: - resp = client.umem().describe_uredis_backup_url(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteURedisBackupResponse"), - ], - action="DeleteURedisBackup", -) -def delete_uredis_backup_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "BackupId": variables.get("backup_id"), - } - try: - resp = client.invoke("DeleteURedisBackup", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=15, - retry_interval=5, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteURedisGroupResponse"), - ], - action="DeleteURedisGroup", -) -def delete_uredis_group_09(client, variables): - d = { - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().delete_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeURedisGroupResponse"), - ("object_not_contains", "DataSet", variables.get("group_id")), - ], - action="DescribeURedisGroup", -) -def describe_uredis_group_10(client, variables): - d = { - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().describe_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_227.py b/tests/test_services/test_set_227.py deleted file mode 100644 index 541c251..0000000 --- a/tests/test_services/test_set_227.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(227) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_227(client, variables): - scenario.initial(variables) - scenario.run(client) - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateULB", -) -def create_ulb_00(client, variables): - d = { - "ULBName": "测试", - "Tag": "Default", - "Region": variables.get("Region"), - "OuterMode": "Yes", - "InnerMode": "No", - } - try: - resp = client.ulb().create_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ULBId_outer"] = utest.value_at_path(resp, "ULBId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 4107)], - action="CreateVServer", -) -def create_vserver_01(client, variables): - d = { - "VServerName": "vserver-http", - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - "Protocol": "HTTP", - "PersistenceType": "ServerInsert", - "Method": "Roundrobin", - "ListenType": "RequestProxy", - "FrontendPort": 80, - } - try: - resp = client.ulb().create_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeVServer", -) -def describe_vserver_02(client, variables): - d = { - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().describe_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 4107)], - action="CreateVServer", -) -def create_vserver_03(client, variables): - d = { - "VServerName": "vserver-https", - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - "Protocol": "HTTPS", - "PersistenceType": "UserDefined", - "PersistenceInfo": "huangchao", - "Method": "Source", - "ListenType": "RequestProxy", - "FrontendPort": 443, - "ClientTimeout": 60, - } - try: - resp = client.ulb().create_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeVServer", -) -def describe_vserver_04(client, variables): - d = { - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().describe_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 4107)], - action="CreateVServer", -) -def create_vserver_05(client, variables): - d = { - "VServerName": "vserver-https", - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - "Protocol": "TCP", - "PersistenceType": "None", - "Method": "Source", - "ListenType": "RequestProxy", - "FrontendPort": 1024, - } - try: - resp = client.ulb().create_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeVServer", -) -def describe_vserver_06(client, variables): - d = { - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().describe_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=10, - fast_fail=False, - action="DeleteULB", -) -def delete_ulb_07(client, variables): - d = { - "ULBId": variables.get("ULBId_outer"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().delete_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_230.py b/tests/test_services/test_set_230.py deleted file mode 100644 index 8cc36f5..0000000 --- a/tests/test_services/test_set_230.py +++ /dev/null @@ -1,322 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(230) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_230(client, variables): - scenario.initial(variables) - scenario.variables["sbw_name"] = "sbw_api_auto" - scenario.variables["sbw_chargetype"] = "Month" - scenario.variables["sbw_bw"] = 20 - scenario.variables["resize_bw"] = 22 - scenario.variables["Region"] = "cn-bj2" - scenario.variables["eip_operatorname"] = "Bgp" - scenario.variables["eip_bw"] = 2 - scenario.run(client) - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AllocateShareBandwidth", -) -def allocate_share_bandwidth_00(client, variables): - d = { - "ShareBandwidth": variables.get("sbw_bw"), - "Region": variables.get("Region"), - "Name": variables.get("sbw_name"), - "ChargeType": variables.get("sbw_chargetype"), - } - try: - resp = client.unet().allocate_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - variables["sbw_id"] = utest.value_at_path(resp, "ShareBandwidthId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AllocateEIP", -) -def allocate_eip_01(client, variables): - d = { - "Region": variables.get("Region"), - "PayMode": "Traffic", - "OperatorName": variables.get("eip_operatorname"), - "Name": "eip_auto", - "ChargeType": "Month", - "Bandwidth": variables.get("eip_bw"), - } - try: - resp = client.unet().allocate_eip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["eip_id"] = utest.value_at_path(resp, "EIPSet.0.EIPId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AssociateEIPWithShareBandwidth", -) -def associate_eip_with_share_bandwidth_02(client, variables): - d = { - "ShareBandwidthId": variables.get("sbw_id"), - "Region": variables.get("Region"), - "EIPIds": [variables.get("eip_id")], - } - try: - resp = client.unet().associate_eip_with_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("gt", "TotalPrice", 0), - ], - action="DescribeShareBandwidthPrice", -) -def describe_share_bandwidth_price_03(client, variables): - d = { - "ShareBandwidth": variables.get("sbw_bw"), - "Region": variables.get("Region"), - "Quantity": 1, - "ChargeType": variables.get("sbw_chargetype"), - } - try: - resp = client.invoke("DescribeShareBandwidthPrice", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.ShareBandwidthId", variables.get("sbw_id")), - ("str_eq", "DataSet.0.ShareBandwidth", variables.get("sbw_bw")), - ("str_eq", "DataSet.0.ChargeType", variables.get("sbw_chargetype")), - ("str_eq", "DataSet.0.Name", variables.get("sbw_name")), - ("str_eq", "TotalCount", 1), - ("str_eq", "DataSet.0.EIPSet.0.EIPId", variables.get("eip_id")), - ], - action="DescribeShareBandwidth", -) -def describe_share_bandwidth_04(client, variables): - d = { - "ShareBandwidthIds": [variables.get("sbw_id")], - "Region": variables.get("Region"), - } - try: - resp = client.unet().describe_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeShareBandwidth", -) -def resize_share_bandwidth_05(client, variables): - d = { - "ShareBandwidthId": variables.get("sbw_id"), - "ShareBandwidth": variables.get("resize_bw"), - "Region": variables.get("Region"), - } - try: - resp = client.unet().resize_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.ShareBandwidth", variables.get("resize_bw")), - ], - action="DescribeShareBandwidth", -) -def describe_share_bandwidth_06(client, variables): - d = { - "ShareBandwidthIds": [variables.get("sbw_id")], - "Region": variables.get("Region"), - } - try: - resp = client.unet().describe_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "EIPSet.0.BandwidthType", 1), - ("str_eq", "EIPSet.0.PayMode", "ShareBandwidth"), - ], - action="DescribeEIP", -) -def describe_eip_07(client, variables): - d = { - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "EIPIds": [variables.get("eip_id")], - } - try: - resp = client.unet().describe_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DisassociateEIPWithShareBandwidth", -) -def disassociate_eip_with_share_bandwidth_08(client, variables): - d = { - "ShareBandwidthId": variables.get("sbw_id"), - "Region": variables.get("Region"), - "EIPIds": [variables.get("eip_id")], - "Bandwidth": variables.get("eip_bw"), - } - try: - resp = client.unet().disassociate_eip_with_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "EIPSet.0.BandwidthType", 0), - ("str_eq", "EIPSet.0.PayMode", "Bandwidth"), - ], - action="DescribeEIP", -) -def describe_eip_09(client, variables): - d = { - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "EIPIds": [variables.get("eip_id")], - } - try: - resp = client.unet().describe_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("gt", "Info.BwOutSum", 0), - ("gt", "Info.BwOutShareSum", 0), - ("gt", "Info.BwOutAll", 0), - ], - action="GetBandwidthSum", -) -def get_bandwidth_sum_10(client, variables): - d = {"Region": variables.get("Region")} - try: - resp = client.invoke("GetBandwidthSum", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - action="ReleaseEIP", -) -def release_eip_11(client, variables): - d = {"Region": variables.get("Region"), "EIPId": variables.get("eip_id")} - try: - resp = client.unet().release_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ReleaseShareBandwidth", -) -def release_share_bandwidth_12(client, variables): - d = { - "ShareBandwidthId": variables.get("sbw_id"), - "Region": variables.get("Region"), - "EIPBandwidth": 2, - } - try: - resp = client.unet().release_share_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_2377.py b/tests/test_services/test_set_2377.py deleted file mode 100644 index 5bbc8b2..0000000 --- a/tests/test_services/test_set_2377.py +++ /dev/null @@ -1,439 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(2377) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_2377(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "YW4mODE1MDI5" - scenario.variables["Type"] = "GPU-2080-V5" - scenario.variables["ModifyName"] = "TestName" - scenario.variables["ModifyRemark"] = "TestRemark" - scenario.variables["Cluster"] = "10G" - scenario.variables["Raid"] = "NoRaid" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostImageResponse"), - ], - action="DescribePHostImage", -) -def describe_phost_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ImageType": "Base", - } - try: - resp = client.uphost().describe_phost_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID1"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostMachineTypeResponse"), - ], - action="DescribePHostMachineType", -) -def describe_phost_machine_type_01(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.invoke("DescribePHostMachineType", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResourceInfoResponse"), - ], - action="DescribePHostResourceInfo", -) -def describe_phost_resource_info_02(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.invoke("DescribePHostResourceInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreatePHostResponse"), - ], - action="CreatePHost", -) -def create_phost_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Type": variables.get("Type"), - "Region": variables.get("Region"), - "Raid": variables.get("Raid"), - "Password": variables.get("Password"), - "ImageId": variables.get("ImageID1"), - "Cluster": variables.get("Cluster"), - } - try: - resp = client.uphost().create_phost(d) - except exc.RetCodeException as e: - resp = e.json() - variables["phostId"] = utest.value_at_path(resp, "PHostId.0") - return resp - - -@scenario.step( - max_retries=120, - retry_interval=30, - startup_delay=20, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PMStatus", "Running"), - ], - action="DescribePHost", -) -def describe_phost_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("phostId")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetPHostKVMInfoResponse"), - ], - action="GetPHostKVMInfo", -) -def get_phost_kvm_info_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": variables.get("phostId"), - } - try: - resp = client.invoke("GetPHostKVMInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ModifyPHostInfoResponse"), - ], - action="ModifyPHostInfo", -) -def modify_phost_info_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Remark": variables.get("ModifyRemark"), - "Region": variables.get("Region"), - "PHostId": variables.get("phostId"), - "Name": variables.get("ModifyName"), - } - try: - resp = client.uphost().modify_phost_info(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.Name", variables.get("ModifyName")), - ("str_eq", "PHostSet.0.Remark", variables.get("ModifyRemark")), - ], - action="DescribePHost", -) -def describe_phost_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("phostId")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopPHostResponse"), - ], - action="StopPHost", -) -def stop_phost_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": variables.get("phostId"), - } - try: - resp = client.invoke("StopPHost", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PMStatus", "Stopped"), - ], - action="DescribePHost", -) -def describe_phost_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("phostId")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ReinstallPHostResponse"), - ], - action="ReinstallPHost", -) -def reinstall_phost_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Password": variables.get("Password"), - "PHostId": variables.get("phostId"), - "ImageId": variables.get("ImageID1"), - } - try: - resp = client.uphost().reinstall_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=60, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PMStatus", "Running"), - ], - action="DescribePHost", -) -def describe_phost_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("phostId")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PoweroffPHostResponse"), - ], - action="PoweroffPHost", -) -def poweroff_phost_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": variables.get("phostId"), - } - try: - resp = client.uphost().poweroff_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=60, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PMStatus", "Stopped"), - ], - action="DescribePHost", -) -def describe_phost_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("phostId")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=30, - startup_delay=20, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StartPHostResponse"), - ], - action="StartPHost", -) -def start_phost_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": variables.get("phostId"), - } - try: - resp = client.uphost().start_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=30, - startup_delay=20, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribePHostResponse"), - ("str_eq", "PHostSet.0.PMStatus", "Running"), - ], - action="DescribePHost", -) -def describe_phost_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": [variables.get("phostId")], - } - try: - resp = client.uphost().describe_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "TerminatePHostResponse"), - ], - action="TerminatePHost", -) -def terminate_phost_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "PHostId": variables.get("phostId"), - } - try: - resp = client.uphost().terminate_phost(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_242.py b/tests/test_services/test_set_242.py deleted file mode 100644 index 688e06d..0000000 --- a/tests/test_services/test_set_242.py +++ /dev/null @@ -1,292 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(242) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_242(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeURedisPrice", -) -def describe_uredis_price_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.umem().describe_uredis_price(d) - except exc.RetCodeException as e: - resp = e.json() - variables["GetPrice"] = utest.value_at_path(resp, "DataSet.0.Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateURedisGroup", -) -def create_uredis_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "Protocol": "redis", - "Name": "Redis_zb", - "HighAvailability": "disable", - "ChargeType": "Month", - } - try: - resp = client.umem().create_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["group_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=120, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUMem", -) -def describe_umem_02(client, variables): - d = { - "ResourceType": "single", - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": "redis", - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - variables["CreateTime"] = utest.value_at_path(resp, "DataSet.0.CreateTime") - return resp - - -@scenario.step( - max_retries=5, - retry_interval=1, - startup_delay=100, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("float_eq", "OrderInfos.0.Amount", variables.get("GetPrice") / 100), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_03(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "QueryAll": True, - "OrderTypes": ["OT_BUY"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeURedisUpgradePrice", -) -def describe_uredis_upgrade_price_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 2, - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().describe_uredis_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - variables["UpgradePrice"] = utest.value_at_path(resp, "Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeURedisGroup", -) -def resize_uredis_group_05(client, variables): - d = { - "Size": 2, - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().resize_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=1, - startup_delay=100, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "lt", - "OrderInfos.0.Amount", - variables.get("UpgradePrice") / 100 + 0.1, - ), - ( - "gt", - "OrderInfos.0.Amount", - variables.get("UpgradePrice") / 100 - 0.1, - ), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_06(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "QueryAll": True, - "OrderTypes": ["OT_UPGRADE"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="GetResourceRenewPrice", -) -def get_resource_renew_price_07(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.invoke("GetResourceRenewPrice", d) - except exc.RetCodeException as e: - resp = e.json() - variables["ReNewPrice"] = utest.value_at_path(resp, "RenewPriceSet.0.Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateRenew", -) -def create_renew_08(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.invoke("CreateRenew", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "OrderInfos.0.Amount", variables.get("ReNewPrice")) - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_09(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "QueryAll": True, - "OrderTypes": ["OT_RENEW"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - action="DeleteURedisGroup", -) -def delete_uredis_group_10(client, variables): - d = { - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().delete_uredis_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_245.py b/tests/test_services/test_set_245.py deleted file mode 100644 index e826a8f..0000000 --- a/tests/test_services/test_set_245.py +++ /dev/null @@ -1,295 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(245) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_245(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUMemSpace", -) -def create_umem_space_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Type": "double", - "Size": 16, - "Region": variables.get("Region"), - "Quantity": 1, - "Protocol": "redis", - "Name": "Redis_fbs", - "ChargeType": "Month", - } - try: - resp = client.umem().create_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Space_Id"] = utest.value_at_path(resp, "SpaceId") - return resp - - -@scenario.step( - max_retries=20, - retry_interval=10, - startup_delay=50, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUMem", -) -def describe_umem_01(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - "Protocol": "redis", - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - variables["CreateTime"] = utest.value_at_path(resp, "DataSet.0.CreateTime") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUMemPrice", -) -def describe_umem_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Type": "double", - "Size": 16, - "Region": variables.get("Region"), - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.umem().describe_umem_price(d) - except exc.RetCodeException as e: - resp = e.json() - variables["GetPrice"] = utest.value_at_path(resp, "DataSet.0.Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("le", "OrderInfos.0.Amount", variables.get("GetPrice") / 100 + 0.6), - ("gt", "OrderInfos.0.Amount", variables.get("GetPrice") / 100 - 0.6), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_03(client, variables): - d = { - "ResourceIds": [variables.get("Space_Id")], - "QueryAll": True, - "OrderTypes": ["OT_BUY"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUMemUpgradePrice", -) -def describe_umem_upgrade_price_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Type": "double", - "SpaceId": variables.get("Space_Id"), - "Size": 18, - "Region": variables.get("Region"), - } - try: - resp = client.umem().describe_umem_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - variables["UpgradePrice"] = utest.value_at_path(resp, "Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUMemSpace", -) -def resize_umem_space_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Size": 18, - "Region": variables.get("Region"), - } - try: - resp = client.umem().resize_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "lt", - "OrderInfos.0.Amount", - variables.get("UpgradePrice") / 100 + 0.1, - ), - ( - "gt", - "OrderInfos.0.Amount", - variables.get("UpgradePrice") / 100 - 0.1, - ), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_06(client, variables): - d = { - "ResourceIds": [variables.get("Space_Id")], - "QueryAll": True, - "OrderTypes": ["OT_UPGRADE"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="GetResourceRenewPrice", -) -def get_resource_renew_price_07(client, variables): - d = { - "ResourceIds": [variables.get("Space_Id")], - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.invoke("GetResourceRenewPrice", d) - except exc.RetCodeException as e: - resp = e.json() - variables["ReNewPrice"] = utest.value_at_path(resp, "RenewPriceSet.0.Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateRenew", -) -def create_renew_08(client, variables): - d = { - "ResourceId": variables.get("Space_Id"), - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.invoke("CreateRenew", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "OrderInfos.0.Amount", variables.get("ReNewPrice")), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_09(client, variables): - d = { - "ResourceIds": [variables.get("Space_Id")], - "QueryAll": True, - "OrderTypes": ["OT_RENEW"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - action="DeleteUMemSpace", -) -def delete_umem_space_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "SpaceId": variables.get("Space_Id"), - "Region": variables.get("Region"), - } - try: - resp = client.umem().delete_umem_space(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_2457.py b/tests/test_services/test_set_2457.py deleted file mode 100644 index 4123529..0000000 --- a/tests/test_services/test_set_2457.py +++ /dev/null @@ -1,569 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(2457) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_2457(client, variables): - scenario.initial(variables) - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateVPC", -) -def create_vpc_00(client, variables): - d = { - "Region": variables.get("Region"), - "Network": ["192.168.0.0/16"], - "Name": "ulb-ssl-vpc", - } - try: - resp = client.vpc().create_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - variables["vpc_id"] = utest.value_at_path(resp, "VPCId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateSubnet", -) -def create_subnet_01(client, variables): - d = { - "VPCId": variables.get("vpc_id"), - "SubnetName": "ulb-ssl-subnet", - "Subnet": "192.168.111.0", - "Region": variables.get("Region"), - } - try: - resp = client.vpc().create_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - variables["subnet_id"] = utest.value_at_path(resp, "SubnetId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateULB", -) -def create_ulb_02(client, variables): - d = { - "VPCId": variables.get("vpc_id"), - "ULBName": "ulb-ssl-test", - "Tag": "Default", - "SubnetId": variables.get("subnet_id"), - "Region": variables.get("Region"), - "InnerMode": "No", - "ChargeType": "Dynamic", - } - try: - resp = client.ulb().create_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ULBId"] = utest.value_at_path(resp, "ULBId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateVServer", -) -def create_vserver_03(client, variables): - d = { - "VServerName": "vserver-test", - "ULBId": variables.get("ULBId"), - "Region": variables.get("Region"), - "Protocol": "HTTPS", - "PersistenceType": "UserDefined", - "PersistenceInfo": "huangchao", - "Method": "Roundrobin", - "ListenType": "RequestProxy", - "FrontendPort": 443, - "ClientTimeout": 60, - } - try: - resp = client.ulb().create_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VServerId"] = utest.value_at_path(resp, "VServerId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateSSL", -) -def create_ssl_04(client, variables): - d = { - "UserCert": """-----BEGIN CERTIFICATE----- -MIIFzTCCBLWgAwIBAgIQQ8IswmAhEIKfNhrKqb0F3DANBgkqhkiG9w0BAQsFADCB -lzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT -FERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM -IENBIC0gRzUwHhcNMTYxMjA2MDAwMDAwWhcNMTcxMjA2MjM1OTU5WjAgMR4wHAYD -VQQDDBVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDxBsuwGdCZdEUs40SQcvUt+9hlmLTgcfkq/h9f1QVPxLq/PC+O -sG76hOgy6N8f7k7x5XgtPKi9O4ydFl8ViYhEXRjYQcUrTm3lu7s9UT2AIUmK0dI+ -PZgFU5gDwh8fQLoL24T2lPfkD9TngCnDanfo3xbx/e9hsJkf7hKWix8zrxtYYCUT -t96pTpQeWjr7ggl2bDEfTayJNM+i5xoGBPiQFdxPnKWCjNmXi2dws0d2whi1euRW -gI5wIXji5WKfUf6EvzG0Uzz6i8vsSLGv8pL7C0AuUI4MrPNDesFeA2LEYclQkpHE -E49BkpQvCokCW9d8/r5ASUry+7SrJIncU6FxAgMBAAGjggKJMIIChTAgBgNVHREE -GTAXghVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBY -MFYGBmeBDAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2Nw -czAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSME -GDAWgBRtWMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l -BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8Bggr -BgEFBQcwAYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlk -YXRpb24uY29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGln -aXRhbGNlcnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEDBgorBgEE -AdZ5AgQCBIH0BIHxAO8AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+ -zAAAAVjT7zdSAAAEAwBGMEQCIDCzWufc1q7hjmrrCetGyoA8EsEqpRSIhmZXStX5 -8b7zAiA6x5aAaDK+yMyeAgw71yi3tRVrWayHN+W0+4BxC8u5UQB2AO5Lvbd1zmC6 -4UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWNPvN4kAAAQDAEcwRQIgZ/LNgg7n -7AE4O2yZkrXNcqAOmJ3NU2nT6zcnBxPFTTsCIQCjyPbMfWMZTD3kxgxPQ1COw5zJ -sM0dfNmSr3MiU7EhqDANBgkqhkiG9w0BAQsFAAOCAQEAeyfgUhg9ZWVCaz0f+BQU -6fMMfmQ1BDzvVFu+ORoAqyJQogxwIdfjrlz/63YFee5qpUsW/aaz4ma3bb4dpE1K -GsgYe5N3o0xybYlOj+KB61sufYkzQS3HgDevCwjfUlGEbNl4dpO2xh5s5AANXlnz -s/X0+AJ33/bm+fWIjAbIjluaEoM6GETHTXi4Tlxy0j3nsXsB9tIIUibAdTtButef -JJRnikGRN+eHjrsLYe0RUmdKOQz1ik6teHt0MQX0aCe8OlXeyGDd9m8u7+y0nAnH -TVaNuT7vXMWyyXLVUcV898wkBo3Bo3hUiaw0QR0ttgDrf5ZwqPfqpytRW2K5GMZT -uw== ------END CERTIFICATE----- - - ------BEGIN CERTIFICATE----- -MIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL -MAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu -Yy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv -bWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB -IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a -6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U -8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm -AI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC -0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05 -PmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ -oy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo -MCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B -Af8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z -eW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0 -cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5 -bWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud -EQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU -bVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6 -Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8 -I2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv -7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD -1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU -Zs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB -fnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU= ------END CERTIFICATE-----""", - "SSLName": "证书-1", - "Region": variables.get("Region"), - "PrivateKey": "abc", - "CaCert": """-----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA8QbLsBnQmXRFLONEkHL1LfvYZZi04HH5Kv4fX9UFT8S6vzwv -jrBu+oToMujfH+5O8eV4LTyovTuMnRZfFYmIRF0Y2EHFK05t5bu7PVE9gCFJitHS -Pj2YBVOYA8IfH0C6C9uE9pT35A/U54Apw2p36N8W8f3vYbCZH+4SlosfM68bWGAl -E7feqU6UHlo6+4IJdmwxH02siTTPoucaBgT4kBXcT5ylgozZl4tncLNHdsIYtXrk -VoCOcCF44uVin1H+hL8xtFM8+ovL7Eixr/KS+wtALlCODKzzQ3rBXgNixGHJUJKR -xBOPQZKULwqJAlvXfP6+QElK8vu0qySJ3FOhcQIDAQABAoIBAAPvZnfzk/JNcauv -8jihh9s+V2QhQCLB+Z14FK8N3U5WGe5xXx1nSAiTDu912d69l1BfvLyQVvjv9fXC -nb7ORglHs9YkDMIOP8EWdZIkt2pWIMtBbbtSah78JGk7TCLIfcEfzmXwPLPehk1Z -TFVCcb69lbRRvwzLQ1TAIFGQ5+uCEkW02KAl6kx+JnVpsE8/BjqZKG1Ne+sM6dOC -GRd44hgiNHKUT3Xtbw6jttiUFDLKYMYtb7PpRAkZFM8tgnBV6dWWJ3xTYW9kOjPh -XnScNARfphUZVibRhA04og5p1q/MUz9Sz9g2DURuSlo/MP3WZMbVRvZiUN1xhz5v -2WhsddkCgYEA+gWPFo0TbVbZXUrx9J/ptI9NXNx5zjyUrv87MDt1pnmMDgWrsCEI -RqQR4Lp2G11GA7IudiA/ipcZqgcRIIFvb+gu1kObox3BGGs59x+DqFeAPXt6dFG2 -W10f9k96/tcbdursurqwd3Zv3cqQqRTKgaP4xHFmexlcwGCF5YwewWMCgYEA9sos -2acNINXwcNRUPnpg82DOrG9Zjr1aiNo9PDJmwGEdC9QMOUWM85dq0M9g388ttiLU -Wr/U4r5yDuqWJPcKtff2BaxSsZpcQ4Id9eddD9L+sxaBGyD23RtOC+IOlkG6WS4g -iUYulQvW69tBHWiwxQu7YMSIE2B3EuySPOQYlBsCgYEAxNwvqB/4lfT2PUDPdj+b -cnILBf0LY1nL8GZCol2O6z91CW1pm8rGi2iQMxRd/nnYsPxRHO2TWnpS2M+rqp5/ -settRYQCPdMlwSZcg7oqnhgXf1GEP6Y/IX0Xt4cpXxLcKywarYRlggqdVlMyyA74 -zE7hhzuK5442u7rEctN7O+UCgYAoM78ipafp1XAZsT0YAG+Stg504J7CNe5tpL+c -8sjyRd+pcZ2cJsxTUjNAWMf7LZDQvtPBBMb1OPjznRtgYi4IfqBBRFUkQXUOOkAP -MuViEokTO3NErBYK5svL+8NMjuCAbpc2RYyJEyiru0fcNpW1Q7f+h4VzQp+jIY6h -BLdMSQKBgGauU7OQksZCEY2MVAcD5dShYYvWLxOkj4dVVwISN1M6ImCAHwXZ6Nak -6YlzCGT+NbRJbB2cPfsrKXtAJVX15I3iDCKAoGkb+9kiHnPj7Q71KVuWQE6BQx7E -vE88TSsshwtX1s+qU9UWUrMPodK32q5nO3p8N033NvS9wLNfbcdc ------END RSA PRIVATE KEY-----""", - } - try: - resp = client.ulb().create_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SSLId_01"] = utest.value_at_path(resp, "SSLId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateSSL", -) -def create_ssl_05(client, variables): - d = { - "UserCert": """-----BEGIN CERTIFICATE----- -MIIFzTCCBLWgAwIBAgIQQ8IswmAhEIKfNhrKqb0F3DANBgkqhkiG9w0BAQsFADCB -lzELMAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsT -FERvbWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NM -IENBIC0gRzUwHhcNMTYxMjA2MDAwMDAwWhcNMTcxMjA2MjM1OTU5WjAgMR4wHAYD -VQQDDBVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDxBsuwGdCZdEUs40SQcvUt+9hlmLTgcfkq/h9f1QVPxLq/PC+O -sG76hOgy6N8f7k7x5XgtPKi9O4ydFl8ViYhEXRjYQcUrTm3lu7s9UT2AIUmK0dI+ -PZgFU5gDwh8fQLoL24T2lPfkD9TngCnDanfo3xbx/e9hsJkf7hKWix8zrxtYYCUT -t96pTpQeWjr7ggl2bDEfTayJNM+i5xoGBPiQFdxPnKWCjNmXi2dws0d2whi1euRW -gI5wIXji5WKfUf6EvzG0Uzz6i8vsSLGv8pL7C0AuUI4MrPNDesFeA2LEYclQkpHE -E49BkpQvCokCW9d8/r5ASUry+7SrJIncU6FxAgMBAAGjggKJMIIChTAgBgNVHREE -GTAXghVtLmVjb2xvZ3ktZW1vYmlsZS5jb20wCQYDVR0TBAIwADBhBgNVHSAEWjBY -MFYGBmeBDAECATBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2Nw -czAlBggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSME -GDAWgBRtWMd/GufhPy6mjJc1Qrv00zisPzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l -BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMIGbBggrBgEFBQcBAQSBjjCBizA8Bggr -BgEFBQcwAYYwaHR0cDovL3RydXN0YXNpYTItb2NzcC5kaWdpdGFsY2VydHZhbGlk -YXRpb24uY29tMEsGCCsGAQUFBzAChj9odHRwOi8vdHJ1c3Rhc2lhMi1haWEuZGln -aXRhbGNlcnR2YWxpZGF0aW9uLmNvbS90cnVzdGFzaWFnNS5jcnQwggEDBgorBgEE -AdZ5AgQCBIH0BIHxAO8AdQDd6x0reg1PpiCLga2BaHB+Lo6dAdVciI09EcTNtuy+ -zAAAAVjT7zdSAAAEAwBGMEQCIDCzWufc1q7hjmrrCetGyoA8EsEqpRSIhmZXStX5 -8b7zAiA6x5aAaDK+yMyeAgw71yi3tRVrWayHN+W0+4BxC8u5UQB2AO5Lvbd1zmC6 -4UJpH6vhnmajD35fsHLYgwDEe4l6qP3LAAABWNPvN4kAAAQDAEcwRQIgZ/LNgg7n -7AE4O2yZkrXNcqAOmJ3NU2nT6zcnBxPFTTsCIQCjyPbMfWMZTD3kxgxPQ1COw5zJ -sM0dfNmSr3MiU7EhqDANBgkqhkiG9w0BAQsFAAOCAQEAeyfgUhg9ZWVCaz0f+BQU -6fMMfmQ1BDzvVFu+ORoAqyJQogxwIdfjrlz/63YFee5qpUsW/aaz4ma3bb4dpE1K -GsgYe5N3o0xybYlOj+KB61sufYkzQS3HgDevCwjfUlGEbNl4dpO2xh5s5AANXlnz -s/X0+AJ33/bm+fWIjAbIjluaEoM6GETHTXi4Tlxy0j3nsXsB9tIIUibAdTtButef -JJRnikGRN+eHjrsLYe0RUmdKOQz1ik6teHt0MQX0aCe8OlXeyGDd9m8u7+y0nAnH -TVaNuT7vXMWyyXLVUcV898wkBo3Bo3hUiaw0QR0ttgDrf5ZwqPfqpytRW2K5GMZT -uw== ------END CERTIFICATE----- - - ------BEGIN CERTIFICATE----- -MIIFZTCCBE2gAwIBAgIQOhAOfxCeGsWcxf/2QNXkQjANBgkqhkiG9w0BAQsFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMTYwODExMDAwMDAwWhcNMjYwODEwMjM1OTU5WjCBlzEL -MAkGA1UEBhMCQ04xJTAjBgNVBAoTHFRydXN0QXNpYSBUZWNobm9sb2dpZXMsIElu -Yy4xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxHTAbBgNVBAsTFERv -bWFpbiBWYWxpZGF0ZWQgU1NMMSEwHwYDVQQDExhUcnVzdEFzaWEgRFYgU1NMIENB -IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC39aSJZG/97x3a -6Qmuc9+MubagegRAVUmFYHTYTs8IKB2pM7wXN7W8mekdZaEgUjDFxvRBK/DhTb7U -8ONLsKKdT86aOhzbz2noCTn9wPWnGwkg+/4YKg/dPQQdV9tMsSu0cwqInWHxSAkm -AI1hYFC9D7Sf7Hp/5cRcD+dK454YMRzNOGLQnCVI8JEqrz6o9SOvQNTqTcfqt6DC -0UlXG+MPD1eNPjlzf1Vwaab+VSTgySoC+Ikbq2VsdykeOiGXW/OIiASH7+2LcR05 -PmQ7GEOlM8yzoVojFpM8sHz+WxI05ZOPri5+vX3HhHHjWr5432G0dVmgohnZvlVZ -oy8XrlbpAgMBAAGjggF2MIIBcjASBgNVHRMBAf8ECDAGAQH/AgEAMC8GA1UdHwQo -MCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAOBgNVHQ8B -Af8EBAMCAQYwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzABhhJodHRwOi8vcy5z -eW1jZC5jb20wYQYDVR0gBFowWDBWBgZngQwBAgEwTDAjBggrBgEFBQcCARYXaHR0 -cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5 -bWNiLmNvbS9ycGEwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCkGA1Ud -EQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0yLTYwMTAdBgNVHQ4EFgQU -bVjHfxrn4T8upoyXNUK79NM4rD8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6 -Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBABUphhBbeG7scE3EveIN0dOjXPgwgQi8 -I2ZAKYm6DawoGz1lEJVdvFmkyMbP973X80b7mKmn0nNbe1kjA4M0O0hHaMM1ZaEv -7e9vHEAoGyysMO6HzPWYMkyNxcCV7Nos2Uv4RvLDpQHh7P4Kt6fUU13ipcynrtQD -1lFUM0yoTzwwFsPu3Pk+94hL58ErqwqJQwxoHMgLIQeMVHeNKcWFy1bddSbIbCWU -Zs6cMxhrra062ZCpDCbxyEaFNGAtYQMqNz55Z/14XgSUONZ/cJTns6QKhpcgTOwB -fnNzRnk+aWreP7osKhXlz4zs+llP7goBDKFOMMtoEXx3YjJCKgpqmBU= ------END CERTIFICATE-----""", - "SSLName": "证书-2", - "Region": variables.get("Region"), - "PrivateKey": "abc", - "CaCert": """-----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA8QbLsBnQmXRFLONEkHL1LfvYZZi04HH5Kv4fX9UFT8S6vzwv -jrBu+oToMujfH+5O8eV4LTyovTuMnRZfFYmIRF0Y2EHFK05t5bu7PVE9gCFJitHS -Pj2YBVOYA8IfH0C6C9uE9pT35A/U54Apw2p36N8W8f3vYbCZH+4SlosfM68bWGAl -E7feqU6UHlo6+4IJdmwxH02siTTPoucaBgT4kBXcT5ylgozZl4tncLNHdsIYtXrk -VoCOcCF44uVin1H+hL8xtFM8+ovL7Eixr/KS+wtALlCODKzzQ3rBXgNixGHJUJKR -xBOPQZKULwqJAlvXfP6+QElK8vu0qySJ3FOhcQIDAQABAoIBAAPvZnfzk/JNcauv -8jihh9s+V2QhQCLB+Z14FK8N3U5WGe5xXx1nSAiTDu912d69l1BfvLyQVvjv9fXC -nb7ORglHs9YkDMIOP8EWdZIkt2pWIMtBbbtSah78JGk7TCLIfcEfzmXwPLPehk1Z -TFVCcb69lbRRvwzLQ1TAIFGQ5+uCEkW02KAl6kx+JnVpsE8/BjqZKG1Ne+sM6dOC -GRd44hgiNHKUT3Xtbw6jttiUFDLKYMYtb7PpRAkZFM8tgnBV6dWWJ3xTYW9kOjPh -XnScNARfphUZVibRhA04og5p1q/MUz9Sz9g2DURuSlo/MP3WZMbVRvZiUN1xhz5v -2WhsddkCgYEA+gWPFo0TbVbZXUrx9J/ptI9NXNx5zjyUrv87MDt1pnmMDgWrsCEI -RqQR4Lp2G11GA7IudiA/ipcZqgcRIIFvb+gu1kObox3BGGs59x+DqFeAPXt6dFG2 -W10f9k96/tcbdursurqwd3Zv3cqQqRTKgaP4xHFmexlcwGCF5YwewWMCgYEA9sos -2acNINXwcNRUPnpg82DOrG9Zjr1aiNo9PDJmwGEdC9QMOUWM85dq0M9g388ttiLU -Wr/U4r5yDuqWJPcKtff2BaxSsZpcQ4Id9eddD9L+sxaBGyD23RtOC+IOlkG6WS4g -iUYulQvW69tBHWiwxQu7YMSIE2B3EuySPOQYlBsCgYEAxNwvqB/4lfT2PUDPdj+b -cnILBf0LY1nL8GZCol2O6z91CW1pm8rGi2iQMxRd/nnYsPxRHO2TWnpS2M+rqp5/ -settRYQCPdMlwSZcg7oqnhgXf1GEP6Y/IX0Xt4cpXxLcKywarYRlggqdVlMyyA74 -zE7hhzuK5442u7rEctN7O+UCgYAoM78ipafp1XAZsT0YAG+Stg504J7CNe5tpL+c -8sjyRd+pcZ2cJsxTUjNAWMf7LZDQvtPBBMb1OPjznRtgYi4IfqBBRFUkQXUOOkAP -MuViEokTO3NErBYK5svL+8NMjuCAbpc2RYyJEyiru0fcNpW1Q7f+h4VzQp+jIY6h -BLdMSQKBgGauU7OQksZCEY2MVAcD5dShYYvWLxOkj4dVVwISN1M6ImCAHwXZ6Nak -6YlzCGT+NbRJbB2cPfsrKXtAJVX15I3iDCKAoGkb+9kiHnPj7Q71KVuWQE6BQx7E -vE88TSsshwtX1s+qU9UWUrMPodK32q5nO3p8N033NvS9wLNfbcdc ------END RSA PRIVATE KEY-----""", - } - try: - resp = client.ulb().create_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SSLId_02"] = utest.value_at_path(resp, "SSLId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.SSLId", variables.get("SSLId_01")), - ], - action="DescribeSSL", -) -def describe_ssl_06(client, variables): - d = {"SSLId": variables.get("SSLId_01"), "Region": variables.get("Region")} - try: - resp = client.ulb().describe_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.SSLId", variables.get("SSLId_02")), - ], - action="DescribeSSL", -) -def describe_ssl_07(client, variables): - d = {"SSLId": variables.get("SSLId_02"), "Region": variables.get("Region")} - try: - resp = client.ulb().describe_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="BindSSL", -) -def bind_ssl_08(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "SSLId": variables.get("SSLId_01"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().bind_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdateSSLBinding", -) -def update_ssl_binding_09(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "Region": variables.get("Region"), - "OldSSLId": variables.get("SSLId_01"), - "NewSSLId": variables.get("SSLId_02"), - } - try: - resp = client.invoke("UpdateSSLBinding", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UnbindSSL", -) -def unbind_ssl_10(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "SSLId": variables.get("SSLId_02"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().unbind_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteSSL", -) -def delete_ssl_11(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "SSLId": variables.get("SSLId_01"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().delete_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteSSL", -) -def delete_ssl_12(client, variables): - d = {"SSLId": variables.get("SSLId_02"), "Region": variables.get("Region")} - try: - resp = client.ulb().delete_ssl(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteVServer", -) -def delete_vserver_13(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().delete_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteULB", -) -def delete_ulb_14(client, variables): - d = {"ULBId": variables.get("ULBId"), "Region": variables.get("Region")} - try: - resp = client.ulb().delete_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteSubnet", -) -def delete_subnet_15(client, variables): - d = { - "SubnetId": variables.get("subnet_id"), - "Region": variables.get("Region"), - } - try: - resp = client.vpc().delete_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteVPC", -) -def delete_vpc_16(client, variables): - d = {"VPCId": variables.get("vpc_id"), "Region": variables.get("Region")} - try: - resp = client.vpc().delete_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_268.py b/tests/test_services/test_set_268.py deleted file mode 100644 index 4f92fa4..0000000 --- a/tests/test_services/test_set_268.py +++ /dev/null @@ -1,339 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(268) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_268(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["eip_bw"] = 2 - scenario.variables["bwp1_bw"] = 3 - scenario.variables["eip_operatorname"] = "Bgp" - scenario.variables["bwp2_bw"] = 4 - scenario.variables["Image_Id"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Image_Id"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AllocateEIP", -) -def allocate_eip_01(client, variables): - d = { - "Region": variables.get("Region"), - "PayMode": "Bandwidth", - "OperatorName": variables.get("eip_operatorname"), - "Name": "eip_auto", - "ChargeType": "Month", - "Bandwidth": variables.get("eip_bw"), - } - try: - resp = client.unet().allocate_eip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["eip_id"] = utest.value_at_path(resp, "EIPSet.0.EIPId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("len_ge", "UHostIds", 0), - ], - action="CreateUHostInstance", -) -def create_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "No", - "Tag": "Default", - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Name": "packet-s1-bgp", - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("Image_Id"), - "HotplugFeature": False, - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["UHostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=180, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="BindEIP", -) -def bind_eip_03(client, variables): - d = { - "ResourceType": "uhost", - "ResourceId": variables.get("UHostId"), - "Region": variables.get("Region"), - "EIPId": variables.get("eip_id"), - } - try: - resp = client.unet().bind_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateBandwidthPackage", -) -def create_bandwidth_package_04(client, variables): - d = { - "TimeRange": 2, - "Region": variables.get("Region"), - "EnableTime": 30 + funcs.get_timestamp(10), - "EIPId": variables.get("eip_id"), - "Bandwidth": variables.get("bwp1_bw"), - } - try: - resp = client.unet().create_bandwidth_package(d) - except exc.RetCodeException as e: - resp = e.json() - variables["bwp_id1"] = utest.value_at_path(resp, "BandwidthPackageId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSets.0.EIPId", variables.get("eip_id")), - ("str_eq", "DataSets.0.Bandwidth", variables.get("bwp1_bw")), - ("str_eq", "DataSets.0.BandwidthPackageId", variables.get("bwp_id1")), - ], - action="DescribeBandwidthPackage", -) -def describe_bandwidth_package_05(client, variables): - d = {"Region": variables.get("Region"), "Offset": 0, "Limit": 1} - try: - resp = client.unet().describe_bandwidth_package(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteBandwidthPackage", -) -def delete_bandwidth_package_06(client, variables): - d = { - "Region": variables.get("Region"), - "BandwidthPackageId": variables.get("bwp_id1"), - } - try: - resp = client.unet().delete_bandwidth_package(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateBandwidthPackage", -) -def create_bandwidth_package_07(client, variables): - d = { - "TimeRange": 1, - "Region": variables.get("Region"), - "EIPId": variables.get("eip_id"), - "Bandwidth": variables.get("bwp2_bw"), - } - try: - resp = client.unet().create_bandwidth_package(d) - except exc.RetCodeException as e: - resp = e.json() - variables["bwp_id2"] = utest.value_at_path(resp, "BandwidthPackageId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSets.0.EIPId", variables.get("eip_id")), - ("str_eq", "DataSets.0.Bandwidth", variables.get("bwp2_bw")), - ("str_eq", "DataSets.0.BandwidthPackageId", variables.get("bwp_id2")), - ], - action="DescribeBandwidthPackage", -) -def describe_bandwidth_package_08(client, variables): - d = {"Region": variables.get("Region"), "Offset": 0, "Limit": 1} - try: - resp = client.unet().describe_bandwidth_package(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteBandwidthPackage", -) -def delete_bandwidth_package_09(client, variables): - d = { - "Region": variables.get("Region"), - "BandwidthPackageId": variables.get("bwp_id2"), - } - try: - resp = client.unet().delete_bandwidth_package(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UnBindEIP", -) -def un_bind_eip_10(client, variables): - d = { - "ResourceType": "uhost", - "ResourceId": variables.get("UHostId"), - "Region": variables.get("Region"), - "EIPId": variables.get("eip_id"), - } - try: - resp = client.unet().un_bind_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ReleaseEIP", -) -def release_eip_11(client, variables): - d = {"Region": variables.get("Region"), "EIPId": variables.get("eip_id")} - try: - resp = client.unet().release_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("UHostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("UHostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_279.py b/tests/test_services/test_set_279.py deleted file mode 100644 index 2c8644a..0000000 --- a/tests/test_services/test_set_279.py +++ /dev/null @@ -1,452 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(279) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_279(client, variables): - scenario.initial(variables) - scenario.variables["Image_Id"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Image_Id"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("len_ge", "UHostIds", 0), - ], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "No", - "Tag": "Default", - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Name": "eip-s1-bgp", - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("Image_Id"), - "HotplugFeature": False, - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["UHostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=120, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AllocateEIP", -) -def allocate_eip_02(client, variables): - d = { - "Tag": "Default", - "Remark": "test", - "Region": variables.get("Region"), - "Quantity": 1, - "PayMode": "Bandwidth", - "OperatorName": "Bgp", - "Name": "eip-bgp-01", - "ChargeType": "Dynamic", - "Bandwidth": 2, - } - try: - resp = client.unet().allocate_eip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["EIPId_01"] = utest.value_at_path(resp, "EIPSet.0.EIPId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "EIPSet.0.EIPId", variables.get("EIPId_01")), - ], - action="DescribeEIP", -) -def describe_eip_03(client, variables): - d = { - "Region": variables.get("Region"), - "EIPIds": [variables.get("EIPId_01")], - } - try: - resp = client.unet().describe_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdateEIPAttribute", -) -def update_eip_attribute_04(client, variables): - d = { - "Tag": "huangchao", - "Remark": "test-gai", - "Region": variables.get("Region"), - "Name": "eip-auto-gai", - "EIPId": variables.get("EIPId_01"), - } - try: - resp = client.unet().update_eip_attribute(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="GetEIPPrice", -) -def get_eip_price_05(client, variables): - d = { - "Region": variables.get("Region"), - "OperatorName": "Bgp", - "Bandwidth": 2, - } - try: - resp = client.unet().get_eip_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="BindEIP", -) -def bind_eip_06(client, variables): - d = { - "ResourceType": "uhost", - "ResourceId": variables.get("UHostId"), - "Region": variables.get("Region"), - "EIPId": variables.get("EIPId_01"), - } - try: - resp = client.unet().bind_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "EIPSet.0.Resource.ResourceID", variables.get("UHostId")), - ], - action="DescribeEIP", -) -def describe_eip_07(client, variables): - d = { - "Region": variables.get("Region"), - "EIPIds": [variables.get("EIPId_01")], - } - try: - resp = client.unet().describe_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ModifyEIPBandwidth", -) -def modify_eip_bandwidth_08(client, variables): - d = { - "Region": variables.get("Region"), - "EIPId": variables.get("EIPId_01"), - "Bandwidth": 3, - } - try: - resp = client.unet().modify_eip_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="SetEIPPayMode", -) -def set_eip_pay_mode_09(client, variables): - d = { - "Region": variables.get("Region"), - "PayMode": "Traffic", - "EIPId": variables.get("EIPId_01"), - "Bandwidth": 2, - } - try: - resp = client.unet().set_eip_pay_mode(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ModifyEIPWeight", -) -def modify_eip_weight_10(client, variables): - d = { - "Weight": 100, - "Region": variables.get("Region"), - "EIPId": variables.get("EIPId_01"), - } - try: - resp = client.unet().modify_eip_weight(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UnBindEIPResponse"), - ], - action="UnBindEIP", -) -def un_bind_eip_11(client, variables): - d = { - "ResourceType": "uhost", - "ResourceId": variables.get("UHostId"), - "Region": variables.get("Region"), - "EIPId": variables.get("EIPId_01"), - } - try: - resp = client.unet().un_bind_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AllocateEIP", -) -def allocate_eip_12(client, variables): - d = { - "Tag": "Default", - "Remark": "test", - "Region": variables.get("Region"), - "Quantity": 1, - "PayMode": "Bandwidth", - "OperatorName": "Bgp", - "Name": "eip-bgp-01", - "ChargeType": "Dynamic", - "Bandwidth": 2, - } - try: - resp = client.unet().allocate_eip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["EIPId_02"] = utest.value_at_path(resp, "EIPSet.0.EIPId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("gt", "TotalCount", 1), - ("len_eq", "EIPSet", 1), - ], - action="DescribeEIP", -) -def describe_eip_13(client, variables): - d = {"Region": variables.get("Region"), "Limit": 1} - try: - resp = client.unet().describe_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 8039)], - action="ReleaseEIP", -) -def release_eip_14(client, variables): - d = {"Region": variables.get("Region"), "EIPId": variables.get("EIPId_01")} - try: - resp = client.unet().release_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "TotalCount", 0), - ], - action="DescribeEIP", -) -def describe_eip_15(client, variables): - d = { - "Region": variables.get("Region"), - "EIPIds": [variables.get("EIPId_01")], - } - try: - resp = client.unet().describe_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ReleaseEIP", -) -def release_eip_16(client, variables): - d = {"Region": variables.get("Region"), "EIPId": variables.get("EIPId_02")} - try: - resp = client.unet().release_eip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("UHostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("UHostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_283.py b/tests/test_services/test_set_283.py deleted file mode 100644 index 807b2b9..0000000 --- a/tests/test_services/test_set_283.py +++ /dev/null @@ -1,618 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(283) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_283(client, variables): - scenario.initial(variables) - scenario.variables["HostName"] = "auto_host_test1" - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["ChargeType"] = "Month" - scenario.variables["CreateCPU"] = 1 - scenario.variables["CreateMem"] = 1024 - scenario.variables["ImageId"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.variables["BootSize"] = 20 - scenario.variables["BootType"] = "CLOUD_SSD" - scenario.variables["BootBackup"] = "NONE" - scenario.variables["DiskSize"] = 20 - scenario.variables["DiskType"] = "CLOUD_NORMAL" - scenario.variables["DiskBackup"] = "NONE" - scenario.variables["UHostType"] = "N2" - scenario.variables["UDiskType"] = "DataDisk" - scenario.variables["UDiskName"] = "auto_udisk_noArk" - scenario.variables["UDataArkMode"] = "No" - scenario.variables["Size"] = 1 - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageId"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDiskPrice", -) -def describe_udisk_price_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 1, - "DiskType": variables.get("UDiskType"), - "ChargeType": "Month", - } - try: - resp = client.udisk().describe_udisk_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDiskAllowance", -) -def check_udisk_allowance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Count": 1, - } - try: - resp = client.invoke("CheckUDiskAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDisk", -) -def create_udisk_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 0, - "Name": variables.get("UDiskName"), - "DiskType": variables.get("UDiskType"), - "ChargeType": "Month", - } - try: - resp = client.udisk().create_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - variables["udisk_noArk_id"] = utest.value_at_path(resp, "UDiskId.0") - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskResponse"), - ("str_eq", "DataSet.0.Status", "Available"), - ("str_eq", "DataSet.0.Tag", "Default"), - ], - action="DescribeUDisk", -) -def describe_udisk_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RenameUDisk", -) -def rename_udisk_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskName": funcs.concat("re_", variables.get("UDiskName")), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().rename_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat("re_", variables.get("UDiskName")), - ), - ], - action="DescribeUDisk", -) -def describe_udisk_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskUpgradePriceResponse"), - ], - action="DescribeUDiskUpgradePrice", -) -def describe_udisk_upgrade_price_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "SourceId": variables.get("udisk_noArk_id"), - "Size": variables.get("Size") + 1, - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ResizeUDiskResponse"), - ], - action="ResizeUDisk", -) -def resize_udisk_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Size": variables.get("Size") + 1, - "Region": variables.get("Region"), - } - try: - resp = client.udisk().resize_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskResponse"), - ("str_eq", "DataSet.0.Size", variables.get("Size") + 1), - ], - action="DescribeUDisk", -) -def describe_udisk_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageId"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUHostInstanceResponse"), - ], - action="CreateUHostInstance", -) -def create_uhost_instance_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostType": variables.get("UHostType"), - "TimemachineFeature": "No", - "Tag": "Default", - "Region": variables.get("Region"), - "Quantity": 1, - "Password": "VGVzdDEyMzRUZXN0MTIzNA==", - "NetCapability": "Normal", - "Name": variables.get("HostName"), - "Memory": variables.get("CreateMem"), - "LoginMode": "Password", - "ImageId": variables.get("ImageId"), - "HotplugFeature": False, - "GPU": False, - "Disks": [ - { - "BackupType": variables.get("BootBackup"), - "IsBoot": True, - "Size": variables.get("BootSize"), - "Type": variables.get("BootType"), - } - ], - "ChargeType": variables.get("ChargeType"), - "CPU": variables.get("CreateCPU"), - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["uhost_id"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.UHostId", variables.get("uhost_id")), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("uhost_id")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=120, - retry_interval=5, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Running"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("uhost_id")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("ne", "TotalCount", 0), - ], - action="DescribeUHostLite", -) -def describe_uhost_lite_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 60, - } - try: - resp = client.invoke("DescribeUHostLite", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AttachUDisk", -) -def attach_udisk_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("uhost_id"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().attach_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=200, - retry_interval=3, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "InUse"), - ], - action="DescribeUDisk", -) -def describe_udisk_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UDiskId", variables.get("udisk_noArk_id")), - ("str_eq", "UHostId", variables.get("uhost_id")), - ], - action="DetachUDisk", -) -def detach_udisk_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("uhost_id"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().detach_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=60, - retry_interval=5, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDisk", -) -def delete_udisk_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().delete_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("uhost_id"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_21(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("uhost_id")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="TerminateUHostInstance", -) -def terminate_uhost_instance_22(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("uhost_id"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_286.py b/tests/test_services/test_set_286.py deleted file mode 100644 index dc7af7b..0000000 --- a/tests/test_services/test_set_286.py +++ /dev/null @@ -1,332 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(286) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_286(client, variables): - scenario.initial(variables) - scenario.variables["UDiskType"] = "DataDisk" - scenario.variables["Size"] = 1 - scenario.variables["UDataArkMode"] = "No" - scenario.variables["UDiskName"] = "auto_udisk_noArk" - scenario.variables["UDiskCloneName"] = "auto_udisk_noArk_Clone" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDiskPrice", -) -def describe_udisk_price_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 1, - "DiskType": variables.get("UDiskType"), - "ChargeType": "Month", - } - try: - resp = client.udisk().describe_udisk_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckUDiskAllowanceResponse"), - ], - action="CheckUDiskAllowance", -) -def check_udisk_allowance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 10, - "Region": variables.get("Region"), - } - try: - resp = client.invoke("CheckUDiskAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDisk", -) -def create_udisk_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "Tag": "test", - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 0, - "Name": variables.get("UDiskName"), - "DiskType": variables.get("UDiskType"), - "ChargeType": "Month", - } - try: - resp = client.udisk().create_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - variables["udisk_noArk_id"] = utest.value_at_path(resp, "UDiskId.0") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ("str_eq", "DataSet.0.Tag", "test"), - ], - action="DescribeUDisk", -) -def describe_udisk_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CloneUDiskResponse"), - ], - action="CloneUDisk", -) -def clone_udisk_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "SourceId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - "Quantity": 0, - "Name": variables.get("UDiskCloneName"), - "ChargeType": "Month", - } - try: - resp = client.udisk().clone_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - variables["udisk_noArk_id_clone"] = utest.value_at_path(resp, "UDiskId.0") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDiskUpgradePrice", -) -def describe_udisk_upgrade_price_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "SourceId": variables.get("udisk_noArk_id"), - "Size": variables.get("Size") + 1, - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=80, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUDisk", -) -def resize_udisk_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Size": variables.get("Size") + 1, - "Region": variables.get("Region"), - } - try: - resp = client.udisk().resize_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Size", variables.get("Size") + 1), - ], - action="DescribeUDisk", -) -def describe_udisk_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=40, - retry_interval=3, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskResponse"), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id_clone"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDisk", -) -def delete_udisk_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().delete_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDisk", -) -def describe_udisk_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUDiskResponse"), - ], - action="DeleteUDisk", -) -def delete_udisk_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id_clone"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().delete_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDisk", -) -def describe_udisk_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id_clone"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_293.py b/tests/test_services/test_set_293.py deleted file mode 100644 index 59cbd9d..0000000 --- a/tests/test_services/test_set_293.py +++ /dev/null @@ -1,616 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(293) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_293(client, variables): - scenario.initial(variables) - scenario.variables["HostName"] = "auto_host_test4" - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["ChargeType"] = "Month" - scenario.variables["CreateCPU"] = 1 - scenario.variables["CreateMem"] = 1024 - scenario.variables["ImageId"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.variables["BootSize"] = 20 - scenario.variables["BootType"] = "CLOUD_SSD" - scenario.variables["BootBackup"] = "NONE" - scenario.variables["DiskSize"] = 20 - scenario.variables["DiskType"] = "CLOUD_NORMAL" - scenario.variables["DiskBackup"] = "NONE" - scenario.variables["UHostType"] = "N2" - scenario.variables["UDiskType"] = "DataDisk" - scenario.variables["UDiskName"] = "auto_udisk_noArk4" - scenario.variables["UDataArkMode"] = "No" - scenario.variables["Size"] = 1 - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDiskPrice", -) -def describe_udisk_price_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 1, - "DiskType": variables.get("UDiskType"), - "ChargeType": "Month", - } - try: - resp = client.udisk().describe_udisk_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckUDiskAllowanceResponse"), - ], - action="CheckUDiskAllowance", -) -def check_udisk_allowance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 100, - "Region": variables.get("Region"), - "Count": 1, - } - try: - resp = client.invoke("CheckUDiskAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUDiskResponse"), - ], - action="CreateUDisk", -) -def create_udisk_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": variables.get("UDataArkMode"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 0, - "Name": variables.get("UDiskName"), - "DiskType": variables.get("UDiskType"), - "ChargeType": "Month", - } - try: - resp = client.udisk().create_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - variables["udisk_noArk_id"] = utest.value_at_path(resp, "UDiskId.0") - return resp - - -@scenario.step( - max_retries=5, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "SetUDiskUDataArkModeResponse"), - ], - action="SetUDiskUDataArkMode", -) -def set_udisk__udataark_mode_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "UDataArkMode": "Yes", - "Region": variables.get("Region"), - } - try: - resp = client.udisk().set_udisk__udataark_mode(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=5, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.UDataArkMode", "Yes"), - ], - action="DescribeUDisk", -) -def describe_udisk_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=300, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUDiskSnapshotResponse"), - ], - action="CreateUDiskSnapshot", -) -def create_udisk_snapshot_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - "Name": "snapshot_01_Ark", - "Comment": "comment_01_Ark", - } - try: - resp = client.udisk().create_udisk_snapshot(d) - except exc.RetCodeException as e: - resp = e.json() - variables["snapshot_id"] = utest.value_at_path(resp, "SnapshotId.0") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=3, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.SnapshotLimit", 3), - ("str_eq", "DataSet.0.Status", "Available"), - ("str_eq", "DataSet.0.SnapshotCount", 1), - ], - action="DescribeUDisk", -) -def describe_udisk_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskSnapshotResponse"), - ("str_eq", "DataSet.0.UDiskId", variables.get("udisk_noArk_id")), - ("str_eq", "DataSet.0.Status", "Normal"), - ], - action="DescribeUDiskSnapshot", -) -def describe_udisk_snapshot_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "SnapshotId": variables.get("snapshot_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk_snapshot(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CloneUDiskSnapshotResponse"), - ], - action="CloneUDiskSnapshot", -) -def clone_udisk_snapshot_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": "Yes", - "SourceId": variables.get("snapshot_id"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 0, - "Name": "snap1_clone_Ark", - "ChargeType": "Month", - } - try: - resp = client.udisk().clone_udisk_snapshot(d) - except exc.RetCodeException as e: - resp = e.json() - variables["snapClone1_udisk_id"] = utest.value_at_path(resp, "UDiskId.0") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=5, - startup_delay=120, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ("str_eq", "DataSet.0.Name", "snap1_clone_Ark"), - ], - action="DescribeUDisk", -) -def describe_udisk_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("snapClone1_udisk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CloneUDiskSnapshot", -) -def clone_udisk_snapshot_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDataArkMode": "No", - "SourceId": variables.get("snapshot_id"), - "Size": variables.get("Size"), - "Region": variables.get("Region"), - "Quantity": 0, - "Name": "snap1_clone_noArk", - "ChargeType": "Month", - } - try: - resp = client.udisk().clone_udisk_snapshot(d) - except exc.RetCodeException as e: - resp = e.json() - variables["snapClone2_udisk_id"] = utest.value_at_path(resp, "UDiskId.0") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=5, - startup_delay=120, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ("str_eq", "DataSet.0.Name", "snap1_clone_noArk"), - ], - action="DescribeUDisk", -) -def describe_udisk_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("snapClone2_udisk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "RestoreUDiskResponse"), - ], - action="RestoreUDisk", -) -def restore_udisk_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "SnapshotId": variables.get("snapshot_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().restore_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=1, - startup_delay=120, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskResponse"), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteSnapshotResponse"), - ("str_eq", "SnapshotId", variables.get("snapshot_id")), - ], - action="DeleteSnapshot", -) -def delete_snapshot_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "SnapshotId": variables.get("snapshot_id"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DeleteSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDiskSnapshotResponse"), - ("str_eq", "TotalCount", 0), - ], - action="DescribeUDiskSnapshot", -) -def describe_udisk_snapshot_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "SnapshotId": variables.get("snapshot_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk_snapshot(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=2, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUDiskResponse"), - ], - action="DeleteUDisk", -) -def delete_udisk_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("udisk_noArk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().delete_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("snapClone1_udisk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUDiskResponse"), - ], - action="DeleteUDisk", -) -def delete_udisk_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("snapClone1_udisk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().delete_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.Status", "Available"), - ], - action="DescribeUDisk", -) -def describe_udisk_21(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("snapClone2_udisk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().describe_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=2, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUDiskResponse"), - ], - action="DeleteUDisk", -) -def delete_udisk_22(client, variables): - d = { - "Zone": variables.get("Zone"), - "UDiskId": variables.get("snapClone2_udisk_id"), - "Region": variables.get("Region"), - } - try: - resp = client.udisk().delete_udisk(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_2935.py b/tests/test_services/test_set_2935.py deleted file mode 100644 index 103c045..0000000 --- a/tests/test_services/test_set_2935.py +++ /dev/null @@ -1,153 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(2935) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_2935(client, variables): - scenario.initial(variables) - scenario.variables[ - "Image_Id_ucloud" - ] = "#{u_get_image_resource($Region,$Zone)}" - scenario.variables["saopaulo_image"] = "uimage-1bkjka" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Image_Id_ucloud"] = utest.value_at_path( - resp, "ImageSet.0.ImageId" - ) - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateULB", -) -def create_ulb_01(client, variables): - d = { - "ULBName": "测试", - "Tag": "Default", - "Region": variables.get("Region"), - "InnerMode": "No", - } - try: - resp = client.ulb().create_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ULBId"] = utest.value_at_path(resp, "ULBId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("len_ge", "DataSet", 1), - ], - action="DescribeULBSimple", -) -def describe_ulb_simple_02(client, variables): - d = {"Region": variables.get("Region")} - try: - resp = client.invoke("DescribeULBSimple", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("len_eq", "DataSet", 1), - ], - action="DescribeULBSimple", -) -def describe_ulb_simple_03(client, variables): - d = {"ULBId": variables.get("ULBId"), "Region": variables.get("Region")} - try: - resp = client.invoke("DescribeULBSimple", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.ULBId", variables.get("ULBId")), - ], - action="DescribeULB", -) -def describe_ulb_04(client, variables): - d = { - "ULBId": variables.get("ULBId"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 60, - } - try: - resp = client.ulb().describe_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteULB", -) -def delete_ulb_05(client, variables): - d = {"ULBId": variables.get("ULBId"), "Region": variables.get("Region")} - try: - resp = client.ulb().delete_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_302.py b/tests/test_services/test_set_302.py deleted file mode 100644 index 53ced59..0000000 --- a/tests/test_services/test_set_302.py +++ /dev/null @@ -1,477 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(302) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_302(client, variables): - scenario.initial(variables) - scenario.variables["tag"] = "tag_api_test" - scenario.variables["remark"] = "remark_api_test" - scenario.variables["fw_name_1"] = funcs.concat( - "fw_A_", funcs.get_timestamp(13), "_" - ) - scenario.variables["fw_rule_1_protocol"] = "TCP" - scenario.variables["fw_rule_1_port"] = 1111 - scenario.variables["fw_rule_1_srcip"] = "0.0.0.0/0" - scenario.variables["fw_rule_1_action"] = "ACCEPT" - scenario.variables["fw_rule_1_priority"] = "HIGH" - scenario.variables["uhost_name_1"] = "firewall_api_test" - scenario.variables["fw_rule_2_protocol"] = "UDP" - scenario.variables["fw_rule_2_port"] = 2222 - scenario.variables["fw_rule_2_srcip"] = "10.0.0.0/8" - scenario.variables["fw_rule_2_action"] = "DROP" - scenario.variables["fw_rule_2_priority"] = "LOW" - scenario.variables["fw_name_2"] = funcs.concat( - "fw_B_", funcs.get_timestamp(13), "_" - ) - scenario.variables["tag_2"] = "tag_api_test_3" - scenario.variables["remark_2"] = "remark_api_test_3" - scenario.variables["Image_Id"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.variables["recommend_web"] = "recommend web" - scenario.variables["fw_rule_1"] = "TCP|1111|0.0.0.0/0|ACCEPT|HIGH" - scenario.variables["fw_rule_2"] = "UDP|2222|10.0.0.0/8|DROP|LOW" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Image_Id"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeFirewall", -) -def describe_firewall_01(client, variables): - d = {"Region": variables.get("Region")} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Tag": variables.get("tag"), - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Name": variables.get("uhost_name_1"), - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("Image_Id"), - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["uhost_id1"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=180, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateFirewall", -) -def create_firewall_03(client, variables): - d = { - "Tag": variables.get("tag"), - "Rule": [variables.get("fw_rule_1")], - "Remark": variables.get("remark"), - "Region": variables.get("Region"), - "Name": funcs.concat(variables.get("fw_name_1"), variables.get("Zone")), - } - try: - resp = client.unet().create_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - variables["fw_id1"] = utest.value_at_path(resp, "FWId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.FWId", variables.get("fw_id1")), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("fw_name_1"), variables.get("Zone")), - ), - ("str_eq", "DataSet.0.Tag", variables.get("tag")), - ("str_eq", "DataSet.0.Remark", variables.get("remark")), - ("str_eq", "DataSet.0.ResourceCount", 0), - ("str_eq", "DataSet.0.Type", "user defined"), - ( - "str_eq", - "DataSet.0.Rule.0.ProtocolType", - variables.get("fw_rule_1_protocol"), - ), - ("str_eq", "DataSet.0.Rule.0.DstPort", variables.get("fw_rule_1_port")), - ("str_eq", "DataSet.0.Rule.0.SrcIP", variables.get("fw_rule_1_srcip")), - ( - "str_eq", - "DataSet.0.Rule.0.RuleAction", - variables.get("fw_rule_1_action"), - ), - ( - "str_eq", - "DataSet.0.Rule.0.Priority", - variables.get("fw_rule_1_priority"), - ), - ], - action="DescribeFirewall", -) -def describe_firewall_04(client, variables): - d = {"Region": variables.get("Region"), "FWId": variables.get("fw_id1")} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeFirewall", -) -def describe_firewall_05(client, variables): - d = {"Region": variables.get("Region")} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="GrantFirewall", -) -def grant_firewall_06(client, variables): - d = { - "ResourceType": "UHost", - "ResourceId": variables.get("uhost_id1"), - "Region": variables.get("Region"), - "FWId": variables.get("fw_id1"), - } - try: - resp = client.unet().grant_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "ResourceSet.0.Name", variables.get("uhost_name_1")), - ("str_eq", "ResourceSet.0.ResourceType", "uhost"), - ("str_eq", "ResourceSet.0.ResourceID", variables.get("uhost_id1")), - ("str_eq", "TotalCount", 1), - ("str_eq", "ResourceSet.0.Tag", variables.get("tag")), - ], - action="DescribeFirewallResource", -) -def describe_firewall_resource_07(client, variables): - d = {"Region": variables.get("Region"), "FWId": variables.get("fw_id1")} - try: - resp = client.unet().describe_firewall_resource(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdateFirewall", -) -def update_firewall_08(client, variables): - d = { - "Rule": [variables.get("fw_rule_2")], - "Region": variables.get("Region"), - "FWId": variables.get("fw_id1"), - } - try: - resp = client.unet().update_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdateFirewallAttribute", -) -def update_firewall_attribute_09(client, variables): - d = { - "Tag": variables.get("tag_2"), - "Remark": variables.get("remark_2"), - "Region": variables.get("Region"), - "Name": funcs.concat(variables.get("fw_name_2"), variables.get("Zone")), - "FWId": variables.get("fw_id1"), - } - try: - resp = client.unet().update_firewall_attribute(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.FWId", variables.get("fw_id1")), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("fw_name_2"), variables.get("Zone")), - ), - ("str_eq", "DataSet.0.Tag", variables.get("tag_2")), - ("str_eq", "DataSet.0.Remark", variables.get("remark_2")), - ("str_eq", "DataSet.0.ResourceCount", 1), - ("str_eq", "DataSet.0.Type", "user defined"), - ( - "str_eq", - "DataSet.0.Rule.0.ProtocolType", - variables.get("fw_rule_2_protocol"), - ), - ("str_eq", "DataSet.0.Rule.0.DstPort", variables.get("fw_rule_2_port")), - ("str_eq", "DataSet.0.Rule.0.SrcIP", variables.get("fw_rule_2_srcip")), - ( - "str_eq", - "DataSet.0.Rule.0.RuleAction", - variables.get("fw_rule_2_action"), - ), - ( - "str_eq", - "DataSet.0.Rule.0.Priority", - variables.get("fw_rule_2_priority"), - ), - ], - action="DescribeFirewall", -) -def describe_firewall_10(client, variables): - d = {"Region": variables.get("Region"), "FWId": variables.get("fw_id1")} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - action="DescribeFirewall", -) -def describe_firewall_11(client, variables): - d = {"Region": variables.get("Region"), "Offset": 0, "Limit": 20} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - variables["fw_dataset"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="GrantFirewall", -) -def grant_firewall_12(client, variables): - d = { - "ResourceType": "UHost", - "ResourceId": variables.get("uhost_id1"), - "Region": variables.get("Region"), - "FWId": funcs.search_value( - variables.get("fw_dataset"), - "Type", - variables.get("recommend_web"), - "FWId", - ), - } - try: - resp = client.unet().grant_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=60, - startup_delay=30, - fast_fail=False, - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("uhost_id1"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=90, - fast_fail=False, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("uhost_id1"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.ResourceCount", 0), - ], - action="DescribeFirewall", -) -def describe_firewall_15(client, variables): - d = {"Region": variables.get("Region"), "FWId": variables.get("fw_id1")} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=1, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteFirewall", -) -def delete_firewall_16(client, variables): - d = {"Region": variables.get("Region"), "FWId": variables.get("fw_id1")} - try: - resp = client.unet().delete_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("object_not_contains", "DataSet", variables.get("fw_id1")), - ], - action="DescribeFirewall", -) -def describe_firewall_17(client, variables): - d = {"Region": variables.get("Region"), "Offset": 0, "Limit": 10} - try: - resp = client.unet().describe_firewall(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_3278.py b/tests/test_services/test_set_3278.py deleted file mode 100644 index 05ddaa7..0000000 --- a/tests/test_services/test_set_3278.py +++ /dev/null @@ -1,331 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(3278) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_3278(client, variables): - scenario.initial(variables) - scenario.variables[ - "Image_Id_cloud" - ] = "#{u_get_image_resource($Region,$Zone)}" - scenario.variables["saopaulo_image"] = "uimage-1bkjka" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["Image_Id_cloud"] = utest.value_at_path( - resp, "ImageSet.0.ImageId" - ) - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "No", - "Tag": "Default", - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Name": "ulb-host", - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("Image_Id_cloud"), - "HotplugFeature": False, - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["UHostId_01"] = utest.value_at_path(resp, "UHostIds.0") - variables["IP_01"] = utest.value_at_path(resp, "IPs.0") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=180, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateULB", -) -def create_ulb_02(client, variables): - d = { - "ULBName": "测试", - "Tag": "Default", - "Region": variables.get("Region"), - "InnerMode": "No", - } - try: - resp = client.ulb().create_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ULBId"] = utest.value_at_path(resp, "ULBId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 4107)], - action="CreateVServer", -) -def create_vserver_03(client, variables): - d = { - "VServerName": "vserver-test", - "ULBId": variables.get("ULBId"), - "Region": variables.get("Region"), - "Protocol": "HTTP", - "PersistenceType": "UserDefined", - "PersistenceInfo": "huangchao", - "Method": "Roundrobin", - "ListenType": "RequestProxy", - "FrontendPort": 80, - "ClientTimeout": 60, - } - try: - resp = client.ulb().create_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("len_eq", "DataSet", 1), - ], - action="DescribeVServer", -) -def describe_vserver_04(client, variables): - d = {"ULBId": variables.get("ULBId"), "Region": variables.get("Region")} - try: - resp = client.ulb().describe_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VServerId"] = utest.value_at_path(resp, "DataSet.0.VServerId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 63016)], - action="AllocateBackend", -) -def allocate_backend_05(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "ResourceType": "UHost", - "ResourceId": variables.get("UHostId_01"), - "Region": variables.get("Region"), - "Port": 80, - "Enabled": 1, - } - try: - resp = client.ulb().allocate_backend(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("len_eq", "DataSet.0.BackendSet", 1), - ], - action="DescribeVServer", -) -def describe_vserver_06(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "Region": variables.get("Region"), - } - try: - resp = client.ulb().describe_vserver(d) - except exc.RetCodeException as e: - resp = e.json() - variables["BackendId"] = utest.value_at_path( - resp, "DataSet.0.BackendSet.0.BackendId" - ) - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreatePolicy", -) -def create_policy_07(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "Type": "Domain", - "Region": variables.get("Region"), - "Match": "www.test.com", - "BackendId": [variables.get("BackendId")], - } - try: - resp = client.ulb().create_policy(d) - except exc.RetCodeException as e: - resp = e.json() - variables["PolicyId"] = utest.value_at_path(resp, "PolicyId") - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdatePolicy", -) -def update_policy_08(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "ULBId": variables.get("ULBId"), - "Type": "Domain", - "Region": variables.get("Region"), - "PolicyId": variables.get("PolicyId"), - "Match": "www.testgai.com", - "BackendId": [variables.get("BackendId")], - } - try: - resp = client.ulb().update_policy(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeletePolicy", -) -def delete_policy_09(client, variables): - d = { - "VServerId": variables.get("VServerId"), - "Region": variables.get("Region"), - "PolicyId": variables.get("PolicyId"), - } - try: - resp = client.ulb().delete_policy(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=30, - fast_fail=False, - action="DeleteULB", -) -def delete_ulb_10(client, variables): - d = {"ULBId": variables.get("ULBId"), "Region": variables.get("Region")} - try: - resp = client.ulb().delete_ulb(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=30, - startup_delay=5, - fast_fail=False, - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("UHostId_01"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("UHostId_01"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_330.py b/tests/test_services/test_set_330.py deleted file mode 100644 index 864e2dd..0000000 --- a/tests/test_services/test_set_330.py +++ /dev/null @@ -1,282 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(330) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_330(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUMemcacheGroup", -) -def create_umem_cache_group_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "Name": "umem_charge", - "ChargeType": "Month", - } - try: - resp = client.umem().create_umem_cache_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["group_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUMem", -) -def describe_umem_01(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - "Protocol": "memcache", - "Offset": 0, - "Limit": 1000, - } - try: - resp = client.invoke("DescribeUMem", d) - except exc.RetCodeException as e: - resp = e.json() - variables["CreateTime"] = utest.value_at_path(resp, "DataSet.0.CreateTime") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUMemcachePrice", -) -def describe_umem_cache_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Size": 1, - "Region": variables.get("Region"), - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.umem().describe_umem_cache_price(d) - except exc.RetCodeException as e: - resp = e.json() - variables["GetPrice"] = utest.value_at_path(resp, "DataSet.0.Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("float_eq", "OrderInfos.0.Amount", variables.get("GetPrice") / 100), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_03(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "QueryAll": True, - "OrderTypes": ["OT_BUY"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUMemcacheUpgradePrice", -) -def describe_umem_cache_upgrade_price_04(client, variables): - d = { - "Size": 2, - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.umem().describe_umem_cache_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - variables["UpgradePrice"] = utest.value_at_path(resp, "Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUMemcacheGroup", -) -def resize_umem_cache_group_05(client, variables): - d = { - "Size": 2, - "Region": variables.get("Region"), - "GroupId": variables.get("group_id"), - } - try: - resp = client.invoke("ResizeUMemcacheGroup", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("float_eq", "OrderInfos.0.Amount", variables.get("GetPrice") / 100), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_06(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "QueryAll": True, - "OrderTypes": ["OT_BUY"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="GetResourceRenewPrice", -) -def get_resource_renew_price_07(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.invoke("GetResourceRenewPrice", d) - except exc.RetCodeException as e: - resp = e.json() - variables["ReNewPrice"] = utest.value_at_path(resp, "RenewPriceSet.0.Price") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateRenew", -) -def create_renew_08(client, variables): - d = { - "ResourceId": variables.get("group_id"), - "Quantity": 1, - "ChargeType": "Month", - } - try: - resp = client.invoke("CreateRenew", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "OrderInfos.0.Amount", variables.get("ReNewPrice")), - ], - action="DescribeOrderDetailInfo", -) -def describe_order_detail_info_09(client, variables): - d = { - "ResourceIds": [variables.get("group_id")], - "QueryAll": True, - "OrderTypes": ["OT_RENEW"], - "OrderStates": ["OS_FINISHED"], - "EndTime": funcs.get_timestamp(10), - "ChargeTypes": ["Month"], - "BeginTime": funcs.get_timestamp(10) - 1200, - } - try: - resp = client.invoke("DescribeOrderDetailInfo", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - action="DeleteUMem", -) -def delete_umem_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "ResourceType": "single", - "ResourceId": variables.get("group_id"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DeleteUMem", d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_333.py b/tests/test_services/test_set_333.py deleted file mode 100644 index 80eba24..0000000 --- a/tests/test_services/test_set_333.py +++ /dev/null @@ -1,618 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(333) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_333(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["ImageName"] = "ImageTest" - scenario.variables["TargetImageName"] = "ImageCopyTest" - scenario.variables["TargetRegion"] = "cn-sh2" - scenario.variables["TargetZone"] = "cn-sh2-01" - scenario.variables["myImage"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["myImage"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("myImage"), - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=60, - startup_delay=400, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUHostInstanceResponse"), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUHostInstanceResponse"), - ], - action="StopUHostInstance", -) -def stop_uhost_instance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=30, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUHostInstanceResponse"), - ("str_eq", "UHostSet.0.State", "Stopped"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateCustomImage", -) -def create_custom_image_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - "ImageName": variables.get("ImageName"), - } - try: - resp = client.uhost().create_custom_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["newImageId"] = utest.value_at_path(resp, "ImageId") - return resp - - -@scenario.step( - max_retries=100, - retry_interval=30, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ("str_eq", "ImageSet.0.State", "Available"), - ("str_eq", "ImageSet.0.ImageId", variables.get("newImageId")), - ], - action="DescribeImage", -) -def describe_image_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ImageId": variables.get("newImageId"), - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("newImageId"), - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId2"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=100, - retry_interval=30, - startup_delay=60, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUHostInstanceResponse"), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_08(client, variables): - d = { - "UHostIds": [variables.get("hostId2")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetProjectListResponse"), - ], - action="GetProjectList", -) -def get_project_list_09(client, variables): - d = {} - try: - resp = client.uaccount().get_project_list(d) - except exc.RetCodeException as e: - resp = e.json() - variables["TargetProjectID"] = utest.value_at_path( - resp, "ProjectSet.0.ProjectId" - ) - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CopyCustomImage", -) -def copy_custom_image_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "TargetRegion": variables.get("TargetRegion"), - "TargetProjectId": variables.get("TargetProjectID"), - "TargetImageName": variables.get("TargetImageName"), - "SourceImageId": variables.get("newImageId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().copy_custom_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["cpImageId"] = utest.value_at_path(resp, "TargetImageId") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=30, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("float_eq", "ProgressInfo", 100), - ], - action="GetImageCopyProgress", -) -def get_image_copy_progress_11(client, variables): - d = { - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - "ImageId": variables.get("cpImageId"), - } - try: - resp = client.invoke("GetImageCopyProgress", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=30, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ("str_eq", "ImageSet.0.State", "Available"), - ], - action="DescribeImage", -) -def describe_image_12(client, variables): - d = { - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - "ImageId": variables.get("cpImageId"), - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_13(client, variables): - d = { - "Zone": variables.get("TargetZone"), - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("cpImageId"), - "DiskSpace": 0, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId_new"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=60, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUHostInstanceResponse"), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_14(client, variables): - d = { - "Zone": variables.get("TargetZone"), - "UHostIds": [variables.get("hostId_new")], - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="TerminateCustomImage", -) -def terminate_custom_image_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "ImageId": variables.get("newImageId"), - } - try: - resp = client.uhost().terminate_custom_image(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUHostInstance", -) -def stop_uhost_instance_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUHostInstance", -) -def stop_uhost_instance_17(client, variables): - d = {"UHostId": variables.get("hostId2"), "Region": variables.get("Region")} - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUHostInstanceResponse"), - ("str_eq", "UHostSet.0.State", "Stopped"), - ("str_eq", "UHostSet.1.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_18(client, variables): - d = { - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="TerminateUHostInstance", -) -def terminate_uhost_instance_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="TerminateUHostInstance", -) -def terminate_uhost_instance_20(client, variables): - d = {"UHostId": variables.get("hostId2"), "Region": variables.get("Region")} - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=100, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="TerminateCustomImage", -) -def terminate_custom_image_21(client, variables): - d = { - "Zone": variables.get("TargetZone"), - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - "ImageId": variables.get("cpImageId"), - } - try: - resp = client.uhost().terminate_custom_image(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUHostInstance", -) -def stop_uhost_instance_22(client, variables): - d = { - "Zone": variables.get("TargetZone"), - "UHostId": variables.get("hostId_new"), - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUHostInstanceResponse"), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_23(client, variables): - d = { - "Zone": variables.get("TargetZone"), - "UHostIds": [variables.get("hostId_new")], - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="TerminateUHostInstance", -) -def terminate_uhost_instance_24(client, variables): - d = { - "Zone": variables.get("TargetZone"), - "UHostId": variables.get("hostId_new"), - "Region": variables.get("TargetRegion"), - "ProjectId": variables.get("TargetProjectID"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_4079.py b/tests/test_services/test_set_4079.py deleted file mode 100644 index 400f210..0000000 --- a/tests/test_services/test_set_4079.py +++ /dev/null @@ -1,264 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(4079) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_4079(client, variables): - scenario.initial(variables) - scenario.variables[ - "file" - ] = "data:image/jpeg;base64,/9j/4SRFRXhpZgAASUkqAAgAAAALAA4BAgAgAAAAkgAAAA8BAgAQAAAAsgAAABABAgAJAAAAygAAABIBAwABAAAAAQAAABoBBQABAAAA2AAAABsBBQABAAAA4AAAACgBAwABAAAAAgAAADEBAgAIAAAA6AAAADIBAgAUAAAACAEAABMCAwABAAAAAgAAAGmHBAABAAAAHAEAABgDAABNSU5PTFRBIERJR0lUQUwgQ0FNRVJBICAgICAgICAgAE1JTk9MVEEgQ08uLExURAAAAAAAAAAAAERpTUFHRSBYAAAAAAAASAAAAAEAAABIAAAAAQAAAFYxMDAtMDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwMjowODoxMiAxNjowNjo1OAAYAJqCBQABAAAAQgIAAJ2CBQABAAAASgIAACKIAwABAAAAAgAAACeIAwABAAAAZAAAAACQBwAEAAAAMDIxMAOQAgAUAAAAUgIAAASQAgAUAAAAZgIAAAGRBwAEAAAAAQIDAAKRBQABAAAAegIAAASSCgABAAAAggIAAAWSBQABAAAAigIAAAeSAwABAAAABQAAAAiSAwABAAAAAAAAAAmSAwABAAAAAAAAAAqSBQABAAAAkgIAAHySBwB4AgAAlAMAAIaSBwB9AAAAmgIAAACgBwAEAAAAMDEwMAGgAwABAAAAAQAAAAOgBAABAAAAAAUAAAKgBAABAAAAwAMAAAWgBAABAAAAdgMAAACjBwABAAAAAwAAAAGjBwABAAAAAQAAAAAAAAAKAAAApRsAABwAAAAKAAAAMjAwMjowODoxMiAxNjowNjo1OAAyMDAyOjA4OjEyIDE2OjA2OjU4AAQAAAABAAAAAAAAAAoAAAAeAAAACgAAADwAAAAKAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAABgCGkgMAAQAAAAYAAACGkgUAAQAAAGYDAACGkgUAAQAAAG4DAACGkgMAAQAAAAIAAACGkgQAAQAAAPQPAACGkgQAAQAAABAPAAAAAAAASAAAAAEAAABIAAAAAQAAAAIAAQACAAQAAABSOTgAAgAHAAQAAAAwMTAwAAAAABoAAAAHAAQAAABNTFQwAAIEAAMAAADSBAAAAQIDAAEAAAADAAAAAgIDAAEAAAAAAAAAAwIDAAEAAAAAAAAABAIFAAEAAADeBAAADgIDAAEAAAAAAAAADwIDAAEAAAAAAAAAEAIDAAEAAAAAAAAAEQIDAAEAAAAAAAAAEgIDAAEAAAAAAAAAEwIDAAEAAAAAAAAAFAIDAAEAAAAAAAAAFQIDAAEAAAAAAAAAFgIDAAEAAAAAAAAAFwIDAAEAAAAAAAAAGAIDAAEAAAAAAAAAGQIDAAEAAAAAAAAAGgIDAAEAAAAAAAAAGwIDAAEAAAAAAAAAHAIDAAEAAAAAAAAAHQIDAAEAAAAAAAAAHgIDAAEAAAAAAAAAHwIDAAEAAAAAAAAAAA4HACgAAADmBAAAAA8HAP4AAAAOBQAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAUHJpbnRJTQAwMTAwAAAEAAEAFgAWAAIAAQAAAAABAQAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAFli4AAAAAAAVnAAAsngAABWcAACyeAAAAAAEAAAAL+gAdAdQBBAAAAAAAAAAAAAAAxREAAAAsLhYEAAAAAAAAAAAAAAAAGRwAADsADkIAAAAAAAAAAAAAAAAAAAAAAAAFhf/wdQAAAAAAAMUQNgAAAACZmZmZGWESMXV4iYoOExgUEhAWEgAAAIUADAAGAQCAUwABA4QAAAAPatX+aw5RAGIOgSNXAGQA0gwXDQb/////AQIQQAACAP8AQABAAAAAEAAAAAARERERAAJhAgBDAAAaHRseAAAAAAAAFDIPYQAAHyIbHh4hHyOHZUMh///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Y/9sAxQALBwgKCAcLCgkKDAwLDRAbEhAPDxAhGBkUGycjKSknIyYlLDE/NSwuOy8lJjZKNztBQ0ZHRio0TVJMRFI/RUZDAQwMDBAOECASEiBDLSYtQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MCDAwMEA4QIBISIEMtJi1DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ//EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx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nkbYk+tayKjquYXB2j5x3repfl0M4bjZbVeSpwSOpFUHJjkKHqKmnO+hU421Ogvir6fIsjFVwMkDOOaZa2s1xbQSQTDYq7fmGCeTWjM0+qLSWt7HyJcj2c1pWryrAFm5fPXOaixTloP3U5MYJNMlCsueaYwAoQMglmjjIDsB9aYZ4uvmLj61diRRdRICwkXgetVpL23lBV5FAbr81RNaFQ3KT3kbOXaVQo4Ve5rCuARLJkDdjk5zWdOMru5rUasiW1aSHR1lE4hI3FQQPm68c0ZuLzTzKboNgZeMADGP/wBVQ+XmvYa5lGyKcrEQKT2NXkuHeJf3jYxwBxXQ4prUxUmtiIqD8xOX9TyaquzbyWJJ9TTUUhttnS6j82nyAd8D9RUdtNeQ26JDv8tRxhMik9hRtrclGpXaL8wB+q1o6bdPdW5eQAENjip1KdrFoHNOz0qiR+7ionbmhCZj61/rEPsapLJhVG1Tx3rZLQm9iE3kTLhkQEjpUUcIYhktt49geaG7K7Ba6CNaTTsMWCoo7swGazoXimkwYcKBljuPFRGpGTaRUoNLUnttWhWIwPah448lc8/zqVb+OSNo7a1EQkGGbgcVhKk+bfQ1jNJbalW9wYiMdKktDmBa2Mh7N85FV5upNCBnQWd5a3EO2SeIAjn5wK0IbizhhCLcxbR0zIKgeo9b616faYf++xThf2uP+PmH/v4KB2HDULX/AJ+Yf+/gpRf2v/PzD/38FArMkW/tM/8AHzB/38FMkvrXd/x8w/8AfwU1uKV7GVq91bO8eLiI9ejis77TAVCmaMjBB+YVtFohp2I47mASLmWPGf7wrVbWrORMPceSfVWBrKtHmtY1pO25Vu5YLi1222pJuBzv8wAnrwa5n7TGtqyIw3E/Mc1nRsrq1iqt3Ybash3DenI7kVbSVIvmEseB23CtXYz1B7iKSBsumSf71SWk8SwjMiZ/3hSCzHPPFvz5if8AfQqKSeIc+YmD15FO4WZ//9n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bAEMAAQEBAQEBAQEBAQICAQEBAgICAgIDBAUDAgMDBAYFBAQEBQUFBAYHBQUGBwgHBgkGBAUICAgICQoJBgcKCAgICP/bAEMBAQEBAgICBAICBAgFBAUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICP/AABEIBQADwAMBEgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APx90DwTH+6P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" - scenario.variables["phonenumber"] = "" - scenario.variables["templateid0"] = "" - scenario.variables["sigid0"] = "" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUSMSSignatureResponse"), - ], - action="CreateUSMSSignature", -) -def create_usms_signature_00(client, variables): - d = { - "SigType": 0, - "SigPurpose": 0, - "SigContent": "test", - "File": variables.get("file"), - "Description": "test-sdk", - "CertificateType": 0, - } - try: - resp = client.usms().create_usms_signature(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SigId"] = utest.value_at_path(resp, "SigId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "QueryUSMSSignatureResponse"), - ], - action="QueryUSMSSignature", -) -def query_usms_signature_01(client, variables): - d = {"SigId": variables.get("SigId")} - try: - resp = client.usms().query_usms_signature(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateUSMSSignatureResponse"), - ], - action="UpdateUSMSSignature", -) -def update_usms_signature_02(client, variables): - d = { - "SigType": 0, - "SigPurpose": 0, - "SigId": variables.get("SigId"), - "SigContent": "test-sig-update", - "File": variables.get("file"), - } - try: - resp = client.usms().update_usms_signature(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUSMSSignatureResponse"), - ], - action="DeleteUSMSSignature", -) -def delete_usms_signature_03(client, variables): - d = {"SigIds": [variables.get("SigId")]} - try: - resp = client.usms().delete_usms_signature(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUSMSTemplateResponse"), - ], - action="CreateUSMSTemplate", -) -def create_usms_template_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "TemplateName": "test-sdk-template", - "Template": "this is a sdk template", - "Region": variables.get("Region"), - "Purpose": 1, - } - try: - resp = client.usms().create_usms_template(d) - except exc.RetCodeException as e: - resp = e.json() - variables["TemplateId"] = utest.value_at_path(resp, "TemplateId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "QueryUSMSTemplateResponse"), - ], - action="QueryUSMSTemplate", -) -def query_usms_template_05(client, variables): - d = {"TemplateId": variables.get("TemplateId")} - try: - resp = client.usms().query_usms_template(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateUSMSTemplateResponse"), - ], - action="UpdateUSMSTemplate", -) -def update_usms_template_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "TemplateId": variables.get("TemplateId"), - "Template": "test-sdk-template-update", - "Region": variables.get("Region"), - } - try: - resp = client.usms().update_usms_template(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteUSMSTemplateResponse"), - ], - action="DeleteUSMSTemplate", -) -def delete_usms_template_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "TemplateIds": [variables.get("TemplateId")], - "Region": variables.get("Region"), - } - try: - resp = client.usms().delete_usms_template(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "SendUSMSMessageResponse"), - ], - action="SendUSMSMessage", -) -def send_usms_message_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "TemplateId": variables.get("templateid0"), - "SigContent": variables.get("sigid0"), - "Region": variables.get("Region"), - "PhoneNumbers": [variables.get("phonenumber")], - "TemplateParams": ["101010"], - } - try: - resp = client.usms().send_usms_message(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SessionNo"] = utest.value_at_path(resp, "SessionNo") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUSMSSendReceiptResponse"), - ], - action="GetUSMSSendReceipt", -) -def get_usms_send_receipt_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "SessionNoSet": [variables.get("SessionNo")], - "Region": variables.get("Region"), - } - try: - resp = client.usms().get_usms_send_receipt(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_4140.py b/tests/test_services/test_set_4140.py deleted file mode 100644 index 0ec13c9..0000000 --- a/tests/test_services/test_set_4140.py +++ /dev/null @@ -1,546 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(4140) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_4140(client, variables): - scenario.initial(variables) - scenario.variables["BucketName_test"] = funcs.concat( - "ucdntest-", funcs.get_timestamp(10) - ) - scenario.variables["time_granule_type"] = 1 - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateBucketResponse"), - ], - action="CreateBucket", -) -def create_bucket_00(client, variables): - d = { - "Region": variables.get("Region"), - "BucketName": variables.get("BucketName_test"), - } - try: - resp = client.invoke("CreateBucket", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StartUcdnTestDomainResponse"), - ], - action="StartUcdnTestDomain", -) -def start_ucdn_test_domain_01(client, variables): - d = { - "Region": variables.get("Region"), - "BucketName": variables.get("BucketName_test"), - } - try: - resp = client.invoke("StartUcdnTestDomain", d) - except exc.RetCodeException as e: - resp = e.json() - variables["domainId"] = utest.value_at_path(resp, "DomainId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=3, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUcdnDomainResponse"), - ("str_eq", "DomainSet.0.ChannelType", "ucdn"), - ( - "str_eq", - "DomainSet.0.Domain", - funcs.concat( - variables.get("BucketName_test"), ".ufile.ucloud.com.cn" - ), - ), - ("str_eq", "DomainSet.0.DomainId", variables.get("domainId")), - ("str_eq", "DomainSet.0.Status", "check"), - ], - action="DescribeUcdnDomain", -) -def describe_ucdn_domain_02(client, variables): - d = {"DomainId": [variables.get("domainId")]} - try: - resp = client.invoke("DescribeUcdnDomain", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=200, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUcdnDomainResponse"), - ("str_eq", "DomainSet.0.ChannelType", "ucdn"), - ( - "str_eq", - "DomainSet.0.Domain", - funcs.concat( - variables.get("BucketName_test"), ".ufile.ucloud.com.cn" - ), - ), - ("str_eq", "DomainSet.0.DomainId", variables.get("domainId")), - ("str_eq", "DomainSet.0.Status", "enable"), - ], - action="DescribeUcdnDomain", -) -def describe_ucdn_domain_03(client, variables): - d = {"DomainId": [variables.get("domainId")]} - try: - resp = client.invoke("DescribeUcdnDomain", d) - except exc.RetCodeException as e: - resp = e.json() - variables["domain"] = utest.value_at_path(resp, "DomainSet.0.Domain") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "BatchDescribeNewUcdnDomainResponse"), - ], - action="BatchDescribeNewUcdnDomain", -) -def batch_describe_new_ucdn_domain_04(client, variables): - d = {} - try: - resp = client.ucdn().batch_describe_new_ucdn_domain(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetNewUcdnDomainHttpCodeV2Response"), - ], - action="GetNewUcdnDomainHttpCodeV2", -) -def get_new_ucdn_domain_http_code_v2_05(client, variables): - d = { - "Type": variables.get("time_granule_type"), - "EndTime": funcs.get_timestamp(10), - "BeginTime": funcs.get_timestamp(10) - 10000, - } - try: - resp = client.ucdn().get_new_ucdn_domain_http_code_v2(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetNewUcdnDomainHitRateResponse"), - ], - action="GetNewUcdnDomainHitRate", -) -def get_new_ucdn_domain_hit_rate_06(client, variables): - d = { - "Type": variables.get("time_granule_type"), - "EndTime": funcs.get_timestamp(10), - "BeginTime": funcs.get_timestamp(10) - 1000, - } - try: - resp = client.ucdn().get_new_ucdn_domain_hit_rate(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetNewUcdnDomainHttpCodeResponse"), - ], - action="GetNewUcdnDomainHttpCode", -) -def get_new_ucdn_domain_http_code_07(client, variables): - d = { - "Type": variables.get("time_granule_type"), - "EndTime": funcs.get_timestamp(10), - "BeginTime": funcs.get_timestamp(10) - 10000, - } - try: - resp = client.ucdn().get_new_ucdn_domain_http_code(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "PrefetchNewUcdnDomainCacheResponse"), - ], - action="PrefetchNewUcdnDomainCache", -) -def prefetch_new_ucdn_domain_cache_08(client, variables): - d = {"UrlList": [funcs.concat("http://", variables.get("domain"), "/")]} - try: - resp = client.ucdn().prefetch_new_ucdn_domain_cache(d) - except exc.RetCodeException as e: - resp = e.json() - variables["PrefetchCache_TaskId"] = utest.value_at_path(resp, "TaskId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeNewUcdnPrefetchCacheTaskResponse"), - ], - action="DescribeNewUcdnPrefetchCacheTask", -) -def describe_new_ucdn_prefetch_cache_task_09(client, variables): - d = {"TaskId": [variables.get("PrefetchCache_TaskId")]} - try: - resp = client.ucdn().describe_new_ucdn_prefetch_cache_task(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeNewUcdnRefreshCacheTaskResponse"), - ], - action="DescribeNewUcdnRefreshCacheTask", -) -def describe_new_ucdn_refresh_cache_task_10(client, variables): - d = {"TaskId": [variables.get("PrefetchCache_TaskId")]} - try: - resp = client.ucdn().describe_new_ucdn_refresh_cache_task(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "RefreshNewUcdnDomainCacheResponse"), - ], - action="RefreshNewUcdnDomainCache", -) -def refresh_new_ucdn_domain_cache_11(client, variables): - d = { - "UrlList": [funcs.concat("http://", variables.get("domain"), "/")], - "Type": "file", - } - try: - resp = client.ucdn().refresh_new_ucdn_domain_cache(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetNewUcdnDomainBandwidthResponse"), - ], - action="GetNewUcdnDomainBandwidth", -) -def get_new_ucdn_domain_bandwidth_12(client, variables): - d = {"Type": variables.get("time_granule_type")} - try: - resp = client.ucdn().get_new_ucdn_domain_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUcdnPassBandwidthResponse"), - ], - action="GetUcdnPassBandwidth", -) -def get_ucdn_pass_bandwidth_13(client, variables): - d = {"Type": variables.get("time_granule_type")} - try: - resp = client.ucdn().get_ucdn_pass_bandwidth(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUcdnDomainRequestNumV2Response"), - ], - action="GetUcdnDomainRequestNumV2", -) -def get_ucdn_domain_request_num_v2_14(client, variables): - d = { - "Type": variables.get("time_granule_type"), - "EndTime": funcs.get_timestamp(10), - "DomainId": [variables.get("domainId")], - "BeginTime": funcs.get_timestamp(10) - 1000, - } - try: - resp = client.ucdn().get_ucdn_domain_request_num_v2(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUcdnDomainLogResponse"), - ], - action="GetUcdnDomainLog", -) -def get_ucdn_domain_log_15(client, variables): - d = { - "Type": variables.get("time_granule_type"), - "DomainId": [variables.get("domainId")], - } - try: - resp = client.ucdn().get_ucdn_domain_log(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUcdnTrafficResponse"), - ], - action="GetUcdnTraffic", -) -def get_ucdn_traffic_16(client, variables): - d = {} - try: - resp = client.ucdn().get_ucdn_traffic(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUcdnDomainTrafficResponse"), - ], - action="GetUcdnDomainTraffic", -) -def get_ucdn_domain_traffic_17(client, variables): - d = {"AccountType": "top"} - try: - resp = client.ucdn().get_ucdn_domain_traffic(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetUcdnDomainPrefetchEnableResponse"), - ("str_eq", "Enable", 1), - ], - action="GetUcdnDomainPrefetchEnable", -) -def get_ucdn_domain_prefetch_enable_18(client, variables): - d = {"DomainId": variables.get("domainId")} - try: - resp = client.ucdn().get_ucdn_domain_prefetch_enable(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "SwitchUcdnChargeTypeResponse"), - ], - action="SwitchUcdnChargeType", -) -def switch_ucdn_charge_type_19(client, variables): - d = {"ChargeType": "traffic"} - try: - resp = client.ucdn().switch_ucdn_charge_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUcdnTestDomainResponse"), - ], - action="StopUcdnTestDomain", -) -def stop_ucdn_test_domain_20(client, variables): - d = { - "Region": variables.get("Region"), - "BucketName": variables.get("BucketName_test"), - } - try: - resp = client.invoke("StopUcdnTestDomain", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUcdnDomainResponse"), - ("str_eq", "DomainSet.0.ChannelType", "ucdn"), - ( - "str_eq", - "DomainSet.0.Domain", - funcs.concat( - variables.get("BucketName_test"), ".ufile.ucloud.com.cn" - ), - ), - ("str_eq", "DomainSet.0.DomainId", variables.get("domainId")), - ("str_eq", "DomainSet.0.Status", "deleteing"), - ], - action="DescribeUcdnDomain", -) -def describe_ucdn_domain_21(client, variables): - d = {"DomainId": [variables.get("domainId")]} - try: - resp = client.invoke("DescribeUcdnDomain", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=120, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteBucketResponse"), - ], - action="DeleteBucket", -) -def delete_bucket_22(client, variables): - d = {"BucketName": variables.get("BucketName_test")} - try: - resp = client.invoke("DeleteBucket", d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_448.py b/tests/test_services/test_set_448.py deleted file mode 100644 index 19c558a..0000000 --- a/tests/test_services/test_set_448.py +++ /dev/null @@ -1,378 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(448) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_448(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["CreateBootDisk"] = 20 - scenario.variables["ChargeType"] = "Month" - scenario.variables["CreateCPU"] = 1 - scenario.variables["CreateMem"] = 1024 - scenario.variables["CreateDiskspace"] = 20 - scenario.variables["UpgradeDiskSpace"] = 30 - scenario.variables["NewPassword"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["Name"] = "uhost-basic-api-N2-Normal-LocalDisk-1" - scenario.variables["ImageID"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.variables["UpgradeBootDisk"] = 40 - scenario.variables["UpgradeCPU"] = 2 - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "No", - "Tag": "Default", - "StorageType": "LocalDisk", - "Region": variables.get("Region"), - "Quantity": 1, - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "NetCapability": "Normal", - "Name": variables.get("Name"), - "Memory": variables.get("CreateMem"), - "LoginMode": "Password", - "ImageId": variables.get("ImageID"), - "HotplugFeature": False, - "HostType": "N2", - "GPU": False, - "DiskSpace": variables.get("CreateDiskspace"), - "ChargeType": variables.get("ChargeType"), - "CPU": variables.get("CreateCPU"), - "BootDiskSpace": variables.get("CreateBootDisk"), - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=200, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.CPU", variables.get("CreateCPU")), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ( - "str_eq", - "UHostSet.0.TotalDiskSpace", - variables.get("CreateDiskspace"), - ), - ("str_eq", "UHostSet.0.HostType", "N2"), - ("str_eq", "UHostSet.0.UHostType", "Normal"), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=60, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RebootUHostInstance", -) -def reboot_uhost_instance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().reboot_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.CPU", variables.get("CreateCPU")), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ( - "str_eq", - "UHostSet.0.TotalDiskSpace", - variables.get("CreateDiskspace"), - ), - ("str_eq", "UHostSet.0.HostType", "N2"), - ("str_eq", "UHostSet.0.UHostType", "Normal"), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.State", "Running"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUHostInstance", -) -def stop_uhost_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetRestResourceResponse"), - ("str_eq", "UpgradeStatus", True), - ], - action="GetRestResource", -) -def get_rest_resource_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - "CPU": variables.get("UpgradeCPU"), - } - try: - resp = client.invoke("GetRestResource", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=45, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUHostInstance", -) -def resize_uhost_instance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - "CPU": variables.get("UpgradeCPU"), - } - try: - resp = client.uhost().resize_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=60, - retry_interval=30, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ("str_eq", "UHostSet.0.CPU", variables.get("UpgradeCPU")), - ("str_eq", "UHostSet.0.HostType", "N2"), - ("str_eq", "UHostSet.0.UHostType", "Normal"), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=30, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_449.py b/tests/test_services/test_set_449.py deleted file mode 100644 index 35da0c9..0000000 --- a/tests/test_services/test_set_449.py +++ /dev/null @@ -1,313 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(449) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_449(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["CreateBootDisk"] = 20 - scenario.variables["ChargeType"] = "Month" - scenario.variables["CreateCPU"] = 1 - scenario.variables["CreateMem"] = 1024 - scenario.variables["CreateDiskspace"] = 0 - scenario.variables["NewPassword"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["Name"] = "uhost-basic-api" - scenario.variables["ImageID"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=20, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "No", - "Tag": "Default", - "StorageType": "LocalDisk", - "Region": variables.get("Region"), - "Quantity": 1, - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "NetCapability": "Normal", - "Name": variables.get("Name"), - "Memory": variables.get("CreateMem"), - "LoginMode": "Password", - "ImageId": variables.get("ImageID"), - "HotplugFeature": False, - "HostType": "N2", - "GPU": False, - "DiskSpace": variables.get("CreateDiskspace"), - "ChargeType": variables.get("ChargeType"), - "CPU": variables.get("CreateCPU"), - "BootDiskSpace": variables.get("CreateBootDisk"), - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=200, - retry_interval=30, - startup_delay=60, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.CPU", variables.get("CreateCPU")), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ( - "str_eq", - "UHostSet.0.TotalDiskSpace", - variables.get("CreateDiskspace"), - ), - ("str_eq", "UHostSet.0.HostType", "N2"), - ("str_eq", "UHostSet.0.UHostType", "Normal"), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUHostInstanceResponse"), - ], - action="StopUHostInstance", -) -def stop_uhost_instance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.CPU", variables.get("CreateCPU")), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ( - "str_eq", - "UHostSet.0.TotalDiskSpace", - variables.get("CreateDiskspace"), - ), - ("str_eq", "UHostSet.0.HostType", "N2"), - ("str_eq", "UHostSet.0.UHostType", "Normal"), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=60, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ReinstallUHostInstance", -) -def reinstall_uhost_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - "Password": variables.get("NewPassword"), - "ImageId": variables.get("ImageID"), - } - try: - resp = client.uhost().reinstall_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=200, - retry_interval=30, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ( - "str_eq", - "UHostSet.0.TotalDiskSpace", - variables.get("CreateDiskspace"), - ), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ("str_eq", "UHostSet.0.CPU", variables.get("CreateCPU")), - ("str_eq", "UHostSet.0.HostType", "N2"), - ("str_eq", "UHostSet.0.UHostType", "Normal"), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.State", "Running"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=60, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=60, - fast_fail=False, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_471.py b/tests/test_services/test_set_471.py deleted file mode 100644 index ffeaced..0000000 --- a/tests/test_services/test_set_471.py +++ /dev/null @@ -1,284 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(471) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_471(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["CreateBootDisk"] = 20 - scenario.variables["ChargeType"] = "Month" - scenario.variables["CreateCPU"] = 1 - scenario.variables["CreateMem"] = 1024 - scenario.variables["CreateDiskspace"] = 0 - scenario.variables["NewPassword"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["Name"] = "uhost-basic-api-ResetPassword" - scenario.variables["ImageID"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "No", - "Tag": "Default", - "StorageType": "LocalDisk", - "Region": variables.get("Region"), - "Quantity": 1, - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "NetCapability": "Normal", - "Name": variables.get("Name"), - "Memory": variables.get("CreateMem"), - "LoginMode": "Password", - "ImageId": variables.get("ImageID"), - "HotplugFeature": False, - "GPU": False, - "DiskSpace": variables.get("CreateDiskspace"), - "ChargeType": variables.get("ChargeType"), - "CPU": variables.get("CreateCPU"), - "BootDiskSpace": variables.get("CreateBootDisk"), - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=120, - retry_interval=30, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.CPU", variables.get("CreateCPU")), - ("str_eq", "UHostSet.0.Memory", variables.get("CreateMem")), - ("str_eq", "UHostSet.0.UHostId", variables.get("hostId")), - ("str_eq", "UHostSet.0.Name", variables.get("Name")), - ( - "str_eq", - "UHostSet.0.TotalDiskSpace", - variables.get("CreateDiskspace"), - ), - ("str_eq", "UHostSet.0.StorageType", "LocalDisk"), - ("str_eq", "UHostSet.0.BasicImageId", variables.get("ImageID")), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ("str_eq", "UHostSet.0.State", "Running"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=5, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUHostInstanceResponse"), - ], - action="StopUHostInstance", -) -def stop_uhost_instance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=60, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=30, - startup_delay=20, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResetUHostInstancePassword", -) -def reset_uhost_instance_password_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - "Password": variables.get("NewPassword"), - } - try: - resp = client.uhost().reset_uhost_instance_password(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=60, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=60, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="PoweroffUHostInstance", -) -def poweroff_uhost_instance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().poweroff_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=30, - fast_fail=True, - action="TerminateUHostInstance", -) -def terminate_uhost_instance_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_488.py b/tests/test_services/test_set_488.py deleted file mode 100644 index 66f8474..0000000 --- a/tests/test_services/test_set_488.py +++ /dev/null @@ -1,550 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(488) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_488(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "percona-5.6" - scenario.variables["InstanceMode"] = "HA" - scenario.variables["InstanceType"] = "Normal" - scenario.variables["Port"] = 3306 - scenario.variables["MemoryLimit"] = 1000 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "auto_habz_" - scenario.variables["UseSSD"] = False - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstance", -) -def describe_udb_instance_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_01(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstancePrice", -) -def describe_udb_instance_price_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "Count": 1, - } - try: - resp = client.udb().describe_udb_instance_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=60, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstancePhpMyAdminURLResponse"), - ("ne", "PMAPath", ""), - ], - action="DescribeUDBInstancePhpMyAdminURL", -) -def describe_udb_instance_php_my_admin_url_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.invoke("DescribeUDBInstancePhpMyAdminURL", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ModifyUDBInstanceName", -) -def modify_udb_instance_name_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Name": funcs.concat("rename_", variables.get("DBTypeId")), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().modify_udb_instance_name(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat("rename_", variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ModifyUDBInstancePassword", -) -def modify_udb_instance_password_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Password": "Guanliyuanmima", - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().modify_udb_instance_password(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RestartUDBInstance", -) -def restart_udb_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().restart_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StartUDBInstance", -) -def start_udb_instance_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().start_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_489.py b/tests/test_services/test_set_489.py deleted file mode 100644 index f30580c..0000000 --- a/tests/test_services/test_set_489.py +++ /dev/null @@ -1,880 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(489) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_489(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "mysql-5.6" - scenario.variables["InstanceMode"] = "HA" - scenario.variables["InstanceType"] = "SATA_SSD" - scenario.variables["Port"] = 3306 - scenario.variables["MemoryLimit"] = 1000 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "auto_hassd_" - scenario.variables["BackupName"] = "handbf_test_02" - scenario.variables["UseSSD"] = True - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstancePrice", -) -def describe_udb_instance_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "Count": 1, - } - try: - resp = client.udb().describe_udb_instance_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdateUDBInstanceBackupStrategy", -) -def update_udb_instance_backup_strategy_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "BackupTime": 13, - "BackupDate": 1111110, - } - try: - resp = client.udb().update_udb_instance_backup_strategy(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="EditUDBBackupBlacklist", -) -def edit_udb_backup_blacklist_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "Blacklist": "test.%", - } - try: - resp = client.udb().edit_udb_backup_blacklist(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Blacklist", "test.%"), - ], - action="DescribeUDBBackupBlacklist", -) -def describe_udb_backup_blacklist_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_backup_blacklist(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=2, - retry_interval=1, - startup_delay=15, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="BackupUDBInstance", -) -def backup_udb_instance_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseBlacklist": True, - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "BackupName": variables.get("BackupName"), - } - try: - resp = client.udb().backup_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=50, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.State", "Success"), - ], - action="DescribeUDBBackup", -) -def describe_udb_backup_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_backup(d) - except exc.RetCodeException as e: - resp = e.json() - variables["BackupId"] = utest.value_at_path(resp, "DataSet.0.BackupId") - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Success"), - ("ne", "BackupSize", 0), - ("ne", "BackupEndTime", 0), - ], - action="DescribeUDBInstanceBackupState", -) -def describe_udb_instance_backup_state_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "BackupId": variables.get("BackupId"), - } - try: - resp = client.udb().describe_udb_instance_backup_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("contains", "BackupPath", "http://"), - ], - action="DescribeUDBInstanceBackupURL", -) -def describe_udb_instance_backup_url_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "BackupId": variables.get("BackupId"), - } - try: - resp = client.udb().describe_udb_instance_backup_url(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": 3306, - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - "mysql-5.6", - "GroupId", - ), - "Name": "frombf-hassd-56", - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": "mysql-5.6", - "ChargeType": "Month", - "BackupId": variables.get("BackupId"), - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId_frombf_56"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId_frombf_56"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=5, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId_frombf_56"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=2, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId_frombf_56"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId_frombf_56"), - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("ne", "EarliestTime", 0), - ], - action="FetchUDBInstanceEarliestRecoverTime", -) -def fetch_udb_instance_earliest_recover_time_21(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().fetch_udb_instance_earliest_recover_time(d) - except exc.RetCodeException as e: - resp = e.json() - variables["EarliestTime"] = utest.value_at_path(resp, "EarliestTime") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_22(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "sql", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstanceByRecovery", -) -def create_udb_instance_by_recovery_23(client, variables): - d = { - "Zone": variables.get("Zone"), - "SrcDBId": variables.get("DBId"), - "Region": variables.get("Region"), - "RecoveryTime": variables.get("EarliestTime"), - "Quantity": 0, - "Name": "56-hd-frombf", - "ChargeType": "Month", - } - try: - resp = client.udb().create_udb_instance_by_recovery(d) - except exc.RetCodeException as e: - resp = e.json() - variables["HD_DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_24(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("HD_DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=5, - startup_delay=3, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_25(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("HD_DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_26(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("HD_DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_27(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("HD_DBId"), - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBBackup", -) -def delete_udb_backup_28(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "BackupId": variables.get("BackupId"), - } - try: - resp = client.udb().delete_udb_backup(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_29(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_30(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBInstance", -) -def delete_udb_instance_31(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId_frombf_56"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBInstance", -) -def delete_udb_instance_32(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("HD_DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBInstance", -) -def delete_udb_instance_33(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_490.py b/tests/test_services/test_set_490.py deleted file mode 100644 index cbed224..0000000 --- a/tests/test_services/test_set_490.py +++ /dev/null @@ -1,713 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(490) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_490(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "mysql-5.7" - scenario.variables["InstanceMode"] = "HA" - scenario.variables["InstanceType"] = "SATA_SSD" - scenario.variables["Port"] = 3306 - scenario.variables["MemoryLimit"] = 1000 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "auto_hassd_" - scenario.variables["UseSSD"] = True - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstancePrice", -) -def describe_udb_instance_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "Count": 1, - } - try: - resp = client.udb().describe_udb_instance_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "sql", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceConnection", -) -def check_udb_instance_connection_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.invoke("CheckUDBInstanceConnection", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CheckUDBEngineResponse"), - ("str_eq", "Used", False), - ], - action="CheckUDBEngine", -) -def check_udb_engine_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "EngineType": "MyISAM", - "DBId": variables.get("DBId"), - } - try: - resp = client.invoke("CheckUDBEngine", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBSlave", -) -def create_udb_slave_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "SrcId": variables.get("DBId"), - "Region": variables.get("Region"), - "Port": 3307, - "Name": "auto_slave-create_3307", - "IsLock": True, - } - try: - resp = client.udb().create_udb_slave(d) - except exc.RetCodeException as e: - resp = e.json() - variables["slave_dbid"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=90, - retry_interval=2, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateUDBInstanceSlaveBackupSwitchResponse"), - ], - action="UpdateUDBInstanceSlaveBackupSwitch", -) -def update_udb_instance_slave_backup_switch_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "SlaveDBId": variables.get("slave_dbid"), - "Region": variables.get("Region"), - "MasterDBId": variables.get("DBId"), - "BackupSwitch": 1, - } - try: - resp = client.udb().update_udb_instance_slave_backup_switch(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBSlaveOrSecondaryInstance", -) -def describe_udb_slave_or_secondary_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "ClassType": "mysql", - } - try: - resp = client.invoke("DescribeUDBSlaveOrSecondaryInstance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="RestartUDBInstance", -) -def restart_udb_instance_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().restart_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=35, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Shutoff"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StartUDBInstance", -) -def start_udb_instance_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().start_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="PromoteUDBSlave", -) -def promote_udb_slave_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "IsForce": True, - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().promote_udb_slave(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_21(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=20, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_22(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("slave_dbid"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_23(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=45, - retry_interval=2, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_24(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ListMonitorItemsResponse"), - ], - action="ListMonitorItems", -) -def list_monitor_items_25(client, variables): - d = { - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.invoke("ListMonitorItems", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBInstance", -) -def delete_udb_instance_26(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("slave_dbid"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=20, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBInstance", -) -def delete_udb_instance_27(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_499.py b/tests/test_services/test_set_499.py deleted file mode 100644 index 933876f..0000000 --- a/tests/test_services/test_set_499.py +++ /dev/null @@ -1,554 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(499) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_499(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "percona-5.5" - scenario.variables["InstanceMode"] = "HA" - scenario.variables["InstanceType"] = "SATA_SSD" - scenario.variables["Port"] = 3306 - scenario.variables["MemoryLimit"] = 1000 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "auto_hassd_" - scenario.variables["UseSSD"] = True - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstancePrice", -) -def describe_udb_instance_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "Count": 1, - } - try: - resp = client.udb().describe_udb_instance_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=30, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBParamGroup", -) -def create_udb_param_group_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "SrcGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Region": variables.get("Region"), - "GroupName": "auto_config_create", - "Description": "self_create", - "DBTypeId": variables.get("DBTypeId"), - } - try: - resp = client.udb().create_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["create_config_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UpdateUDBParamGroup", -) -def update_udb_param_group_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "Value": 2, - "Region": variables.get("Region"), - "Key": "auto_increment_increment", - "GroupId": variables.get("create_config_id"), - } - try: - resp = client.udb().update_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="UploadUDBParamGroup", -) -def upload_udb_param_group_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupName": "auto_config_upload", - "Description": "self_upload", - "DBTypeId": variables.get("DBTypeId"), - "Content": "W215c3FsZF0KYXV0b19pbmNyZW1lbnRfaW5jcmVtZW50ID0gMgpiYWNrX2xvZyA9IDIwMDAKYmlubG9nLWZvcm1hdCA9IE1JWEVECmNoYXJhY3Rlcl9zZXRfc2VydmVyID0gdXRmOApldmVudF9zY2hlZHVsZXIgPSBPTgpleHBpcmVfbG9nc19kYXlzID0gNwppbm5vZGJfYnVmZmVyX3Bvb2xfc2l6ZSA9IDUzNjg3MDkxMjAwCmlubm9kYl9maWxlX3Blcl90YWJsZSA9IDEKaW5ub2RiX2ZsdXNoX2xvZ19hdF90cnhfY29tbWl0ID0gMgppbm5vZGJfZmx1c2hfbWV0aG9kID0gT19ESVJFQ1QKaW5ub2RiX2lvX2NhcGFjaXR5ID0gMjAwMAppbm5vZGJfbG9nX2J1ZmZlcl9zaXplID0gODM4ODYwOAppbm5vZGJfbWF4X2RpcnR5X3BhZ2VzX3BjdCA9IDUwCmlubm9kYl9vcGVuX2ZpbGVzID0gMTAyNAppbm5vZGJfcmVhZF9pb190aHJlYWRzID0gOAppbm5vZGJfc29ydF9idWZmZXJfc2l6ZSA9IDEwNDg1NzYKaW5ub2RiX3RocmVhZF9jb25jdXJyZW5jeSA9IDIwCmlubm9kYl93cml0ZV9pb190aHJlYWRzID0gOAprZXlfYnVmZmVyX3NpemUgPSAzMzU1NDQzMgpsb2NhbF9pbmZpbGUgPSAxCmxvZ19iaW5fdHJ1c3RfZnVuY3Rpb25fY3JlYXRvcnMgPSAxCmxvbmdfcXVlcnlfdGltZSA9IDMKbWF4X2FsbG93ZWRfcGFja2V0ID0gMTY3NzcyMTYKbWF4X2Nvbm5lY3RfZXJyb3JzID0gMTAwMDAwMAptYXhfY29ubmVjdGlvbnMgPSAyMDAwCm15aXNhbV9zb3J0X2J1ZmZlcl9zaXplID0gODM4ODYwOApuZXRfYnVmZmVyX2xlbmd0aCA9IDgxOTIKcGVyZm9ybWFuY2Vfc2NoZW1hID0gMApwZXJmb3JtYW5jZV9zY2hlbWFfbWF4X3RhYmxlX2luc3RhbmNlcyA9IDIwMApxdWVyeV9jYWNoZV9zaXplID0gMApxdWVyeV9jYWNoZV90eXBlID0gMApyZWFkX2J1ZmZlcl9zaXplID0gMjYyMTQ0CnJlYWRfcm5kX2J1ZmZlcl9zaXplID0gNTI0Mjg4CnNraXBfbmFtZV9yZXNvbHZlID0gMQpzb3J0X2J1ZmZlcl9zaXplID0gNTI0Mjg4CnN5bmNfYmlubG9nID0gMQp0YWJsZV9vcGVuX2NhY2hlID0gMTI4CnRocmVhZF9jYWNoZV9zaXplID0gNTA=", - } - try: - resp = client.udb().upload_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["upload_config_id"] = utest.value_at_path(resp, "GroupId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ExtractUDBParamGroupResponse"), - ], - action="ExtractUDBParamGroup", -) -def extract_udb_param_group_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("upload_config_id"), - } - try: - resp = client.invoke("ExtractUDBParamGroup", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ChangeUDBParamGroupResponse"), - ], - action="ChangeUDBParamGroup", -) -def change_udb_param_group_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("upload_config_id"), - "DBId": variables.get("DBId"), - } - try: - resp = client.invoke("ChangeUDBParamGroup", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.ParamGroupId", variables.get("upload_config_id")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "RestartUDBInstanceResponse"), - ], - action="RestartUDBInstance", -) -def restart_udb_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().restart_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceResponse"), - ("str_eq", "DataSet.0.State", "Running"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUDBInstanceByParamGroupResponse"), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ], - action="DescribeUDBInstanceByParamGroup", -) -def describe_udb_instance_by_param_group_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("upload_config_id"), - } - try: - resp = client.invoke("DescribeUDBInstanceByParamGroup", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 7064)], - action="DeleteUDBParamGroup", -) -def delete_udb_param_group_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("upload_config_id"), - } - try: - resp = client.udb().delete_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUDBInstanceResponse"), - ], - action="StopUDBInstance", -) -def stop_udb_instance_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteUDBParamGroup", -) -def delete_udb_param_group_20(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "GroupId": variables.get("create_config_id"), - } - try: - resp = client.udb().delete_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_503.py b/tests/test_services/test_set_503.py deleted file mode 100644 index e9c6fa0..0000000 --- a/tests/test_services/test_set_503.py +++ /dev/null @@ -1,391 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(503) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_503(client, variables): - scenario.initial(variables) - scenario.variables["Region"] = "cn-bj2" - scenario.variables["Zone"] = "cn-bj2-02" - scenario.variables["DBTypeId"] = "mysql-5.7" - scenario.variables["InstanceMode"] = "HA" - scenario.variables["InstanceType"] = "Normal" - scenario.variables["Port"] = 3306 - scenario.variables["MemoryLimit"] = 1000 - scenario.variables["DiskSpace"] = 20 - scenario.variables["DBName"] = "auto_habz_" - scenario.variables["UseSSD"] = False - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBType", -) -def describe_udb_type_00(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.udb().describe_udb_type(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBParamGroup", -) -def describe_udb_param_group_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - } - try: - resp = client.udb().describe_udb_param_group(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DataSet_paramGroup"] = utest.value_at_path(resp, "DataSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstancePrice", -) -def describe_udb_instance_price_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "Count": 1, - } - try: - resp = client.udb().describe_udb_instance_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit"), - "DiskSpace": variables.get("DiskSpace"), - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUDBInstance", -) -def create_udb_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Quantity": 0, - "Port": variables.get("Port"), - "ParamGroupId": funcs.search_value( - variables.get("DataSet_paramGroup"), - "DBTypeId", - variables.get("DBTypeId"), - "GroupId", - ), - "Name": funcs.concat( - variables.get("DBName"), variables.get("DBTypeId") - ), - "MemoryLimit": variables.get("MemoryLimit"), - "InstanceType": variables.get("InstanceType"), - "InstanceMode": variables.get("InstanceMode"), - "DiskSpace": variables.get("DiskSpace"), - "DBTypeId": variables.get("DBTypeId"), - "ChargeType": "Month", - "AdminPassword": "guanliyuanmima", - } - try: - resp = client.udb().create_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["DBId"] = utest.value_at_path(resp, "DBId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=50, - retry_interval=10, - startup_delay=30, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "State", "Running"), - ], - action="DescribeUDBInstanceState", -) -def describe_udb_instance_state_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_state(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeUDBInstanceUpgradePrice", -) -def describe_udb_instance_upgrade_price_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit") + 1, - "DiskSpace": variables.get("DiskSpace") + 1, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().describe_udb_instance_upgrade_price(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CheckUDBInstanceAllowance", -) -def check_udb_instance_allowance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit") + 1, - "DiskSpace": variables.get("DiskSpace") + 1, - "Count": 1, - "ClassType": "SQL", - } - try: - resp = client.invoke("CheckUDBInstanceAllowance", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=60, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ResizeUDBInstance", -) -def resize_udb_instance_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UseSSD": variables.get("UseSSD"), - "Region": variables.get("Region"), - "MemoryLimit": variables.get("MemoryLimit") + 1, - "DiskSpace": variables.get("DiskSpace") + 1, - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().resize_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=90, - retry_interval=10, - startup_delay=240, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Running"), - ("str_eq", "DataSet.0.MemoryLimit", variables.get("MemoryLimit") + 1), - ("str_eq", "DataSet.0.DiskSpace", variables.get("DiskSpace") + 10), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=5, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="StopUDBInstance", -) -def stop_udb_instance_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().stop_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=100, - retry_interval=3, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ( - "str_eq", - "DataSet.0.Name", - funcs.concat(variables.get("DBName"), variables.get("DBTypeId")), - ), - ("str_eq", "DataSet.0.DBTypeId", variables.get("DBTypeId")), - ("str_eq", "DataSet.0.State", "Shutoff"), - ], - action="DescribeUDBInstance", -) -def describe_udb_instance_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 100, - "DBId": variables.get("DBId"), - "ClassType": "sql", - } - try: - resp = client.udb().describe_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=10, - fast_fail=False, - action="DeleteUDBInstance", -) -def delete_udb_instance_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "DBId": variables.get("DBId"), - } - try: - resp = client.udb().delete_udb_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_687.py b/tests/test_services/test_set_687.py deleted file mode 100644 index 3ac0902..0000000 --- a/tests/test_services/test_set_687.py +++ /dev/null @@ -1,554 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(687) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_687(client, variables): - scenario.initial(variables) - scenario.variables["VPC_name_1"] = "VPC_api_test_1" - scenario.variables["remark"] = "remark_api_test" - scenario.variables["tag"] = "tag_api_test" - scenario.variables["Subnet_name_1_1"] = "subnet_1_1" - scenario.variables["subnet_netmask"] = 24 - scenario.variables["project_id"] = "org-achi1o" - scenario.run(client) - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "GetProjectListResponse"), - ], - action="GetProjectList", -) -def get_project_list_00(client, variables): - d = {} - try: - resp = client.uaccount().get_project_list(d) - except exc.RetCodeException as e: - resp = e.json() - variables["project_list"] = utest.value_at_path(resp, "ProjectSet") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateVPC", -) -def create_vpc_01(client, variables): - d = { - "Tag": variables.get("tag"), - "Remark": variables.get("remark"), - "Region": variables.get("Region"), - "Network": ["172.16.16.0/20"], - "Name": variables.get("VPC_name_1"), - } - try: - resp = client.vpc().create_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VPCId_1"] = utest.value_at_path(resp, "VPCId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateSubnet", -) -def create_subnet_02(client, variables): - d = { - "VPCId": variables.get("VPCId_1"), - "Tag": variables.get("tag"), - "SubnetName": variables.get("Subnet_name_1_1"), - "Subnet": "172.16.17.0", - "Remark": variables.get("remark"), - "Region": variables.get("Region"), - "Netmask": variables.get("subnet_netmask"), - } - try: - resp = client.vpc().create_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SubnetId_1_1"] = utest.value_at_path(resp, "SubnetId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpdateSubnetAttributeResponse"), - ], - action="UpdateSubnetAttribute", -) -def update_subnet_attribute_03(client, variables): - d = { - "Tag": "qa", - "SubnetId": variables.get("SubnetId_1_1"), - "Region": variables.get("Region"), - } - try: - resp = client.vpc().update_subnet_attribute(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DescribeSubnet", -) -def describe_subnet_04(client, variables): - d = { - "SubnetId": variables.get("SubnetId_1_1"), - "Region": variables.get("Region"), - "Offset": 1, - "Limit": 1, - } - try: - resp = client.vpc().describe_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - action="CreateVPC", -) -def create_vpc_05(client, variables): - d = { - "Region": variables.get("Region"), - "Network": ["192.168.16.0/20"], - "Name": "vpc_2", - } - try: - resp = client.vpc().create_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VPCId_2"] = utest.value_at_path(resp, "VPCId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateSubnet", -) -def create_subnet_06(client, variables): - d = { - "VPCId": variables.get("VPCId_2"), - "SubnetName": "Subnet_2_1", - "Subnet": "192.168.17.0", - "Region": variables.get("Region"), - "Netmask": variables.get("subnet_netmask"), - } - try: - resp = client.vpc().create_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SubnetId_2_1"] = utest.value_at_path(resp, "SubnetId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateSubnetResponse"), - ], - action="CreateSubnet", -) -def create_subnet_07(client, variables): - d = { - "VPCId": variables.get("VPCId_2"), - "Tag": "Subnet_2_2", - "SubnetName": "Subnet_2_2", - "Subnet": "192.168.18.0", - "Region": variables.get("Region"), - "Netmask": variables.get("subnet_netmask"), - } - try: - resp = client.vpc().create_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - variables["SubnetId_2_2"] = utest.value_at_path(resp, "SubnetId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.VPCId", variables.get("VPCId_1")), - ("str_eq", "DataSet.0.VPCName", variables.get("VPC_name_1")), - ("str_eq", "DataSet.0.SubnetId", variables.get("SubnetId_1_1")), - ("str_eq", "DataSet.0.SubnetName", variables.get("Subnet_name_1_1")), - ("str_eq", "DataSet.0.Tag", "qa"), - ("str_eq", "DataSet.0.Remark", variables.get("remark")), - ("str_eq", "DataSet.0.SubnetType", 2), - ("str_eq", "DataSet.0.Netmask", 24), - ], - action="DescribeSubnet", -) -def describe_subnet_08(client, variables): - d = { - "VPCId": variables.get("VPCId_1"), - "SubnetId": variables.get("SubnetId_1_1"), - "Region": variables.get("Region"), - } - try: - resp = client.vpc().describe_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="AllocateVIP", -) -def allocate_vip_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "VPCId": variables.get("VPCId_1"), - "SubnetId": variables.get("SubnetId_1_1"), - "Remark": "vip_tag1", - "Region": variables.get("Region"), - "Name": "vip_api_auto", - } - try: - resp = client.unet().allocate_vip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VIPId_1"] = utest.value_at_path(resp, "VIPSet.0.VIPId") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "VIPSet.0.VPCId", variables.get("VPCId_1")), - ("str_eq", "VIPSet.0.VIPId", variables.get("VIPId_1")), - ("str_eq", "VIPSet.0.SubnetId", variables.get("SubnetId_1_1")), - ], - action="DescribeVIP", -) -def describe_vip_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "VPCId": variables.get("VPCId_1"), - "SubnetId": variables.get("SubnetId_1_1"), - "Region": variables.get("Region"), - } - try: - resp = client.unet().describe_vip(d) - except exc.RetCodeException as e: - resp = e.json() - variables["VIP_ip_1"] = utest.value_at_path(resp, "DataSet.0") - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "TotalCount", 1), - ("str_eq", "DataSet.0.ResourceId", variables.get("VIPId_1")), - ("str_eq", "DataSet.0.IP", variables.get("VIP_ip_1")), - ], - action="DescribeSubnetResource", -) -def describe_subnet_resource_11(client, variables): - d = { - "SubnetId": variables.get("SubnetId_1_1"), - "Region": variables.get("Region"), - "Offset": 0, - "Limit": 20, - } - try: - resp = client.vpc().describe_subnet_resource(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="ReleaseVIP", -) -def release_vip_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "VIPId": variables.get("VIPId_1"), - "Region": variables.get("Region"), - } - try: - resp = client.unet().release_vip(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteSubnet", -) -def delete_subnet_13(client, variables): - d = { - "SubnetId": variables.get("SubnetId_1_1"), - "Region": variables.get("Region"), - } - try: - resp = client.vpc().delete_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteSubnet", -) -def delete_subnet_14(client, variables): - d = { - "SubnetId": variables.get("SubnetId_2_1"), - "Region": variables.get("Region"), - } - try: - resp = client.vpc().delete_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=1, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteSubnet", -) -def delete_subnet_15(client, variables): - d = { - "SubnetId": variables.get("SubnetId_2_2"), - "Region": variables.get("Region"), - } - try: - resp = client.vpc().delete_subnet(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "AddVPCNetworkResponse"), - ], - action="AddVPCNetwork", -) -def add_vpc_network_16(client, variables): - d = { - "VPCId": variables.get("VPCId_1"), - "Region": variables.get("Region"), - "Network": ["10.100.96.0/20"], - } - try: - resp = client.vpc().add_vpc_network(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVPCResponse"), - ], - action="DescribeVPC", -) -def describe_vpc_17(client, variables): - d = { - "VPCIds": [variables.get("VPCId_1")], - "Region": variables.get("Region"), - } - try: - resp = client.vpc().describe_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateVPCIntercom", -) -def create_vpc_intercom_18(client, variables): - d = { - "VPCId": variables.get("VPCId_1"), - "Region": variables.get("Region"), - "DstVPCId": variables.get("VPCId_2"), - "DstRegion": variables.get("Region"), - "DstProjectId": funcs.search_value( - variables.get("project_list"), "IsDefault", True, "ProjectId" - ), - } - try: - resp = client.vpc().create_vpc_intercom(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "DataSet.0.VPCId", variables.get("VPCId_2")), - ], - action="DescribeVPCIntercom", -) -def describe_vpc_intercom_19(client, variables): - d = {"VPCId": variables.get("VPCId_1"), "Region": variables.get("Region")} - try: - resp = client.vpc().describe_vpc_intercom(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=0, - retry_interval=0, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteVPCIntercom", -) -def delete_vpc_intercom_20(client, variables): - d = { - "VPCId": variables.get("VPCId_1"), - "Region": variables.get("Region"), - "DstVPCId": variables.get("VPCId_2"), - "DstRegion": variables.get("Region"), - "DstProjectId": funcs.search_value( - variables.get("project_list"), "IsDefault", True, "ProjectId" - ), - } - try: - resp = client.vpc().delete_vpc_intercom(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="DeleteVPC", -) -def delete_vpc_21(client, variables): - d = {"VPCId": variables.get("VPCId_1"), "Region": variables.get("Region")} - try: - resp = client.vpc().delete_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=2, - fast_fail=False, - action="DeleteVPC", -) -def delete_vpc_22(client, variables): - d = {"VPCId": variables.get("VPCId_2"), "Region": variables.get("Region")} - try: - resp = client.vpc().delete_vpc(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_services/test_set_867.py b/tests/test_services/test_set_867.py deleted file mode 100644 index 032be42..0000000 --- a/tests/test_services/test_set_867.py +++ /dev/null @@ -1,711 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -import pytest -import logging -from ucloud.core import exc -from ucloud.testing import env, funcs, op, utest - -logger = logging.getLogger(__name__) -scenario = utest.Scenario(867) - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_set_867(client, variables): - scenario.initial(variables) - scenario.variables["Password"] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["SnapshotSysName"] = "snapshot-ARK-SYS-01" - scenario.variables["SnapshotSysDesc"] = "snapshot-ARK-SYS-01-desc" - scenario.variables["SnapDiskType"] = "LocalBoot" - scenario.variables["SnapshotDataNameModify"] = "snapshot-ARK-DATA-01-modify" - scenario.variables[ - "SnapshotDataDescModify" - ] = "snapshot-ARK-DATA-01-desc-Modify" - scenario.variables["UhostName"] = "uhost-snapshot-ARK-auto-api-1" - scenario.variables["SnapshotDataName"] = "snapshot-ARK-DATA-01" - scenario.variables["SnapshotDataDesc"] = "snapshot-ARK-DATA-01-desc" - scenario.variables[ - "CreateFromTimeMachinePassword" - ] = "Z3VhbmxpeXVhbm1pbWExMjMhQCM=" - scenario.variables["ImageID"] = "#{u_get_image_resource($Region,$Zone)}" - scenario.run(client) - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=False, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeImageResponse"), - ], - action="DescribeImage", -) -def describe_image_00(client, variables): - d = { - "Zone": variables.get("Zone"), - "Region": variables.get("Region"), - "OsType": "Linux", - "ImageType": "Base", - } - try: - resp = client.uhost().describe_image(d) - except exc.RetCodeException as e: - resp = e.json() - variables["ImageID"] = utest.value_at_path(resp, "ImageSet.0.ImageId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [("str_eq", "RetCode", 0)], - action="CreateUHostInstance", -) -def create_uhost_instance_01(client, variables): - d = { - "Zone": variables.get("Zone"), - "TimemachineFeature": "no", - "Region": variables.get("Region"), - "Password": "VXFhNzg5VGVzdCFAIyQ7LA==", - "Name": variables.get("UhostName"), - "Memory": 1024, - "LoginMode": "Password", - "ImageId": variables.get("ImageID"), - "HotplugFeature": False, - "GPU": False, - "DiskSpace": 10, - "CPU": 1, - } - try: - resp = client.uhost().create_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - variables["hostId"] = utest.value_at_path(resp, "UHostIds.0") - return resp - - -@scenario.step( - max_retries=100, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.TimemachineFeature", "no"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_02(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUHostInstanceResponse"), - ], - action="StopUHostInstance", -) -def stop_uhost_instance_03(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=10, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_04(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "UpgradeToArkUHostInstanceResponse"), - ], - action="UpgradeToArkUHostInstance", -) -def upgrade_to_ark_uhost_instance_05(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().upgrade_to_ark_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=200, - retry_interval=30, - startup_delay=100, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ("str_eq", "UHostSet.0.TimemachineFeature", "yes"), - ("str_eq", "UHostSet.0.BootDiskState", "Normal"), - ("str_eq", "UHostSet.0.DiskSet.0.BackupType", "DATAARK"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_06(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StartUHostInstanceResponse"), - ], - action="StartUHostInstance", -) -def start_uhost_instance_07(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().start_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Running"), - ("str_eq", "UHostSet.0.TimemachineFeature", "yes"), - ("str_eq", "UHostSet.0.DiskSet.0.BackupType", "DATAARK"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_08(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=60, - retry_interval=60, - startup_delay=100, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeUhostTmMetaResponse"), - ("str_eq", "UtmStatus", "normal"), - ], - action="DescribeUhostTmMeta", -) -def describe_uhost_tm_meta_09(client, variables): - d = { - "Zone": variables.get("Zone"), - "UhostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeUhostTmMeta", d) - except exc.RetCodeException as e: - resp = e.json() - variables["VdiskIdSys"] = utest.value_at_path(resp, "DataSet.0.VdiskId") - variables["VdiskIdData"] = utest.value_at_path(resp, "DataSet.1.VdiskId") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVDiskTmListResponse"), - ], - action="DescribeVDiskTmList", -) -def describe_v_disk_tm_list_10(client, variables): - d = { - "Zone": variables.get("Zone"), - "VDiskId": variables.get("VdiskIdSys"), - "SnapshotType": "all", - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeVDiskTmList", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeVDiskTmListResponse"), - ], - action="DescribeVDiskTmList", -) -def describe_v_disk_tm_list_11(client, variables): - d = { - "Zone": variables.get("Zone"), - "VDiskId": variables.get("VdiskIdData"), - "SnapshotType": "all", - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeVDiskTmList", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUserVDiskSnapshotResponse"), - ], - action="CreateUserVDiskSnapshot", -) -def create_user_v_disk_snapshot_12(client, variables): - d = { - "Zone": variables.get("Zone"), - "VDiskId": variables.get("VdiskIdSys"), - "Region": variables.get("Region"), - "Name": variables.get("SnapshotSysName"), - "Comment": variables.get("SnapshotSysDesc"), - } - try: - resp = client.invoke("CreateUserVDiskSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - variables["VdiskSnapIDSys"] = utest.value_at_path(resp, "SnapshotId.0") - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "CreateUserVDiskSnapshotResponse"), - ], - action="CreateUserVDiskSnapshot", -) -def create_user_v_disk_snapshot_13(client, variables): - d = { - "Zone": variables.get("Zone"), - "VDiskId": variables.get("VdiskIdData"), - "Region": variables.get("Region"), - "Name": variables.get("SnapshotDataName"), - "Comment": variables.get("SnapshotDataDesc"), - } - try: - resp = client.invoke("CreateUserVDiskSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - variables["VdiskSnapIDData"] = utest.value_at_path(resp, "SnapshotId.0") - return resp - - -@scenario.step( - max_retries=30, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeSnapshotResponse"), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotId", - variables.get("VdiskSnapIDSys"), - ), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotName", - variables.get("SnapshotSysName"), - ), - ("str_eq", "UHostSnapshotSet.0.DiskType", "LocalBoot"), - ( - "str_eq", - "UHostSnapshotSet.0.ResourceName", - variables.get("UhostName"), - ), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotDescription", - variables.get("SnapshotSysDesc"), - ), - ("str_eq", "UHostSnapshotSet.0.State", "Normal"), - ], - action="DescribeSnapshot", -) -def describe_snapshot_14(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "SnapshotIds": [variables.get("VdiskSnapIDSys")], - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeSnapshotResponse"), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotId", - variables.get("VdiskSnapIDData"), - ), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotName", - variables.get("SnapshotDataName"), - ), - ("str_eq", "UHostSnapshotSet.0.DiskType", "LocalData"), - ( - "str_eq", - "UHostSnapshotSet.0.ResourceName", - variables.get("UhostName"), - ), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotDescription", - variables.get("SnapshotDataDesc"), - ), - ("str_eq", "UHostSnapshotSet.0.State", "Normal"), - ], - action="DescribeSnapshot", -) -def describe_snapshot_15(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "SnapshotIds": [variables.get("VdiskSnapIDData")], - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "ModifySnapshotResponse"), - ], - action="ModifySnapshot", -) -def modify_snapshot_16(client, variables): - d = { - "Zone": variables.get("Zone"), - "SnapshotName": variables.get("SnapshotDataNameModify"), - "SnapshotId": variables.get("VdiskSnapIDData"), - "SnapshotDescription": variables.get("SnapshotDataDescModify"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("ModifySnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeSnapshotResponse"), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotId", - variables.get("VdiskSnapIDData"), - ), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotName", - variables.get("SnapshotDataNameModify"), - ), - ("str_eq", "UHostSnapshotSet.0.DiskType", "LocalData"), - ( - "str_eq", - "UHostSnapshotSet.0.ResourceName", - variables.get("UhostName"), - ), - ( - "str_eq", - "UHostSnapshotSet.0.SnapshotDescription", - variables.get("SnapshotDataDescModify"), - ), - ("str_eq", "UHostSnapshotSet.0.State", "Normal"), - ], - action="DescribeSnapshot", -) -def describe_snapshot_17(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "SnapshotIds": [variables.get("VdiskSnapIDData")], - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DescribeSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteSnapshotResponse"), - ], - action="DeleteSnapshot", -) -def delete_snapshot_18(client, variables): - d = { - "Zone": variables.get("Zone"), - "SnapshotId": variables.get("VdiskSnapIDSys"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DeleteSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DeleteSnapshotResponse"), - ], - action="DeleteSnapshot", -) -def delete_snapshot_19(client, variables): - d = { - "Zone": variables.get("Zone"), - "SnapshotId": variables.get("VdiskSnapIDData"), - "Region": variables.get("Region"), - } - try: - resp = client.invoke("DeleteSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=30, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "DescribeSnapshotResponse"), - ( - "object_not_contains", - "UHostSnapshotSet", - variables.get("VdiskSnapIDSys"), - ), - ( - "object_not_contains", - "UHostSnapshotSet", - variables.get("VdiskSnapIDData"), - ), - ], - action="DescribeSnapshot", -) -def describe_snapshot_20(client, variables): - d = {"Zone": variables.get("Zone"), "Region": variables.get("Region")} - try: - resp = client.invoke("DescribeSnapshot", d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "StopUHostInstanceResponse"), - ], - action="StopUHostInstance", -) -def stop_uhost_instance_21(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().stop_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=30, - retry_interval=10, - startup_delay=10, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "UHostSet.0.State", "Stopped"), - ], - action="DescribeUHostInstance", -) -def describe_uhost_instance_22(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostIds": [variables.get("hostId")], - "Region": variables.get("Region"), - } - try: - resp = client.uhost().describe_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp - - -@scenario.step( - max_retries=3, - retry_interval=1, - startup_delay=0, - fast_fail=True, - validators=lambda variables: [ - ("str_eq", "RetCode", 0), - ("str_eq", "Action", "TerminateUHostInstanceResponse"), - ], - action="TerminateUHostInstance", -) -def terminate_uhost_instance_23(client, variables): - d = { - "Zone": variables.get("Zone"), - "UHostId": variables.get("hostId"), - "Region": variables.get("Region"), - } - try: - resp = client.uhost().terminate_uhost_instance(d) - except exc.RetCodeException as e: - resp = e.json() - return resp diff --git a/tests/test_testing/__init__.py b/tests/test_testing/__init__.py deleted file mode 100644 index 4c48b5a..0000000 --- a/tests/test_testing/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_testing/test_utest.py b/tests/test_testing/test_utest.py deleted file mode 100644 index 858cdaf..0000000 --- a/tests/test_testing/test_utest.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.testing import utest, env - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_acc_pre_check(self, client): - assert str(client) - assert client.config.to_dict() - assert client.credential.to_dict() - env.pre_check_env() - - -def test_value_at_path(): - d = { - "Action": "DescribeEIPResponse", - "EIPSet": [ - { - "Resource": { - "ResourceID": "uhost-war3png3", - "ResourceName": "eip-s1-bgp", - "ResourceType": "uhost", - "Zone": "cn-bj2-05", - } - } - ], - "RetCode": 0, - "TotalBandwidth": 6, - "TotalCount": 3, - } - assert ( - utest.value_at_path(d, "EIPSet.0.Resource.ResourceID") - == "uhost-war3png3" - ) diff --git a/tests/test_unit/__init__.py b/tests/test_unit/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/tests/test_unit/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_unit/test_core/__init__.py b/tests/test_unit/test_core/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/tests/test_unit/test_core/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_unit/test_core/test_auth.py b/tests/test_unit/test_core/test_auth.py deleted file mode 100644 index 4128ff3..0000000 --- a/tests/test_unit/test_core/test_auth.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core import auth - - -def test_verify_ac(): - d = { - "Action": "CreateUHostInstance", - "CPU": 2, - "ChargeType": "Month", - "DiskSpace": 10, - "ImageId": "f43736e1-65a5-4bea-ad2e-8a46e18883c2", - "LoginMode": "Password", - "Memory": 2048, - "Name": "Host01", - "Password": "VUNsb3VkLmNu", - "PublicKey": "ucloudsomeone@example.com1296235120854146120", - "Quantity": 1, - "Region": "cn-bj2", - "Zone": "cn-bj2-04", - } - cred = auth.Credential( - "ucloudsomeone@example.com1296235120854146120", - "46f09bb9fab4f12dfc160dae12273d5332b5debe", - ) - assert cred.verify_ac(d) == "4f9ef5df2abab2c6fccd1e9515cb7e2df8c6bb65" diff --git a/tests/test_unit/test_core/test_client.py b/tests/test_unit/test_core/test_client.py deleted file mode 100644 index 4549389..0000000 --- a/tests/test_unit/test_core/test_client.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import pytest -import logging -from ucloud.client import Client -from ucloud.core import exc -from ucloud.testing.mock import MockedTransport - -logger = logging.getLogger(__name__) - - -@pytest.fixture(scope="session", autouse=True) -def client(): - return Client( - { - "region": "cn-bj2", - "public_key": "foo", - "private_key": "foo", - "timeout": 10, - "max_retries": 3, - "ssl_verify": False, - } - ) - - -@pytest.fixture(scope="function", autouse=True) -def transport(): - return MockedTransport() - - -class TestClient(object): - def test_client_invoke(self, client, transport): - transport.mock_data(lambda _: {"RetCode": 0, "Action": "Foo"}) - client.transport = transport - assert client.invoke("Foo") == {"RetCode": 0, "Action": "Foo"} - - def test_client_invoke_code_error(self, client, transport): - transport.mock_data(lambda _: {"RetCode": 171, "Action": "Foo"}) - client.transport = transport - with pytest.raises(exc.RetCodeException): - try: - client.invoke("Foo") - except exc.RetCodeException as e: - assert str(e) - expected = {"RetCode": 171, "Action": "Foo", "Message": ""} - assert e.json() == expected - raise e - - def test_client_invoke_with_retryable_error(self, client, transport): - transport.mock_data(lambda _: {"RetCode": 10000, "Action": "Foo"}) - client.transport = transport - with pytest.raises(exc.RetCodeException): - client.invoke("Foo") - - def test_client_invoke_with_unexpected_error(self, client, transport): - def raise_error(_): - raise ValueError("temporary error") - - transport.mock_data(raise_error) - client.transport = transport - with pytest.raises(ValueError): - client.invoke("Foo") - - def test_client_try_import(self, client): - assert client.pathx() - assert client.stepflow() - assert client.uaccount() - assert client.udb() - assert client.udpn() - assert client.udisk() - assert client.uhost() - assert client.ulb() - assert client.umem() - assert client.unet() - assert client.uphost() - assert client.vpc() diff --git a/tests/test_unit/test_core/test_deco.py b/tests/test_unit/test_core/test_deco.py deleted file mode 100644 index 2ecc937..0000000 --- a/tests/test_unit/test_core/test_deco.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core.utils.deco import deprecated - - -@deprecated(instead_of="bar") -def foo(): - pass - - -def test_deprecated_deco(caplog): - foo() - assert "deprecated" in caplog.text diff --git a/tests/test_unit/test_core/test_encoder.py b/tests/test_unit/test_core/test_encoder.py deleted file mode 100644 index 083bf5a..0000000 --- a/tests/test_unit/test_core/test_encoder.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.core.typesystem import encoder - - -@pytest.mark.parametrize( - "input_vector,expected", - [ - ({"foo": "bar"}, {"foo": "bar"}), - ({"foo": 42}, {"foo": "42"}), - ({"foo": 42.42}, {"foo": "42.42"}), - ({"foo": 42.0}, {"foo": "42"}), - ({"foo": True}, {"foo": "true"}), - ({"foo": False}, {"foo": "false"}), - ({"IP": ["127.0.0.1"]}, {"IP.0": "127.0.0.1"}), - ({"IP": ["foo", "bar"]}, {"IP.0": "foo", "IP.1": "bar"}), - ({"IP": [{"foo": "bar"}]}, {"IP.0.foo": "bar"}), - ], -) -def test_params_encode(input_vector, expected): - result = encoder.encode(input_vector) - assert result == expected diff --git a/tests/test_unit/test_core/test_exc.py b/tests/test_unit/test_core/test_exc.py deleted file mode 100644 index 8777fd4..0000000 --- a/tests/test_unit/test_core/test_exc.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.core import exc - - -def test_ret_code_error(): - assert not exc.UCloudException().retryable - code_error = exc.RetCodeException("Foo", 1, "") - assert str(code_error) - assert not code_error.retryable - assert code_error.json() == {"Action": "Foo", "Message": "", "RetCode": 1} - validate_error = exc.ValidationException(ValueError("invalid type")) - assert not validate_error.retryable - assert str(validate_error) diff --git a/tests/test_unit/test_core/test_fields.py b/tests/test_unit/test_core/test_fields.py deleted file mode 100644 index 4742d07..0000000 --- a/tests/test_unit/test_core/test_fields.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import pytest -from ucloud.core import exc -from ucloud.core.typesystem import fields - -logger = logging.getLogger(__name__) - - -def test_field_str(): - s = fields.Str() - assert s.dumps(s.loads("foo")) == "foo" - with pytest.raises(exc.ValidationException): - fields.Str(strict=True).loads(42) - - -def test_field_int(): - i = fields.Int() - assert i.dumps(i.loads("42")) == 42 - with pytest.raises(exc.ValidationException): - fields.Int().dumps("foo") - with pytest.raises(exc.ValidationException): - fields.Int(strict=True).loads("42") - - -def test_field_float(): - f = fields.Float() - assert f.dumps(f.loads("42.0")) == 42.0 - with pytest.raises(exc.ValidationException): - fields.Float().dumps("foo") - with pytest.raises(exc.ValidationException): - fields.Float(strict=True).loads("42.0") - - -def test_field_bool(): - b = fields.Bool() - assert b.dumps(b.loads("true")) - assert not b.dumps(b.loads("false")) - with pytest.raises(exc.ValidationException): - fields.Bool().dumps("foo") - with pytest.raises(exc.ValidationException): - fields.Bool(strict=True).loads("true") - - -def test_field_list(): - l = fields.List(fields.Int()) - assert l.dumps(l.loads(["42"])) == [42] - with pytest.raises(exc.ValidationException): - fields.List(fields.Int(), strict=True).dumps(42) - with pytest.raises(exc.ValidationException): - fields.List(fields.Int()).dumps(["foo"]) - with pytest.raises(exc.ValidationException): - fields.List(fields.Int(strict=True)).loads(["42"]) - - -def test_field_base64(): - b64 = fields.Base64() - assert b64.loads("Zm9v") == "foo" - assert b64.dumps("foo") == "Zm9v" diff --git a/tests/test_unit/test_core/test_schema.py b/tests/test_unit/test_core/test_schema.py deleted file mode 100644 index b696d24..0000000 --- a/tests/test_unit/test_core/test_schema.py +++ /dev/null @@ -1,189 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import pytest -from ucloud.core import exc -from ucloud.core.typesystem import fields, schema - -logger = logging.getLogger(__name__) - - -def test_request_basic(): - class Schema(schema.RequestSchema): - fields = { - "Foo": fields.Int(required=True), - "Bar": fields.Int(required=False), - } - - assert Schema().dumps({"Foo": "42"}) == {"Foo": 42} - assert Schema().dumps({"Foo": "42"}) == {"Foo": 42} - with pytest.raises(exc.ValidationException): - Schema().dumps({}) - with pytest.raises(exc.ValidationException): - Schema().dumps({"Foo": "bar"}) - - -def test_request_array(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str())} - - d = Schema().dumps({"IP": ["127.0.0.1"]}) - assert d == {"IP": ["127.0.0.1"]} - d = Schema().dumps({}) - assert d == {"IP": []} - - -def test_request_array_with_default(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str(), default=["127.0.0.1"])} - - d = Schema().dumps({"IP": ["192.168.0.1"]}) - assert d == {"IP": ["192.168.0.1"]} - d = Schema().dumps({}) - assert d == {"IP": ["127.0.0.1"]} - - -def test_request_object_model(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedObjectSchema(schema.RequestSchema): - fields = {"Interface": Schema()} - - d = NestedObjectSchema().dumps({"Interface": {"IP": ["127.0.0.1"]}}) - assert d == {"Interface": {"IP": ["127.0.0.1"]}} - with pytest.raises(exc.ValidationException): - NestedObjectSchema().dumps({"Interface": 1}) - - -def test_request_array_model_with_default(): - class Schema(schema.RequestSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedArraySchema(schema.RequestSchema): - fields = { - "Interface": fields.List( - Schema(default=lambda: "127.0.0.1"), - default=lambda: [{"IP": ["192.168.1.1"]}], - ) - } - - d = NestedArraySchema().dumps({}) - assert d == {"Interface": [{"IP": ["192.168.1.1"]}]} - d = { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } - d = NestedArraySchema().dumps(d) - assert d == { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } - - -def test_response_basic(): - class Schema(schema.ResponseSchema): - fields = { - "Foo": fields.Int(required=True), - "Bar": fields.Int(required=False), - "Default": fields.Int(default=42), - "Call": fields.List(fields.Int(), default=list), - } - - assert Schema().dumps({"Foo": "42"}) == { - "Foo": 42, - "Default": 42, - "Call": [], - } - assert Schema().loads({"Foo": "42"}) == { - "Foo": 42, - "Default": 42, - "Call": [], - } - with pytest.raises(exc.ValidationException): - Schema().dumps({}) - with pytest.raises(exc.ValidationException): - Schema().dumps({"Foo": "bar"}) - with pytest.raises(exc.ValidationException): - Schema().dumps({}) - with pytest.raises(exc.ValidationException): - Schema().dumps({"Foo": "bar"}) - - -def test_response_array(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - d = Schema().loads({}) - assert d == {"IP": []} - d = Schema().loads({"IP": ["127.0.0.1"]}) - assert d == {"IP": ["127.0.0.1"]} - with pytest.raises(exc.ValidationException): - Schema().loads({"IP": 1}) - - -def test_response_array_with_default(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str(), default=["127.0.0.1"])} - - d = Schema().dumps({"IP": ["192.168.0.1"]}) - assert d == {"IP": ["192.168.0.1"]} - d = Schema().dumps({}) - assert d == {"IP": ["127.0.0.1"]} - - -def test_response_object_model(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedObjectSchema(schema.ResponseSchema): - fields = {"EIP": Schema()} - - d = NestedObjectSchema().loads({"EIP": {"IP": ["127.0.0.1"]}}) - assert d == {"EIP": {"IP": ["127.0.0.1"]}} - d = NestedObjectSchema().loads({}) - assert d == {"EIP": {"IP": []}} - - -def test_response_object_model_case_insensitive(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedObjectSchema(schema.ResponseSchema): - fields = {"EIP": Schema()} - - d = NestedObjectSchema().loads({"eip": {"Ip": ["127.0.0.1"]}}) - assert d == {"EIP": {"IP": ["127.0.0.1"]}} - - -def test_response_array_model_with_default(): - class Schema(schema.ResponseSchema): - fields = {"IP": fields.List(fields.Str())} - - class NestedArraySchema(schema.ResponseSchema): - fields = { - "Interface": fields.List( - Schema(default=lambda: {"IP": ["127.0.0.1"]}), - default=lambda: [{"IP": ["192.168.1.1"]}], - ) - } - - d = NestedArraySchema().dumps({}) - assert d == {"Interface": [{"IP": ["192.168.1.1"]}]} - d = { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } - d = NestedArraySchema().dumps(d) - assert d == { - "Interface": [ - {"IP": ["127.0.0.1", "192.168.0.1"]}, - {"IP": ["172.16.0.1"]}, - ] - } diff --git a/tests/test_unit/test_core/test_transport.py b/tests/test_unit/test_core/test_transport.py deleted file mode 100644 index ec519fb..0000000 --- a/tests/test_unit/test_core/test_transport.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -import logging -from ucloud.core.transport import RequestsTransport, Request, Response, utils - -logger = logging.getLogger(__name__) - - -@pytest.fixture(scope="function", autouse=True) -def transport(): - return RequestsTransport() - - -class TestTransport(object): - def test_transport_send(self, transport): - req = Request( - url="http://httpbin.org/anything", - method="post", - json={"foo": "bar"}, - ) - resp = transport.send(req) - assert resp.text - assert resp.json()["json"] == {"foo": "bar"} - - def test_transport_handler(self, transport): - global_env = {} - - def request_handler(r): - global_env["req"] = r - return r - - def response_handler(r): - global_env["resp"] = r - return r - - transport.middleware.request(handler=request_handler) - transport.middleware.response(handler=response_handler) - req = Request( - url="http://httpbin.org/anything", - method="post", - json={"foo": "bar"}, - ) - resp = transport.send(req) - assert resp.text - assert resp.json()["json"] == {"foo": "bar"} - assert "req" in global_env - assert "resp" in global_env - - -class TestResponse(object): - def test_guess_json_utf(self): - import json - - encodings = [ - "utf-32", - "utf-8-sig", - "utf-16", - "utf-8", - "utf-16-be", - "utf-16-le", - "utf-32-be", - "utf-32-le", - ] - for e in encodings: - s = json.dumps("表意字符").encode(e) - assert utils.guess_json_utf(s) == e - - def test_response_empty_content(self): - r = Response("http://foo.bar", "post") - assert not r.text - assert r.json() is None diff --git a/tests/test_unit/test_helpers/__init__.py b/tests/test_unit/test_helpers/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/tests/test_unit/test_helpers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_unit/test_helpers/test_utils.py b/tests/test_unit/test_helpers/test_utils.py deleted file mode 100644 index 496beb8..0000000 --- a/tests/test_unit/test_helpers/test_utils.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.helpers import utils - - -def test_b64encode(): - encoded = utils.b64encode("foobar42") - assert encoded == "Zm9vYmFyNDI=" - - -def test_b64decode(): - decoded = utils.b64decode("Zm9vYmFyNDI=") - assert decoded == "foobar42" diff --git a/tests/test_unit/test_helpers/test_wait.py b/tests/test_unit/test_helpers/test_wait.py deleted file mode 100644 index 1d16a86..0000000 --- a/tests/test_unit/test_helpers/test_wait.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.helpers import wait - - -def test_wait(): - with pytest.raises(wait.WaitTimeoutException): - wait.wait_for_state( - pending=["pending"], - target=["running"], - refresh=lambda: "pending", - timeout=0.5, - ) - wait.wait_for_state( - pending=["pending"], - target=["running"], - refresh=lambda: "running", - timeout=0.5, - ) diff --git a/tests/test_unit/test_testing/__init__.py b/tests/test_unit/test_testing/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/tests/test_unit/test_testing/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/tests/test_unit/test_testing/test_utest.py b/tests/test_unit/test_testing/test_utest.py deleted file mode 100644 index 7b6ebb1..0000000 --- a/tests/test_unit/test_testing/test_utest.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -import pytest -from ucloud.testing import utest, env - - -@pytest.mark.skipif(env.is_ut(), reason=env.get_skip_reason()) -def test_acc_pre_check(self, client): - assert str(client) - assert client.config.to_dict() - assert client.credential.to_dict() - env.pre_check_env() - - -def test_value_at_path(): - d = { - "Action": "DescribeEIPResponse", - "EIPSet": [ - { - "Resource": { - "ResourceID": "uhost-war3png3", - "ResourceName": "eip-s1-bgp", - "ResourceType": "uhost", - "Zone": "cn-bj2-05", - } - } - ], - "RetCode": 0, - "TotalBandwidth": 6, - "TotalCount": 3, - } - assert ( - utest.value_at_path(d, "EIPSet.0.Resource.ResourceID") - == "uhost-war3png3" - ) diff --git a/ucloud/__init__.py b/ucloud/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/_compat.py b/ucloud/_compat.py deleted file mode 100644 index 330c642..0000000 --- a/ucloud/_compat.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core import client - - -class CompactClient(client.Client): - def __init__(self, config, transport=None, middleware=None): - self._config = config - super(CompactClient, self).__init__(config, transport, middleware) - - def pathx(self): - from ucloud.services.pathx.client import PathXClient - - return PathXClient( - self._config, self.transport, self.middleware, self.logger - ) - - def vpc(self): - from ucloud.services.vpc.client import VPCClient - - return VPCClient( - self._config, self.transport, self.middleware, self.logger - ) diff --git a/ucloud/client.py b/ucloud/client.py deleted file mode 100644 index a9e9187..0000000 --- a/ucloud/client.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud._compat import CompactClient - - -class Client(CompactClient): - def __init__(self, config, transport=None, middleware=None): - self._config = config - super(Client, self).__init__(config, transport, middleware) - - def pathx(self): - from ucloud.services.pathx.client import PathXClient - - return PathXClient( - self._config, self.transport, self.middleware, self.logger - ) - - def stepflow(self): - from ucloud.services.stepflow.client import StepFlowClient - - return StepFlowClient( - self._config, self.transport, self.middleware, self.logger - ) - - def uaccount(self): - from ucloud.services.uaccount.client import UAccountClient - - return UAccountClient( - self._config, self.transport, self.middleware, self.logger - ) - - def ucdn(self): - from ucloud.services.ucdn.client import UCDNClient - - return UCDNClient( - self._config, self.transport, self.middleware, self.logger - ) - - def udb(self): - from ucloud.services.udb.client import UDBClient - - return UDBClient( - self._config, self.transport, self.middleware, self.logger - ) - - def udpn(self): - from ucloud.services.udpn.client import UDPNClient - - return UDPNClient( - self._config, self.transport, self.middleware, self.logger - ) - - def udisk(self): - from ucloud.services.udisk.client import UDiskClient - - return UDiskClient( - self._config, self.transport, self.middleware, self.logger - ) - - def uhost(self): - from ucloud.services.uhost.client import UHostClient - - return UHostClient( - self._config, self.transport, self.middleware, self.logger - ) - - def ulb(self): - from ucloud.services.ulb.client import ULBClient - - return ULBClient( - self._config, self.transport, self.middleware, self.logger - ) - - def umem(self): - from ucloud.services.umem.client import UMemClient - - return UMemClient( - self._config, self.transport, self.middleware, self.logger - ) - - def unet(self): - from ucloud.services.unet.client import UNetClient - - return UNetClient( - self._config, self.transport, self.middleware, self.logger - ) - - def uphost(self): - from ucloud.services.uphost.client import UPHostClient - - return UPHostClient( - self._config, self.transport, self.middleware, self.logger - ) - - def usms(self): - from ucloud.services.usms.client import USMSClient - - return USMSClient( - self._config, self.transport, self.middleware, self.logger - ) - - def ipsecvpn(self): - from ucloud.services.ipsecvpn.client import IPSecVPNClient - - return IPSecVPNClient( - self._config, self.transport, self.middleware, self.logger - ) - - def ucloudstack(self): - from ucloud.services.ucloudstack.client import UCloudStackClient - - return UCloudStackClient( - self._config, self.transport, self.middleware, self.logger - ) - - def ufs(self): - from ucloud.services.ufs.client import UFSClient - - return UFSClient( - self._config, self.transport, self.middleware, self.logger - ) - - def uhub(self): - from ucloud.services.uhub.client import UHubClient - - return UHubClient( - self._config, self.transport, self.middleware, self.logger - ) - - def vpc(self): - from ucloud.services.vpc.client import VPCClient - - return VPCClient( - self._config, self.transport, self.middleware, self.logger - ) diff --git a/ucloud/core/__init__.py b/ucloud/core/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/core/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/core/auth/__init__.py b/ucloud/core/auth/__init__.py deleted file mode 100644 index 09e1eff..0000000 --- a/ucloud/core/auth/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core.auth._cfg import Credential - -__all__ = ["Credential"] diff --git a/ucloud/core/auth/_cfg.py b/ucloud/core/auth/_cfg.py deleted file mode 100644 index 7b2264f..0000000 --- a/ucloud/core/auth/_cfg.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- - -import hashlib -from collections import OrderedDict -from ucloud.core.typesystem import schema, fields, encoder - - -class CredentialSchema(schema.Schema): - fields = { - "public_key": fields.Str(required=True), - "private_key": fields.Str(required=True), - } - - -def verify_ac(private_key, params): - """ calculate signature by private_key/public_key - - the keys can be found on `APIKey documentation `__ - - >>> verify_ac("my_private_key", {"foo": "bar"}) - '634edc1bb957c0d65e5ab5494cf3b7784fbc87af' - - >>> verify_ac("my_private_key", {"foo": "bar"}) - '634edc1bb957c0d65e5ab5494cf3b7784fbc87af' - - :param private_key: private key - :param params: - :return: - """ - params = OrderedDict(sorted(params.items(), key=lambda item: item[0])) - simplified = "" - for key, value in params.items(): - simplified += str(key) + encoder.encode_value(value) - simplified += private_key - hash_new = hashlib.sha1() - hash_new.update(simplified.encode("utf-8")) - hash_value = hash_new.hexdigest() - return hash_value - - -class Credential(object): - """ credential is the object to store credential information - - the keys can be found on `APIKey documentation `__ - - it can calculate signature for OpenAPI: - - >>> cred = Credential('my_public_key', 'my_private_key') - >>> cred.verify_ac({"foo": "bar"}) - 'd4411ab30953fb0bbcb1e7313081f05e4e91a394' - - :param public_key: - :param private_key: - """ - - PUBLIC_KEY_NAME = "PublicKey" - - def __init__(self, public_key, private_key, **kwargs): - self.public_key = public_key - self.private_key = private_key - - def verify_ac(self, args): - args[Credential.PUBLIC_KEY_NAME] = self.public_key - return verify_ac(self.private_key, args) - - @classmethod - def from_dict(cls, d): - parsed = CredentialSchema().dumps(d) - return cls(**parsed) - - def to_dict(self): - return {"public_key": self.public_key, "private_key": self.private_key} diff --git a/ucloud/core/client/__init__.py b/ucloud/core/client/__init__.py deleted file mode 100644 index 7db5e85..0000000 --- a/ucloud/core/client/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Client -""" -from ucloud.core.client._cfg import Config -from ucloud.core.client._client import Client - -__all__ = ["Config", "Client"] diff --git a/ucloud/core/client/_cfg.py b/ucloud/core/client/_cfg.py deleted file mode 100644 index 2f8219d..0000000 --- a/ucloud/core/client/_cfg.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -from ucloud.core.typesystem import schema, fields - - -class ConfigSchema(schema.Schema): - fields = { - "region": fields.Str(), - "project_id": fields.Str(), - "base_url": fields.Str(default="https://api.ucloud.cn"), - "user_agent": fields.Str(), - "timeout": fields.Int(default=30), - "max_retries": fields.Int(default=3), - "log_level": fields.Int(default=logging.INFO), - "validate_request": fields.Bool(default=True), - "ssl_verify": fields.Bool(default=True), - "ssl_cacert": fields.Str(), - "ssl_cert": fields.Str(), - "ssl_key": fields.Str(), - } - - -class Config(object): - """ - Config is the config of ucloud sdk, use for setting up - - :type region: str - :param region: Region is the region of backend service, - See also `Region list Documentation `_ - :type project_id: str - :param project_id: ProjectId is the unique identify of project, used for organize resources, - Most of resources should belong to a project. Sub-Account must have an project id. - See also `Project list Documentation `_ - :type base_url: str - :param base_url: BaseUrl is the url of backend api - :param user_agent: UserAgent is an attribute for sdk client, used for distinguish who is using sdk. - See also `User Agent `_ - It will be appended to the end of sdk user-agent. - eg. "MyAPP/0.10.1" -> "Python/3.7.0 Python-SDK/0.1.0 MyAPP/0.10.1" - :type timeout: int - :param timeout: Timeout is timeout for every request. - :type max_retries: int - :param max_retries: MaxRetries is the number of max retry times. - Set MaxRetries more than 0 to enable auto-retry for network and service availability problem - if auto-retry is enabled, it will enable default retry policy using exponential backoff. - :type log_level: int - :param log_level: LogLevel is equal to builtin logging level, - if logLevel not be set, use INFO level as default. - """ - - def __init__( - self, - region=None, - project_id=None, - base_url="https://api.ucloud.cn", - user_agent=None, - timeout=30, - max_retries=3, - log_level=logging.INFO, - ssl_verify=True, - ssl_cacert=None, - ssl_cert=None, - ssl_key=None, - **kwargs - ): - self.region = region - self.project_id = project_id - self.base_url = base_url - self.user_agent = user_agent - self.timeout = timeout - self.max_retries = max_retries - self.log_level = log_level - self.ssl_verify = ssl_verify - self.ssl_cacert = ssl_cacert - self.ssl_cert = ssl_cert - self.ssl_key = ssl_key - - @classmethod - def from_dict(cls, d): - parsed = ConfigSchema().dumps(d) - return cls(**parsed) - - def to_dict(self): - return { - "region": self.region, - "project_id": self.project_id, - "base_url": self.base_url, - "user_agent": self.user_agent, - "timeout": self.timeout, - "max_retries": self.max_retries, - "log_level": self.log_level, - "ssl_verify": self.ssl_verify, - "ssl_cacert": self.ssl_cacert, - "ssl_cert": self.ssl_cert, - "ssl_key": self.ssl_key, - } diff --git a/ucloud/core/client/_client.py b/ucloud/core/client/_client.py deleted file mode 100644 index bed8035..0000000 --- a/ucloud/core/client/_client.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import sys -from ucloud import version -from ucloud.core.client._cfg import Config -from ucloud.core.transport import ( - Transport, - RequestsTransport, - Request, - SSLOption, -) -from ucloud.core.typesystem import encoder -from ucloud.core.utils import log -from ucloud.core.utils.middleware import Middleware -from ucloud.core import auth, exc - -default_transport = RequestsTransport() - - -class Client(object): - def __init__(self, config, transport=None, middleware=None, logger=None): - cfg, cred = self._parse_dict_config(config) - self.config = cfg - self.credential = cred - self.transport = transport or default_transport - self.logger = logger or log.default_logger - if middleware is None: - middleware = Middleware() - middleware.response(self.logged_response_handler) - middleware.request(self.logged_request_handler) - self._middleware = middleware - - def invoke(self, action, args=None, **options): - """ invoke will invoke the action with arguments data and options - - :param str action: the api action, like `CreateUHostInstance` - :param dict args: arguments of api(action), see doc: `UCloud API Documentation `__ - :return: - """ - retries = 0 - max_retries = options.get("max_retries") or self.config.max_retries - while retries <= max_retries: - try: - return self._send(action, args or {}, **options) - except exc.UCloudException as e: - for handler in self.middleware.exception_handlers: - handler(e) - if e.retryable and retries != max_retries: - logging.info( - "Retrying {action}: {args}".format( - action=action, args=args - ) - ) - retries += 1 - continue - raise e - except Exception as e: - for handler in self.middleware.exception_handlers: - handler(e) - raise e - - @property - def middleware(self): - return self._middleware - - def logged_request_handler(self, req): - self.logger.info("[request] {} {}".format(req.get("Action", ""), req)) - return req - - def logged_response_handler(self, resp): - self.logger.info( - "[response] {} {}".format(resp.get("Action", ""), resp) - ) - return resp - - @staticmethod - def _parse_dict_config(config): - return Config.from_dict(config), auth.Credential.from_dict(config) - - def _send(self, action, args, **options): - args["Action"] = action - for handler in self.middleware.request_handlers: - args = handler(args) - req = self._build_http_request(args) - max_retries = options.get("max_retries") or self.config.max_retries - timeout = options.get("timeout") or self.config.timeout - resp = self.transport.send( - req, - ssl_option=SSLOption( - self.config.ssl_verify, - self.config.ssl_cacert, - self.config.ssl_cert, - self.config.ssl_key, - ), - timeout=timeout, - max_retries=max_retries, - ).json() - for handler in self.middleware.response_handlers: - resp = handler(resp) - if int(resp.get("RetCode", -1)) != 0: - raise exc.RetCodeException( - action=req.data.get("Action"), - code=int(resp.get("RetCode")), - message=resp.get("Message"), - ) - return resp - - def _build_http_request(self, args): - config = { - "Region": self.config.region, - "ProjectId": self.config.project_id, - } - payload = {k: v for k, v in config.items() if v is not None} - payload.update({k: v for k, v in args.items() if v is not None}) - payload = encoder.encode(payload) - payload["Signature"] = self.credential.verify_ac(payload) - return Request( - url=self.config.base_url, - method="post", - data=payload, - headers={ - "User-Agent": self._build_user_agent(), - "Content-Type": "application/x-www-form-urlencoded", - }, - ) - - def _build_user_agent(self): - python_version = "{v[0]}.{v[1]}.{v[2]}".format(v=sys.version_info) - user_agent = "Python/{python_version} Python-SDK/{sdk_version}".format( - python_version=python_version, sdk_version=version.version - ) + (self.config.user_agent or "") - return user_agent - - def __repr__(self): - return '<{}(region="{}")>'.format( - self.__class__.__name__, self.config.region - ) diff --git a/ucloud/core/exc/__init__.py b/ucloud/core/exc/__init__.py deleted file mode 100644 index 65bf867..0000000 --- a/ucloud/core/exc/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core.exc._exc import ( - UCloudException, - ValidationException, - RetCodeException, - RetryTimeoutException, -) - -__all__ = [ - "UCloudException", - "ValidationException", - "RetCodeException", - "RetryTimeoutException", -] diff --git a/ucloud/core/exc/_exc.py b/ucloud/core/exc/_exc.py deleted file mode 100644 index 7c8af49..0000000 --- a/ucloud/core/exc/_exc.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- - -import collections -from ucloud.core.utils import compat - - -class UCloudException(Exception): - @property - def retryable(self): - return False - - -MAX_COMMON_RET_CODE = 2000 - - -class RetCodeException(UCloudException): - def __init__(self, action, code, message): - self.action = action - self.code = code - self.message = message - - @property - def retryable(self): - return self.code > MAX_COMMON_RET_CODE - - def __str__(self): - return "{self.action} - {self.code}: {self.message}".format(self=self) - - def json(self): - return { - "RetCode": self.code, - "Message": self.message or "", - "Action": self.action or "", - } - - -class RetryTimeoutException(UCloudException): - pass - - -class ValidationException(UCloudException): - def __init__(self, e=None): - if isinstance(e, compat.string_types): - self.errors = [e] - elif isinstance(e, collections.Iterable): - self.errors = e or [] - else: - self.errors = [e] - - @property - def retryable(self): - return False - - def __str__(self): - return str([str(e) for e in self.errors]) diff --git a/ucloud/core/transport/__init__.py b/ucloud/core/transport/__init__.py deleted file mode 100644 index 3784e50..0000000 --- a/ucloud/core/transport/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core.transport.http import Request, Response, Transport, SSLOption -from ucloud.core.transport._requests import RequestsTransport - -__all__ = ["Request", "Response", "Transport", "RequestsTransport", "SSLOption"] diff --git a/ucloud/core/transport/_requests.py b/ucloud/core/transport/_requests.py deleted file mode 100644 index 483f258..0000000 --- a/ucloud/core/transport/_requests.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- - -import time -import requests -from urllib3.util.retry import Retry -from requests.adapters import HTTPAdapter -from ucloud.core.transport import http -from ucloud.core.transport.http import Request, Response, SSLOption -from ucloud.core.utils.middleware import Middleware - - -class RequestsTransport(http.Transport): - """ transport is the implementation of http client, use for send a request and return a http response - - :type max_retries: int - :param max_retries: max retries is the max number of transport request when occur http error - :type backoff_factor: float - :param backoff_factor: backoff factor will calculate the backoff delay during retrying, - the backoff delay = {backoff factor} * (2 ^ ({number of total retries} - 1)) - :type status_forcelist: tuple - :param status_forcelist: the status code list that could be retried - """ - - def __init__( - self, - max_retries=3, - backoff_factor=0.3, - status_forcelist=(500, 502, 504), - ): - self.max_retries = max_retries - self.backoff_factor = backoff_factor - self.status_forcelist = status_forcelist - self._adapter = self._load_adapter(max_retries) - self._middleware = Middleware() - - def send(self, req, **options): - """ send request and return the response - - :param req: the full http request descriptor - :return: the response of http request - """ - for handler in self.middleware.request_handlers: - req = handler(req) - try: - resp = self._send(req, **options) - except Exception as e: - for handler in self.middleware.exception_handlers: - handler(e) - raise e - for handler in self.middleware.response_handlers: - resp = handler(resp) - return resp - - @property - def middleware(self): - """ the middleware object, see :mod: - - :return: the transport middleware - """ - return self._middleware - - def _send(self, req, **options): - with requests.Session() as session: - adapter = self._load_adapter(options.get("max_retries")) - session.mount("http://", adapter=adapter) - session.mount("https://", adapter=adapter) - ssl_option = options.get("ssl_option") - kwargs = self._build_ssl_option(ssl_option) if ssl_option else {} - req.request_time = time.time() - session_resp = session.request( - method=req.method.upper(), - url=req.url, - json=req.json, - data=req.data, - params=req.params, - headers=req.headers, - **kwargs - ) - resp = self.convert_response(session_resp) - resp.request = req - resp.response_time = time.time() - return resp - - @staticmethod - def _build_ssl_option(ssl_option): - kwargs = {"verify": ssl_option.ssl_verify and ssl_option.ssl_cacert} - if not ssl_option.ssl_cert: - return kwargs - if ssl_option.ssl_key: - kwargs["cert"] = ssl_option.ssl_cert, ssl_option.ssl_key - else: - kwargs["cert"] = ssl_option.ssl_cert - return kwargs - - def _load_adapter(self, max_retries=None): - if max_retries is None and self._adapter is not None: - return self._adapter - max_retries = max_retries or 0 - adapter = HTTPAdapter() - adapter.max_retries = Retry( - total=max_retries, - read=max_retries, - connect=max_retries, - backoff_factor=self.backoff_factor, - status_forcelist=self.status_forcelist, - ) - return adapter - - @staticmethod - def convert_response(r): - return Response( - url=r.url, - method=r.request.method, - status_code=r.status_code, - reason=r.reason, - headers=r.headers, - content=r.content, - encoding=r.encoding or r.apparent_encoding, - ) diff --git a/ucloud/core/transport/http.py b/ucloud/core/transport/http.py deleted file mode 100644 index 730c977..0000000 --- a/ucloud/core/transport/http.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import json as json_mod -from ucloud.core.transport import utils -from ucloud.core.utils.compat import str - -logger = logging.getLogger(__name__) - - -class Request(object): - def __init__( - self, - url, - method="GET", - params=None, - data=None, - json=None, - headers=None, - **kwargs - ): - self.url = url - self.method = method - self.params = params - self.data = data - self.json = json - self.headers = headers - self.request_time = 0 - - def payload(self): - payload = (self.params or {}).copy() - payload.update(self.data or {}) - payload.update(self.json or {}) - return payload - - -class Response(object): - def __init__( - self, - url, - method, - request=None, - status_code=None, - reason=None, - headers=None, - content=None, - encoding=None, - **kwargs - ): - self.url = url - self.method = method - self.request = request - self.status_code = status_code - self.reason = reason - self.headers = headers - self.content = content - self.encoding = encoding - self.response_time = 0 - - def json(self, **kwargs): - """ json will return the bytes of content - """ - if not self.content: - return None - encoding = utils.guess_json_utf(self.content) - if encoding is not None: - try: - return json_mod.loads(self.content.decode(encoding), **kwargs) - except UnicodeDecodeError: - pass - return json_mod.loads(self.text, **kwargs) - - @property - def text(self): - """ text will return the unicode string of content, - see `requests.Response.text` - """ - if not self.content: - return str("") - try: - content = str(self.content, self.encoding, errors="replace") - except (LookupError, TypeError): - content = str(self.content, errors="replace") - return content - - -class SSLOption(object): - def __init__( - self, ssl_verify=True, ssl_cacert=None, ssl_cert=None, ssl_key=None - ): - self.ssl_verify = ssl_verify - self.ssl_cacert = ssl_cacert - self.ssl_cert = ssl_cert - self.ssl_key = ssl_key - - -class Transport(object): - """ the abstract class of transport implementation """ - - def send(self, req, **options): - raise NotImplementedError diff --git a/ucloud/core/transport/utils.py b/ucloud/core/transport/utils.py deleted file mode 100644 index a538bc9..0000000 --- a/ucloud/core/transport/utils.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- - -import codecs - -_null = "\x00".encode("ascii") -_null2 = _null * 2 -_null3 = _null * 3 - - -def guess_json_utf(data): - """ guess_json_utf will detect the encoding of bytes, - see `requests.utils.guess_json_utf` - - :rtype: str - """ - sample = data[:4] - if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): - return "utf-32" - if sample[:3] == codecs.BOM_UTF8: - return "utf-8-sig" - if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): - return "utf-16" - nullcount = sample.count(_null) - if nullcount == 0: - return "utf-8" - if nullcount == 2: - if sample[::2] == _null2: - return "utf-16-be" - if sample[1::2] == _null2: - return "utf-16-le" - if nullcount == 3: - if sample[:3] == _null3: - return "utf-32-be" - if sample[1:] == _null3: - return "utf-32-le" - return None diff --git a/ucloud/core/typesystem/__init__.py b/ucloud/core/typesystem/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/core/typesystem/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/core/typesystem/abstract.py b/ucloud/core/typesystem/abstract.py deleted file mode 100644 index 7d36ada..0000000 --- a/ucloud/core/typesystem/abstract.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core import exc - - -class Field(object): - def __init__( - self, - required=False, - default=None, - dump_to=None, - load_from=None, - strict=None, - **kwargs - ): - self.required = required - self.default = default - self.dump_to = dump_to - self.load_from = load_from - self.options = kwargs - self.strict = bool(strict) - - def dumps(self, value, **kwargs): - raise NotImplementedError - - def loads(self, value, **kwargs): - raise NotImplementedError - - @staticmethod - def fail(name, expected, got): - msg = "invalid field {}, expect {}, got {}".format(name, expected, got) - raise exc.ValidationException(msg) - - -class Schema(object): - fields = {} - - def __init__( - self, - required=False, - default=dict, - dump_to=None, - load_from=None, - strict=False, - case_sensitive=False, - **kwargs - ): - self.required = required - self.default = default - self.dump_to = dump_to - self.load_from = load_from - self.options = kwargs - self.strict = strict - self.case_sensitive = case_sensitive - - def dumps(self, d): - raise NotImplementedError - - def loads(self, d): - raise NotImplementedError diff --git a/ucloud/core/typesystem/encoder.py b/ucloud/core/typesystem/encoder.py deleted file mode 100644 index b873397..0000000 --- a/ucloud/core/typesystem/encoder.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.core.utils.compat import str - - -def encode(d): - result = {} - for k, v in d.items(): - if isinstance(v, dict): - for ek, ev in encode(v).items(): - result["{}.{}".format(k, ek)] = encode_value(ev) - elif isinstance(v, list): - for i, item in enumerate(v): - if isinstance(item, dict): - for ek, ev in encode(item).items(): - result["{}.{}.{}".format(k, i, ek)] = encode_value(ev) - else: - result["{}.{}".format(k, i)] = encode_value(item) - else: - result[k] = encode_value(v) - return result - - -def encode_value(v): - if isinstance(v, bool): - return "true" if v else "false" - if isinstance(v, float): - return str(int(v)) if v % 1 == 0 else str(v) - return str(v) diff --git a/ucloud/core/typesystem/fields.py b/ucloud/core/typesystem/fields.py deleted file mode 100644 index 9398cf2..0000000 --- a/ucloud/core/typesystem/fields.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- - -import base64 -import collections -from ucloud.core.typesystem import abstract -from ucloud.core.exc import ValidationException -from ucloud.core.utils.compat import str - - -class List(abstract.Field): - """ array param is the custom field to parse custom param such as: - - - IP.N - - UDisk.N.Size - - NetInterface.N.EIP.Bandwidth - """ - - def __init__(self, item, default=list, **kwargs): - super(List, self).__init__(default=default, **kwargs) - self.item = item - - def dumps(self, value, name=None, **kwargs): - if not isinstance(value, collections.Iterable): - raise ValidationException( - "invalid field {}, expect list, got {}".format( - name, type(value) - ) - ) - errors = [] - values = [] - for each in value: - try: - v = self.item.dumps(each) - except ValidationException as e: - errors.extend(e.errors) - else: - values.append(v) - if len(errors) > 0: - raise ValidationException(errors) - return values - - def loads(self, value, name=None, **kwargs): - if not isinstance(value, collections.Iterable): - raise ValidationException( - "invalid field {}, expect list, got {}".format( - name, type(value) - ) - ) - errors = [] - values = [] - for each in value: - try: - v = self.item.loads(each) - except ValidationException as e: - errors.extend(e.errors) - else: - values.append(v) - if len(errors) > 0: - raise ValidationException(errors) - return values - - -class Str(abstract.Field): - def dumps(self, value, name=None, **kwargs): - return self._convert(value, name) - - def loads(self, value, name=None, **kwargs): - return self._convert(value, name) - - def _convert(self, value, name=None): - if self.strict and not isinstance(value, str): - self.fail(name, "str", type(value)) - return str(value) - - -class Base64(Str): - def dumps(self, value, name=None, **kwargs): - s = super(Base64, self).dumps(value, name) - return base64.b64encode(s.encode()).decode() - - def loads(self, value, name=None, **kwargs): - s = super(Base64, self).loads(value, name) - return base64.b64decode(s.encode()).decode() - - -class Int(abstract.Field): - def dumps(self, value, name=None, **kwargs): - return self._convert(value, name) - - def loads(self, value, name=None, **kwargs): - return self._convert(value, name) - - def _convert(self, value, name=None): - if self.strict and not isinstance(value, int): - self.fail(name, "int", type(value)) - try: - return int(value) - except ValueError: - self.fail(name, "int", type(value)) - - -class Float(abstract.Field): - def dumps(self, value, name=None, **kwargs): - return self._convert(value, name) - - def loads(self, value, name=None, **kwargs): - return self._convert(value, name) - - def _convert(self, value, name=None): - if self.strict and not isinstance(value, float): - self.fail(name, "float", type(value)) - try: - return float(value) - except ValueError: - self.fail(name, "float", type(value)) - - -class Bool(abstract.Field): - def dumps(self, value, name=None, **kwargs): - return self._convert(value, name) - - def loads(self, value, name=None, **kwargs): - return self._convert(value, name) - - def _convert(self, value, name=None): - if self.strict and not isinstance(value, bool): - self.fail(name, "bool", type(value)) - if value == "true" or value is True: - return True - if value == "false" or value is False: - return False - self.fail(name, "bool", type(value)) diff --git a/ucloud/core/typesystem/schema.py b/ucloud/core/typesystem/schema.py deleted file mode 100644 index 1400291..0000000 --- a/ucloud/core/typesystem/schema.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -from ucloud.core.typesystem import abstract -from ucloud.core.exc import ValidationException -from ucloud.core.utils import compat - -logger = logging.getLogger(__name__) - - -class Schema(abstract.Schema): - fields = {} - - def dumps(self, d, name=None, **kwargs): - result = {} - errors = [] - for k, field in self.fields.items(): - v = d.get(k) - if v is None: - if field.required: - errors.append( - ValidationException( - "the field {k} is required".format(k=k) - ) - ) - continue - if field.default is None: - continue - if isinstance(field.default, compat.Callable): - v = field.default() - else: - v = field.default - try: - serialized = field.dumps(v, name=k) - except ValidationException as e: - errors.extend(e.errors) - continue - result[field.dump_to or k] = serialized - if len(errors) > 0: - raise ValidationException(errors) - return result - - def loads(self, d, name=None, **kwargs): - result = {} - errors = [] - if not self.case_sensitive: - d = {k.lower(): v for k, v in d.items()} - for k, field in self.fields.items(): - load_key = field.load_from or k - v = d.get(load_key if self.case_sensitive else load_key.lower()) - if v is None: - if field.default is None: - continue - if isinstance(field.default, compat.Callable): - v = field.default() - else: - v = field.default - try: - serialized = field.loads(v, name=k) - except ValidationException as e: - errors.extend(e.errors) - continue - result[k] = serialized - if len(errors) > 0: - raise ValidationException(errors) - return result - - -class RequestSchema(Schema): - fields = {} - - def dumps(self, d, name=None, **kwargs): - if not isinstance(d, dict): - raise ValidationException( - "invalid field {}, expect dict, got {}".format(name, type(d)) - ) - result = super(RequestSchema, self).dumps(d, name=name, **kwargs) - return result - - -class ResponseSchema(Schema): - pass diff --git a/ucloud/core/utils/__init__.py b/ucloud/core/utils/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/core/utils/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/core/utils/compat.py b/ucloud/core/utils/compat.py deleted file mode 100644 index 6906da3..0000000 --- a/ucloud/core/utils/compat.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- - -import sys - -PY3 = sys.version_info[0] == 3 -if PY3: - str = str - string_types = (str,) - from collections.abc import Callable -else: - import types - - str = unicode # noqa: F821 # noqa: F821 - string_types = types.StringTypes - from collections import Callable diff --git a/ucloud/core/utils/deco.py b/ucloud/core/utils/deco.py deleted file mode 100644 index 23bded4..0000000 --- a/ucloud/core/utils/deco.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- - -import functools -import logging - -logger = logging.getLogger("ucloud") - - -def deprecated(instead_of="", message=""): - """ deprecated is a decorator to mark a function is deprecated. - it will logging warning when this function called - - >>> @deprecated(instead_of="new_function") - ... def an_old_function(): - ... pass - """ - - def deco(fn): - @functools.wraps(fn) - def wrapper(*args, **kwargs): - msg = [ - "this function/method `{}` is deprecated".format(fn.__name__) - ] - instead_of and msg.append( - "please use `{}` instead".format(instead_of) - ) - message and msg.append(message) - logger.warning(", ".join(msg)) - return fn(*args, **kwargs) - - return wrapper - - return deco diff --git a/ucloud/core/utils/log.py b/ucloud/core/utils/log.py deleted file mode 100644 index 402758c..0000000 --- a/ucloud/core/utils/log.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging - -DEFAULT_LOGGER_NAME = "ucloud" -DEFAULT_FORMAT = "%(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s %(name)s)" -DEFAULT_LEVEL = logging.INFO - - -def init_default_logger(): - logger = logging.getLogger(DEFAULT_LOGGER_NAME) - logger.setLevel(DEFAULT_LEVEL) - ch = logging.StreamHandler() - ch.setLevel(DEFAULT_LEVEL) - formatter = logging.Formatter(DEFAULT_FORMAT) - ch.setFormatter(formatter) - logger.removeHandler(ch) - logger.addHandler(ch) - return logger - - -default_logger = init_default_logger() diff --git a/ucloud/core/utils/middleware.py b/ucloud/core/utils/middleware.py deleted file mode 100644 index 5f4f1c6..0000000 --- a/ucloud/core/utils/middleware.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- - - -class Middleware(object): - """ middleware is the object to store request/response handlers - - >>> middleware = Middleware() - - Add a request handler to prepare the request - - >>> @middleware.request - ... def prepare(req): - ... req['Region'] = 'cn-bj2' - ... return req - - Add a response handler to log the response detail - - >>> @middleware.response - ... def logged(resp): - ... print(resp) - ... return resp - - >>> len(middleware.request_handlers), len(middleware.response_handlers) - (1, 1) - """ - - def __init__(self): - self.request_handlers = [] - self.response_handlers = [] - self.exception_handlers = [] - - def request(self, handler, index=-1): - """ request is the request handler register to add request handler. - - :param handler: request handler function, receive request object - and return a new request - :param int index: the position of request in the handler list, - default is append it to end - :return: - """ - self.request_handlers.insert(index, handler) - return handler - - def response(self, handler, index=-1): - """ response is the response handler register to add response handler. - - :param handler: response handler function, receive response object - and return a new response - :param int index: the position of response in the handler list, - default is append it to end - :return: - """ - self.response_handlers.insert(index, handler) - return handler - - def exception(self, handler, index=-1): - """ exception is the exception handler register to add exception handler. - - :param handler: exception handler function, receive exception object - and raise a new exception or ignore it - :param int index: the position of handler in the handler list, - default is append it to end - :return: - """ - self.exception_handlers.insert(index, handler) - return handler diff --git a/ucloud/helpers/__init__.py b/ucloud/helpers/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/helpers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/helpers/utils.py b/ucloud/helpers/utils.py deleted file mode 100644 index f8aeb68..0000000 --- a/ucloud/helpers/utils.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- - -import random -import base64 - -_lowercase = "abcdefghijklmnopqrstuvwxyz" -_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" -_numbers = "0123456789" -_specials = "_" - - -def gen_password( - n, - lower_letters=_lowercase, - upper_letters=_uppercase, - number_letters=_numbers, - special_letters=_specials, - min_lower=1, - min_upper=1, - min_number=1, - min_specials=1, -): - """ generate password for any resource - - >>> len(gen_password(20)) - 20 - - :param int n: password total length - :param str lower_letters: all lowercase letters - :param str upper_letters: all uppercase letters - :param str number_letters: all number letters - :param str special_letters: all special letters - :param int min_lower: minimal number of lowercase letters - :param int min_upper: minimal number of uppercase letters - :param int min_number: minimal number of number letters - :param int min_specials: minimal number of special letters - :return: - """ - all_letters = "".join( - [lower_letters, upper_letters, number_letters, special_letters] - ) - minimal_total = min_lower + min_upper + min_number + min_specials - if n < minimal_total: - raise ValueError( - "the length of password must be larger than total minimal letters number" - ) - minimal_letters = "".join( - [ - gen_string(lower_letters, min_lower), - gen_string(upper_letters, min_upper), - gen_string(number_letters, min_number), - gen_string(special_letters, min_specials), - ] - ) - additional_letters = random.sample(all_letters, n - minimal_total) - results = list(minimal_letters) + additional_letters - random.shuffle(results) - return "".join(results) - - -def gen_string(letters, length): - return "".join([random.choice(letters) for i in range(length)]) - - -def first(arr): - if len(arr) == 0: - return None - return arr[0] - - -def b64encode(s): - """ base64 encode - - :param str s: input string - :return: base64 string - """ - return base64.b64encode(s.encode()).decode() - - -def b64decode(s): - """ base64 decode - - :param str s: base64 string - :return: output string - """ - return base64.b64decode(s.encode()).decode() diff --git a/ucloud/helpers/wait.py b/ucloud/helpers/wait.py deleted file mode 100644 index a10d3b5..0000000 --- a/ucloud/helpers/wait.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- - -import time -import logging -from ucloud.core import exc - -MAX_BACKOFF_INTERVAL = 10 -logger = logging.getLogger(__name__) - - -class WaitTimeoutException(exc.UCloudException): - pass - - -class StateConf(object): - """ StateConf is the utilities class to wait the state return by refresh function achieve the specific state, - the generally usage is wait the cloud resource, such as uhost, udb ... is - ready after created. - """ - - def __init__( - self, - pending, - target, - refresh, - timeout, - startup_delay=0, - min_backoff_interval=0.1, - max_backoff_interval=MAX_BACKOFF_INTERVAL, - ): - self.pending = pending - self.target = target - self.refresh = refresh - self.timeout = timeout - self.startup_delay = startup_delay - self.min_backoff_interval = min_backoff_interval - self.max_backoff_interval = max_backoff_interval - - def wait(self): - start_time = time.time() - interval = self.min_backoff_interval - time.sleep(self.startup_delay) - while time.time() - start_time < self.timeout: - state = self.refresh() - if state in self.pending: - time.sleep(interval) - interval *= 2 - if interval > self.max_backoff_interval: - interval = self.max_backoff_interval - logger.info( - "waiting state for {self.refresh}, got state {state}".format( - self=self, state=state - ) - ) - continue - if state in self.target: - return - raise WaitTimeoutException( - "wait timeout {self.timeout}s for {self.refresh}".format(self=self) - ) - - -def wait_for_state( - pending, - target, - refresh, - timeout, - startup_delay=0, - min_backoff_interval=0.1, - max_backoff_interval=MAX_BACKOFF_INTERVAL, -): - """ wait_for_state is a utilities function to wait the state return by refresh function achieve the specific state, - the generally usage is wait the cloud resource, such as uhost, udb ... is - ready after created. - - >>> wait_for_state( - ... pending=["pending"], - ... target=["running"], - ... refresh=lambda: "running", - ... timeout=0.5, - ... ) - - :param pending: pending is the list of pending state, the state is returned by refresh function - :param target: target is the list of target state, it is usually the terminate state, eg. running and fail - :param refresh: the customized refresh function, expect no arguments and return a state - :param timeout: timeout is the total time to wait state is achieved - :param startup_delay: the time to wait before first refresh function is called - :param min_backoff_interval: the backoff time for first refresh interval - :param max_backoff_interval: the max backoff time for refresh interval - """ - conf = StateConf( - pending=pending, - target=target, - refresh=refresh, - timeout=timeout, - startup_delay=startup_delay, - min_backoff_interval=min_backoff_interval, - max_backoff_interval=max_backoff_interval, - ) - return conf.wait() diff --git a/ucloud/services/__init__.py b/ucloud/services/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ipsecvpn/__init__.py b/ucloud/services/ipsecvpn/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ipsecvpn/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ipsecvpn/client.py b/ucloud/services/ipsecvpn/client.py deleted file mode 100644 index 50fa7d1..0000000 --- a/ucloud/services/ipsecvpn/client.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.ipsecvpn.schemas import apis - - -class IPSecVPNClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(IPSecVPNClient, self).__init__( - config, transport, middleware, logger - ) - - def describe_remote_vpn_gateway(self, req=None, **kwargs): - """ DescribeRemoteVPNGateway - 获取客户VPN网关信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 数据分页值, 默认为20 - - **Offset** (int) - 数据偏移量, 默认为0 - - **RemoteVPNGatewayIds** (list) - 客户VPN网关的资源ID,例如RemoteVPNGatewayIds.0代表希望获取客户VPN网关1的信息,RemoteVPNGatewayIds.1代表客户VPN网关2,如果为空,则返回当前Region中所有客户VPN网关实例的信息 - - **Tag** (str) - 业务组名称,若指定则返回业务组下所有客户VPN网关信息 - - **Response** - - - **DataSet** (list) - 见 **RemoteVPNGatewayDataSet** 模型定义 - - **TotalCount** (int) - 符合条件的客户VPN网关总数 - - **Response Model** - - **RemoteVPNGatewayDataSet** - - - **ActiveTunnels** (str) - 活跃的隧道id - - **CreateTime** (int) - 创建时间 - - **Remark** (str) - 备注 - - **RemoteVPNGatewayAddr** (str) - 客户网关IP地址 - - **RemoteVPNGatewayId** (str) - 客户网关ID - - **RemoteVPNGatewayName** (str) - 客户网关名称 - - **Tag** (str) - 用户组 - - **TunnelCount** (int) - 活跃的隧道数量 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeRemoteVPNGatewayRequestSchema().dumps(d) - resp = self.invoke("DescribeRemoteVPNGateway", d, **kwargs) - return apis.DescribeRemoteVPNGatewayResponseSchema().loads(resp) - - def describe_vpn_tunnel(self, req=None, **kwargs): - """ DescribeVPNTunnel - 获取VPN隧道信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 数据分页值, 默认为20 - - **Offset** (int) - 数据偏移量, 默认为0 - - **Tag** (str) - 业务组名称,若指定则返回指定的业务组下的所有VPN网关的信息 - - **VPNTunnelIds** (list) - VPN隧道的资源ID,例如VPNTunnelIds.0代表希望获取信息的VPN隧道1,VPNTunneIds.1代表VPN隧道2,如果为空,则返回当前Region中所有的VPN隧道实例 - - **Response** - - - **DataSet** (list) - 见 **VPNTunnelDataSet** 模型定义 - - **TotalCount** (int) - VPN隧道总数 - - **Response Model** - - **IPSecData** - - - **IPSecAuthenticationAlgorithm** (str) - IPSec通道中使用的认证算法 - - **IPSecEncryptionAlgorithm** (str) - IPSec通道中使用的加密算法 - - **IPSecLocalSubnetIds** (list) - 指定VPN连接的本地子网,用逗号分隔 - - **IPSecPFSDhGroup** (str) - 是否开启PFS功能,Disable表示关闭,数字表示DH组 - - **IPSecProtocol** (str) - 使用的安全协议,ESP或AH - - **IPSecRemoteSubnets** (list) - 指定VPN连接的客户网段,用逗号分隔 - - **IPSecSALifetime** (str) - IPSec中SA的生存时间 - - **IPSecSALifetimeBytes** (str) - IPSec中SA的生存时间(以字节计) - - **IKEData** - - - **IKEAuthenticationAlgorithm** (str) - IKE认证算法 - - **IKEDhGroup** (str) - IKEDH组 - - **IKEEncryptionAlgorithm** (str) - IKE加密算法 - - **IKEExchangeMode** (str) - IKEv1协商模式 - - **IKELocalId** (str) - IKE本地ID标识 - - **IKEPreSharedKey** (str) - IKE预共享秘钥 - - **IKERemoteId** (str) - IKE对端ID标识 - - **IKESALifetime** (str) - IKE秘钥生存时间 - - **IKEVersion** (str) - IKE版本 - - **VPNTunnelDataSet** - - - **CreateTime** (int) - 创建时间 - - **IKEData** (dict) - 见 **IKEData** 模型定义 - - **IPSecData** (dict) - 见 **IPSecData** 模型定义 - - **Remark** (str) - 备注 - - **RemoteVPNGatewayId** (str) - 对端网关Id - - **RemoteVPNGatewayName** (str) - 对端网关名字 - - **Tag** (str) - 用户组 - - **VPCId** (str) - 所属VPCId - - **VPCName** (str) - 所属VOC名字 - - **VPNGatewayId** (str) - 所属VPN网关id - - **VPNGatewayName** (str) - VPN网关名字 - - **VPNTunnelId** (str) - 隧道id - - **VPNTunnelName** (str) - 隧道名称 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeVPNTunnelRequestSchema().dumps(d) - resp = self.invoke("DescribeVPNTunnel", d, **kwargs) - return apis.DescribeVPNTunnelResponseSchema().loads(resp) diff --git a/ucloud/services/ipsecvpn/schemas/__init__.py b/ucloud/services/ipsecvpn/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ipsecvpn/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ipsecvpn/schemas/apis.py b/ucloud/services/ipsecvpn/schemas/apis.py deleted file mode 100644 index 674c305..0000000 --- a/ucloud/services/ipsecvpn/schemas/apis.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.ipsecvpn.schemas import models - -""" IPSecVPN API Schema -""" -""" -API: DescribeRemoteVPNGateway - -获取客户VPN网关信息 -""" - - -class DescribeRemoteVPNGatewayRequestSchema(schema.RequestSchema): - """ DescribeRemoteVPNGateway - 获取客户VPN网关信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RemoteVPNGatewayIds": fields.List(fields.Str()), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class DescribeRemoteVPNGatewayResponseSchema(schema.ResponseSchema): - """ DescribeRemoteVPNGateway - 获取客户VPN网关信息 - """ - - fields = { - "DataSet": fields.List( - models.RemoteVPNGatewayDataSetSchema(), - required=False, - load_from="DataSet", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVPNTunnel - -获取VPN隧道信息 -""" - - -class DescribeVPNTunnelRequestSchema(schema.RequestSchema): - """ DescribeVPNTunnel - 获取VPN隧道信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPNTunnelIds": fields.List(fields.Str()), - } - - -class DescribeVPNTunnelResponseSchema(schema.ResponseSchema): - """ DescribeVPNTunnel - 获取VPN隧道信息 - """ - - fields = { - "DataSet": fields.List( - models.VPNTunnelDataSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } diff --git a/ucloud/services/ipsecvpn/schemas/models.py b/ucloud/services/ipsecvpn/schemas/models.py deleted file mode 100644 index 820b870..0000000 --- a/ucloud/services/ipsecvpn/schemas/models.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class RemoteVPNGatewayDataSetSchema(schema.ResponseSchema): - """ RemoteVPNGatewayDataSet - DescribeRemoteVPNGateway返回参数 - """ - - fields = { - "ActiveTunnels": fields.Str(required=False, load_from="ActiveTunnels"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Remark": fields.Str(required=False, load_from="Remark"), - "RemoteVPNGatewayAddr": fields.Str( - required=False, load_from="RemoteVPNGatewayAddr" - ), - "RemoteVPNGatewayId": fields.Str( - required=False, load_from="RemoteVPNGatewayId" - ), - "RemoteVPNGatewayName": fields.Str( - required=False, load_from="RemoteVPNGatewayName" - ), - "Tag": fields.Str(required=False, load_from="Tag"), - "TunnelCount": fields.Int(required=False, load_from="TunnelCount"), - } - - -class IPSecDataSchema(schema.ResponseSchema): - """ IPSecData - IPSec参数 - """ - - fields = { - "IPSecAuthenticationAlgorithm": fields.Str( - required=False, load_from="IPSecAuthenticationAlgorithm" - ), - "IPSecEncryptionAlgorithm": fields.Str( - required=False, load_from="IPSecEncryptionAlgorithm" - ), - "IPSecLocalSubnetIds": fields.List(fields.Str()), - "IPSecPFSDhGroup": fields.Str( - required=False, load_from="IPSecPFSDhGroup" - ), - "IPSecProtocol": fields.Str(required=False, load_from="IPSecProtocol"), - "IPSecRemoteSubnets": fields.List(fields.Str()), - "IPSecSALifetime": fields.Str( - required=False, load_from="IPSecSALifetime" - ), - "IPSecSALifetimeBytes": fields.Str( - required=False, load_from="IPSecSALifetimeBytes" - ), - } - - -class IKEDataSchema(schema.ResponseSchema): - """ IKEData - IKE信息 - """ - - fields = { - "IKEAuthenticationAlgorithm": fields.Str( - required=False, load_from="IKEAuthenticationAlgorithm" - ), - "IKEDhGroup": fields.Str(required=False, load_from="IKEDhGroup"), - "IKEEncryptionAlgorithm": fields.Str( - required=False, load_from="IKEEncryptionAlgorithm" - ), - "IKEExchangeMode": fields.Str( - required=False, load_from="IKEExchangeMode" - ), - "IKELocalId": fields.Str(required=False, load_from="IKELocalId"), - "IKEPreSharedKey": fields.Str( - required=False, load_from="IKEPreSharedKey" - ), - "IKERemoteId": fields.Str(required=False, load_from="IKERemoteId"), - "IKESALifetime": fields.Str(required=False, load_from="IKESALifetime"), - "IKEVersion": fields.Str(required=False, load_from="IKEVersion"), - } - - -class VPNTunnelDataSetSchema(schema.ResponseSchema): - """ VPNTunnelDataSet - DescribeVPNTunnel信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "IKEData": IKEDataSchema(), - "IPSecData": IPSecDataSchema(), - "Remark": fields.Str(required=False, load_from="Remark"), - "RemoteVPNGatewayId": fields.Str( - required=False, load_from="RemoteVPNGatewayId" - ), - "RemoteVPNGatewayName": fields.Str( - required=False, load_from="RemoteVPNGatewayName" - ), - "Tag": fields.Str(required=False, load_from="Tag"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "VPCName": fields.Str(required=False, load_from="VPCName"), - "VPNGatewayId": fields.Str(required=False, load_from="VPNGatewayId"), - "VPNGatewayName": fields.Str( - required=False, load_from="VPNGatewayName" - ), - "VPNTunnelId": fields.Str(required=False, load_from="VPNTunnelId"), - "VPNTunnelName": fields.Str(required=False, load_from="VPNTunnelName"), - } diff --git a/ucloud/services/pathx/__init__.py b/ucloud/services/pathx/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/pathx/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/pathx/client.py b/ucloud/services/pathx/client.py deleted file mode 100644 index f279007..0000000 --- a/ucloud/services/pathx/client.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.pathx.schemas import apis - - -class PathXClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(PathXClient, self).__init__(config, transport, middleware, logger) - - def create_global_ssh_instance(self, req=None, **kwargs): - """ CreateGlobalSSHInstance - 创建GlobalSSH实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 `_ - - **Area** (str) - (Required) 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填一个 - - **AreaCode** (str) - (Required) AreaCode, 区域航空港国际通用代码。Area和AreaCode两者必填一个 - - **Port** (int) - (Required) SSH端口,1-65535且不能使用80,443端口 - - **TargetIP** (str) - (Required) 被SSH访问的IP - - **ChargeType** (str) - 支付方式,如按月、按年、按时 - - **CouponId** (str) - 使用代金券可冲抵部分费用 - - **Quantity** (int) - 购买数量 - - **Remark** (str) - 备注信息 - - **Response** - - - **AcceleratingDomain** (str) - 加速域名,访问该域名可就近接入 - - **InstanceId** (str) - 实例ID,资源唯一标识 - - **Message** (str) - 提示信息 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.CreateGlobalSSHInstanceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateGlobalSSHInstance", d, **kwargs) - return apis.CreateGlobalSSHInstanceResponseSchema().loads(resp) - - def delete_global_ssh_instance(self, req=None, **kwargs): - """ DeleteGlobalSSHInstance - 删除GlobalSSH实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 `_ - - **InstanceId** (str) - (Required) 实例Id,资源的唯一标识 - - **Response** - - - **Message** (str) - 提示信息 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DeleteGlobalSSHInstanceRequestSchema().dumps(d) - resp = self.invoke("DeleteGlobalSSHInstance", d, **kwargs) - return apis.DeleteGlobalSSHInstanceResponseSchema().loads(resp) - - def describe_global_ssh_area(self, req=None, **kwargs): - """ DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 机房地域代号,如hk、 us-ca、 us-ws等。不填默认为空,返回所有支持地区。 - - **Response** - - - **AreaSet** (list) - 见 **GlobalSSHArea** 模型定义 - - **Message** (str) - 提示信息 - - **Response Model** - - **GlobalSSHArea** - - - **Area** (str) - GlobalSSH覆盖的地区,如香港、东京、洛杉矶等 - - **AreaCode** (str) - 地区代号,以地区AirPort Code - - **RegionSet** (list) - ucloud机房代号构成的数组,如["hk","us-ca"] - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeGlobalSSHAreaRequestSchema().dumps(d) - resp = self.invoke("DescribeGlobalSSHArea", d, **kwargs) - return apis.DescribeGlobalSSHAreaResponseSchema().loads(resp) - - def describe_global_ssh_instance(self, req=None, **kwargs): - """ DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 `_ - - **InstanceId** (str) - 实例ID,资源唯一标识 - - **Response** - - - **InstanceSet** (list) - 见 **GlobalSSHInfo** 模型定义 - - **Response Model** - - **GlobalSSHInfo** - - - **AcceleratingDomain** (str) - 加速域名 - - **Area** (str) - 被SSH访问的IP所在地区 - - **ChargeType** (str) - 支付周期,如Month,Year等 - - **CreateTime** (int) - 资源创建时间戳 - - **ExpireTime** (int) - 资源过期时间戳 - - **InstanceId** (str) - 实例ID,资源唯一标识 - - **Port** (int) - SSH登陆端口 - - **Remark** (str) - 备注信息 - - **TargetIP** (str) - 被SSH访问的EIP - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DescribeGlobalSSHInstanceRequestSchema().dumps(d) - resp = self.invoke("DescribeGlobalSSHInstance", d, **kwargs) - return apis.DescribeGlobalSSHInstanceResponseSchema().loads(resp) - - def modify_global_ssh_port(self, req=None, **kwargs): - """ ModifyGlobalSSHPort - 修改GlobalSSH端口 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 `_ - - **InstanceId** (str) - (Required) 实例ID,资源唯一标识 - - **Port** (int) - (Required) 调整后的SSH登陆端口 - - **Response** - - - **Message** (str) - 提示信息 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.ModifyGlobalSSHPortRequestSchema().dumps(d) - resp = self.invoke("ModifyGlobalSSHPort", d, **kwargs) - return apis.ModifyGlobalSSHPortResponseSchema().loads(resp) - - def modify_global_ssh_remark(self, req=None, **kwargs): - """ ModifyGlobalSSHRemark - 修改GlobalSSH备注 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,如org-xxxx。请参考 `GetProjectList接口 `_ - - **InstanceId** (str) - (Required) 实例ID,资源唯一标识 - - **Remark** (str) - 备注信息,不填默认为空字符串 - - **Response** - - - **Message** (str) - 接口返回消息 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.ModifyGlobalSSHRemarkRequestSchema().dumps(d) - resp = self.invoke("ModifyGlobalSSHRemark", d, **kwargs) - return apis.ModifyGlobalSSHRemarkResponseSchema().loads(resp) diff --git a/ucloud/services/pathx/schemas/__init__.py b/ucloud/services/pathx/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/pathx/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/pathx/schemas/apis.py b/ucloud/services/pathx/schemas/apis.py deleted file mode 100644 index 266e759..0000000 --- a/ucloud/services/pathx/schemas/apis.py +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.pathx.schemas import models - -""" PathX API Schema -""" -""" -API: CreateGlobalSSHInstance - -创建GlobalSSH实例 -""" - - -class CreateGlobalSSHInstanceRequestSchema(schema.RequestSchema): - """ CreateGlobalSSHInstance - 创建GlobalSSH实例 - """ - - fields = { - "Area": fields.Str(required=True, dump_to="Area"), - "AreaCode": fields.Str(required=True, dump_to="AreaCode"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Port": fields.Int(required=True, dump_to="Port"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "TargetIP": fields.Str(required=True, dump_to="TargetIP"), - } - - -class CreateGlobalSSHInstanceResponseSchema(schema.ResponseSchema): - """ CreateGlobalSSHInstance - 创建GlobalSSH实例 - """ - - fields = { - "AcceleratingDomain": fields.Str( - required=False, load_from="AcceleratingDomain" - ), - "InstanceId": fields.Str(required=True, load_from="InstanceId"), - "Message": fields.Str(required=False, load_from="Message"), - } - - -""" -API: DeleteGlobalSSHInstance - -删除GlobalSSH实例 -""" - - -class DeleteGlobalSSHInstanceRequestSchema(schema.RequestSchema): - """ DeleteGlobalSSHInstance - 删除GlobalSSH实例 - """ - - fields = { - "InstanceId": fields.Str(required=True, dump_to="InstanceId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - } - - -class DeleteGlobalSSHInstanceResponseSchema(schema.ResponseSchema): - """ DeleteGlobalSSHInstance - 删除GlobalSSH实例 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: DescribeGlobalSSHArea - -获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性 -""" - - -class DescribeGlobalSSHAreaRequestSchema(schema.RequestSchema): - """ DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - } - - -class DescribeGlobalSSHAreaResponseSchema(schema.ResponseSchema): - """ DescribeGlobalSSHArea - 获取GlobalSSH覆盖的地区列表 用于控制显示哪些机房地域可以使用SSH特性 - """ - - fields = { - "AreaSet": fields.List( - models.GlobalSSHAreaSchema(), required=False, load_from="AreaSet" - ), - "Message": fields.Str(required=False, load_from="Message"), - } - - -""" -API: DescribeGlobalSSHInstance - -获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例) -""" - - -class DescribeGlobalSSHInstanceRequestSchema(schema.RequestSchema): - """ DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例) - """ - - fields = { - "InstanceId": fields.Str(required=False, dump_to="InstanceId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - } - - -class DescribeGlobalSSHInstanceResponseSchema(schema.ResponseSchema): - """ DescribeGlobalSSHInstance - 获取GlobalSSH实例列表(传实例ID获取单个实例信息,不传获取项目下全部实例) - """ - - fields = { - "InstanceSet": fields.List( - models.GlobalSSHInfoSchema(), - required=False, - load_from="InstanceSet", - ) - } - - -""" -API: ModifyGlobalSSHPort - -修改GlobalSSH端口 -""" - - -class ModifyGlobalSSHPortRequestSchema(schema.RequestSchema): - """ ModifyGlobalSSHPort - 修改GlobalSSH端口 - """ - - fields = { - "InstanceId": fields.Str(required=True, dump_to="InstanceId"), - "Port": fields.Int(required=True, dump_to="Port"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - } - - -class ModifyGlobalSSHPortResponseSchema(schema.ResponseSchema): - """ ModifyGlobalSSHPort - 修改GlobalSSH端口 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: ModifyGlobalSSHRemark - -修改GlobalSSH备注 -""" - - -class ModifyGlobalSSHRemarkRequestSchema(schema.RequestSchema): - """ ModifyGlobalSSHRemark - 修改GlobalSSH备注 - """ - - fields = { - "InstanceId": fields.Str(required=True, dump_to="InstanceId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Remark": fields.Str(required=False, dump_to="Remark"), - } - - -class ModifyGlobalSSHRemarkResponseSchema(schema.ResponseSchema): - """ ModifyGlobalSSHRemark - 修改GlobalSSH备注 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} diff --git a/ucloud/services/pathx/schemas/models.py b/ucloud/services/pathx/schemas/models.py deleted file mode 100644 index e85ea28..0000000 --- a/ucloud/services/pathx/schemas/models.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class GlobalSSHAreaSchema(schema.ResponseSchema): - """ GlobalSSHArea - GlobalSSH覆盖地区,包括关联的UCloud机房信息 - """ - - fields = { - "Area": fields.Str(required=True, load_from="Area"), - "AreaCode": fields.Str(required=True, load_from="AreaCode"), - "RegionSet": fields.List(fields.Str()), - } - - -class GlobalSSHInfoSchema(schema.ResponseSchema): - """ GlobalSSHInfo - GlobalSSH实例信息 - """ - - fields = { - "AcceleratingDomain": fields.Str( - required=True, load_from="AcceleratingDomain" - ), - "Area": fields.Str(required=True, load_from="Area"), - "ChargeType": fields.Str(required=True, load_from="ChargeType"), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "ExpireTime": fields.Int(required=True, load_from="ExpireTime"), - "InstanceId": fields.Str(required=True, load_from="InstanceId"), - "Port": fields.Int(required=True, load_from="Port"), - "Remark": fields.Str(required=True, load_from="Remark"), - "TargetIP": fields.Str(required=True, load_from="TargetIP"), - } diff --git a/ucloud/services/stepflow/__init__.py b/ucloud/services/stepflow/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/stepflow/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/stepflow/client.py b/ucloud/services/stepflow/client.py deleted file mode 100644 index dfda061..0000000 --- a/ucloud/services/stepflow/client.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.stepflow.schemas import apis - - -class StepFlowClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(StepFlowClient, self).__init__( - config, transport, middleware, logger - ) - - def create_sf_workflow_from_template(self, req=None, **kwargs): - """ CreateSFWorkflowFromTemplate - 导入工作流定义 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Namespace** (str) - (Required) 需要创建的工作流namespace - - **Workflow** (str) - (Required) 描述工作流定义的base64字符串 - - **WorkflowName** (str) - (Required) 需要创建的工作流名称 - - **Response** - - - **Message** (str) - 返回消息 - - **Version** (int) - 创建的工作流版本号 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateSFWorkflowFromTemplateRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateSFWorkflowFromTemplate", d, **kwargs) - return apis.CreateSFWorkflowFromTemplateResponseSchema().loads(resp) - - def get_sf_workflow_template(self, req=None, **kwargs): - """ GetSFWorkflowTemplate - 导出工作流定义 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **WorkflowId** (str) - (Required) 被导出工作流的Id - - **WorkflowVersion** (int) - 被导出工作流的版本号。取值范围:WorkflowVersion >= 1;默认会获取发布版本对应的workflow;超过最大版本会返回错误 - - **Response** - - - **Message** (str) - 返回消息 - - **Version** (int) - 导出工作流的版本号 - - **Workflow** (dict) - 见 **WorkflowTemplate** 模型定义 - - **WorkflowId** (str) - 导出工作流的Id - - **Response Model** - - **Param** - - - **Name** (str) - 参数名称 - - **Type** (str) - 参数类型 - - **Value** (str) - 参数值 - - **ActivityTemplate** - - - **Input** (dict) - Activity的输入 - - **Name** (str) - Activity的名字 - - **Next** (str) - 下一个Activity的名字 - - **Output** (list) - Activity的输出,详见Param - - **RetryTimes** (str) - Activity的重试次数 - - **Timeout** (str) - Activity的超时时间 - - **Type** (str) - Activity的类型 - - **WorkflowTemplate** - - - **Activites** (list) - 见 **ActivityTemplate** 模型定义 - - **Input** (list) - 见 **Param** 模型定义 - - **Output** (list) - 见 **Param** 模型定义 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetSFWorkflowTemplateRequestSchema().dumps(d) - resp = self.invoke("GetSFWorkflowTemplate", d, **kwargs) - return apis.GetSFWorkflowTemplateResponseSchema().loads(resp) diff --git a/ucloud/services/stepflow/schemas/__init__.py b/ucloud/services/stepflow/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/stepflow/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/stepflow/schemas/apis.py b/ucloud/services/stepflow/schemas/apis.py deleted file mode 100644 index 20037c4..0000000 --- a/ucloud/services/stepflow/schemas/apis.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.stepflow.schemas import models - -""" StepFlow API Schema -""" -""" -API: CreateSFWorkflowFromTemplate - -导入工作流定义 -""" - - -class CreateSFWorkflowFromTemplateRequestSchema(schema.RequestSchema): - """ CreateSFWorkflowFromTemplate - 导入工作流定义 - """ - - fields = { - "Namespace": fields.Str(required=True, dump_to="Namespace"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Workflow": fields.Base64(required=True, dump_to="Workflow"), - "WorkflowName": fields.Str(required=True, dump_to="WorkflowName"), - } - - -class CreateSFWorkflowFromTemplateResponseSchema(schema.ResponseSchema): - """ CreateSFWorkflowFromTemplate - 导入工作流定义 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "Version": fields.Int(required=True, load_from="Version"), - } - - -""" -API: GetSFWorkflowTemplate - -导出工作流定义 -""" - - -class GetSFWorkflowTemplateRequestSchema(schema.RequestSchema): - """ GetSFWorkflowTemplate - 导出工作流定义 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "WorkflowId": fields.Str(required=True, dump_to="WorkflowId"), - "WorkflowVersion": fields.Int( - required=False, dump_to="WorkflowVersion" - ), - } - - -class GetSFWorkflowTemplateResponseSchema(schema.ResponseSchema): - """ GetSFWorkflowTemplate - 导出工作流定义 - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "Version": fields.Int(required=True, load_from="Version"), - "Workflow": models.WorkflowTemplateSchema(), - "WorkflowId": fields.Str(required=True, load_from="WorkflowId"), - } diff --git a/ucloud/services/stepflow/schemas/models.py b/ucloud/services/stepflow/schemas/models.py deleted file mode 100644 index bac8e96..0000000 --- a/ucloud/services/stepflow/schemas/models.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class ParamSchema(schema.ResponseSchema): - """ Param - 工作流参数 - """ - - fields = { - "Name": fields.Str(required=False, load_from="Name"), - "Type": fields.Str(required=False, load_from="Type"), - "Value": fields.Str(required=False, load_from="Value"), - } - - -class ActivityTemplateSchema(schema.ResponseSchema): - """ ActivityTemplate - 工作流的Activity定义 - """ - - fields = { - "Input": fields.Str(), - "Name": fields.Str(required=False, load_from="Name"), - "Next": fields.Str(required=False, load_from="Next"), - "Output": fields.List(fields.Str()), - "RetryTimes": fields.Str(required=False, load_from="RetryTimes"), - "Timeout": fields.Str(required=False, load_from="Timeout"), - "Type": fields.Str(required=False, load_from="Type"), - } - - -class WorkflowTemplateSchema(schema.ResponseSchema): - """ WorkflowTemplate - Workflow对象定义 - """ - - fields = { - "Activites": fields.List(ActivityTemplateSchema()), - "Input": fields.List(ParamSchema()), - "Output": fields.List(ParamSchema()), - } diff --git a/ucloud/services/uaccount/__init__.py b/ucloud/services/uaccount/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uaccount/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uaccount/client.py b/ucloud/services/uaccount/client.py deleted file mode 100644 index 99b43ff..0000000 --- a/ucloud/services/uaccount/client.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.uaccount.schemas import apis - - -class UAccountClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UAccountClient, self).__init__( - config, transport, middleware, logger - ) - - def create_project(self, req=None, **kwargs): - """ CreateProject - 创建项目 - - **Request** - - - **ProjectName** (str) - (Required) 项目名称 - - **Response** - - - **ProjectId** (str) - 所创建项目的Id - - """ - d = {} - req and d.update(req) - d = apis.CreateProjectRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateProject", d, **kwargs) - return apis.CreateProjectResponseSchema().loads(resp) - - def get_project_list(self, req=None, **kwargs): - """ GetProjectList - 获取项目列表 - - **Request** - - - **IsFinance** (str) - 是否是财务账号 - - **Response** - - - **ProjectCount** (int) - 项目总数 - - **ProjectSet** (list) - 见 **ProjectListInfo** 模型定义 - - **Response Model** - - **ProjectListInfo** - - - **CreateTime** (int) - 创建时间(Unix时间戳) - - **IsDefault** (bool) - 是否为默认项目 - - **MemberCount** (int) - 项目下成员数量 - - **ParentId** (str) - 父项目ID - - **ParentName** (str) - 父项目名称 - - **ProjectId** (str) - 项目ID - - **ProjectName** (str) - 项目名称 - - **ResourceCount** (int) - 项目下资源数量 - - """ - d = {} - req and d.update(req) - d = apis.GetProjectListRequestSchema().dumps(d) - resp = self.invoke("GetProjectList", d, **kwargs) - return apis.GetProjectListResponseSchema().loads(resp) - - def get_region(self, req=None, **kwargs): - """ GetRegion - 获取用户在各数据中心的权限等信息 - - **Request** - - - **Response** - - - **Regions** (list) - 见 **RegionInfo** 模型定义 - - **Response Model** - - **RegionInfo** - - - **BitMaps** (str) - 用户在此数据中心的权限位 - - **IsDefault** (bool) - 是否用户当前默认数据中心 - - **Region** (str) - 地域名字,如cn-bj - - **RegionId** (int) - 数据中心ID - - **RegionName** (str) - 数据中心名称 - - **Zone** (str) - 可用区名字,如cn-bj-01 - - """ - d = {} - req and d.update(req) - d = apis.GetRegionRequestSchema().dumps(d) - resp = self.invoke("GetRegion", d, **kwargs) - return apis.GetRegionResponseSchema().loads(resp) - - def get_user_info(self, req=None, **kwargs): - """ GetUserInfo - 获取用户信息 - - **Request** - - - **Response** - - - **DataSet** (list) - 见 **UserInfo** 模型定义 - - **Response Model** - - **UserInfo** - - - **Admin** (int) - 是否超级管理员 0:否 1:是 - - **Administrator** (str) - 管理员 - - **AuthState** (str) - 实名认证状态 - - **City** (str) - 城市 - - **CompanyName** (str) - 公司名称 - - **Finance** (int) - 是否有财务权限 0:否 1:是 - - **IndustryType** (int) - 所属行业 - - **PhonePrefix** (str) - 国际号码前缀 - - **Province** (str) - 省份 - - **UserAddress** (str) - 公司地址 - - **UserEmail** (str) - 用户邮箱 - - **UserId** (int) - 用户Id - - **UserName** (str) - 称呼 - - **UserPhone** (str) - 用户手机 - - **UserType** (int) - 会员类型 - - **UserVersion** (int) - 是否子帐户(大于100为子帐户) - - """ - d = {} - req and d.update(req) - d = apis.GetUserInfoRequestSchema().dumps(d) - resp = self.invoke("GetUserInfo", d, **kwargs) - return apis.GetUserInfoResponseSchema().loads(resp) - - def modify_project(self, req=None, **kwargs): - """ ModifyProject - 修改项目 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **ProjectName** (str) - (Required) 新的项目名称 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.ModifyProjectRequestSchema().dumps(d) - resp = self.invoke("ModifyProject", d, **kwargs) - return apis.ModifyProjectResponseSchema().loads(resp) - - def terminate_project(self, req=None, **kwargs): - """ TerminateProject - 删除项目 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.TerminateProjectRequestSchema().dumps(d) - resp = self.invoke("TerminateProject", d, **kwargs) - return apis.TerminateProjectResponseSchema().loads(resp) diff --git a/ucloud/services/uaccount/schemas/__init__.py b/ucloud/services/uaccount/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uaccount/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uaccount/schemas/apis.py b/ucloud/services/uaccount/schemas/apis.py deleted file mode 100644 index ad5aac2..0000000 --- a/ucloud/services/uaccount/schemas/apis.py +++ /dev/null @@ -1,150 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.uaccount.schemas import models - -""" UAccount API Schema -""" -""" -API: CreateProject - -创建项目 -""" - - -class CreateProjectRequestSchema(schema.RequestSchema): - """ CreateProject - 创建项目 - """ - - fields = {"ProjectName": fields.Str(required=True, dump_to="ProjectName")} - - -class CreateProjectResponseSchema(schema.ResponseSchema): - """ CreateProject - 创建项目 - """ - - fields = {"ProjectId": fields.Str(required=True, load_from="ProjectId")} - - -""" -API: GetProjectList - -获取项目列表 -""" - - -class GetProjectListRequestSchema(schema.RequestSchema): - """ GetProjectList - 获取项目列表 - """ - - fields = {"IsFinance": fields.Str(required=False, dump_to="IsFinance")} - - -class GetProjectListResponseSchema(schema.ResponseSchema): - """ GetProjectList - 获取项目列表 - """ - - fields = { - "ProjectCount": fields.Int(required=True, load_from="ProjectCount"), - "ProjectSet": fields.List( - models.ProjectListInfoSchema(), - required=True, - load_from="ProjectSet", - ), - } - - -""" -API: GetRegion - -获取用户在各数据中心的权限等信息 -""" - - -class GetRegionRequestSchema(schema.RequestSchema): - """ GetRegion - 获取用户在各数据中心的权限等信息 - """ - - fields = {} - - -class GetRegionResponseSchema(schema.ResponseSchema): - """ GetRegion - 获取用户在各数据中心的权限等信息 - """ - - fields = { - "Regions": fields.List( - models.RegionInfoSchema(), required=False, load_from="Regions" - ) - } - - -""" -API: GetUserInfo - -获取用户信息 -""" - - -class GetUserInfoRequestSchema(schema.RequestSchema): - """ GetUserInfo - 获取用户信息 - """ - - fields = {} - - -class GetUserInfoResponseSchema(schema.ResponseSchema): - """ GetUserInfo - 获取用户信息 - """ - - fields = { - "DataSet": fields.List( - models.UserInfoSchema(), required=True, load_from="DataSet" - ) - } - - -""" -API: ModifyProject - -修改项目 -""" - - -class ModifyProjectRequestSchema(schema.RequestSchema): - """ ModifyProject - 修改项目 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "ProjectName": fields.Str(required=True, dump_to="ProjectName"), - } - - -class ModifyProjectResponseSchema(schema.ResponseSchema): - """ ModifyProject - 修改项目 - """ - - fields = {} - - -""" -API: TerminateProject - -删除项目 -""" - - -class TerminateProjectRequestSchema(schema.RequestSchema): - """ TerminateProject - 删除项目 - """ - - fields = {"ProjectId": fields.Str(required=False, dump_to="ProjectId")} - - -class TerminateProjectResponseSchema(schema.ResponseSchema): - """ TerminateProject - 删除项目 - """ - - fields = {} diff --git a/ucloud/services/uaccount/schemas/models.py b/ucloud/services/uaccount/schemas/models.py deleted file mode 100644 index ce08652..0000000 --- a/ucloud/services/uaccount/schemas/models.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class ProjectListInfoSchema(schema.ResponseSchema): - """ ProjectListInfo - 项目信息 - """ - - fields = { - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "IsDefault": fields.Bool(required=True, load_from="IsDefault"), - "MemberCount": fields.Int(required=True, load_from="MemberCount"), - "ParentId": fields.Str(required=True, load_from="ParentId"), - "ParentName": fields.Str(required=True, load_from="ParentName"), - "ProjectId": fields.Str(required=True, load_from="ProjectId"), - "ProjectName": fields.Str(required=True, load_from="ProjectName"), - "ResourceCount": fields.Int(required=True, load_from="ResourceCount"), - } - - -class RegionInfoSchema(schema.ResponseSchema): - """ RegionInfo - 数据中心信息 - """ - - fields = { - "BitMaps": fields.Str(required=True, load_from="BitMaps"), - "IsDefault": fields.Bool(required=True, load_from="IsDefault"), - "Region": fields.Str(required=True, load_from="Region"), - "RegionId": fields.Int(required=True, load_from="RegionId"), - "RegionName": fields.Str(required=True, load_from="RegionName"), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class UserInfoSchema(schema.ResponseSchema): - """ UserInfo - 用户信息 - """ - - fields = { - "Admin": fields.Int(required=True, load_from="Admin"), - "Administrator": fields.Str(required=True, load_from="Administrator"), - "AuthState": fields.Str(required=True, load_from="AuthState"), - "City": fields.Str(required=True, load_from="City"), - "CompanyName": fields.Str(required=True, load_from="CompanyName"), - "Finance": fields.Int(required=True, load_from="Finance"), - "IndustryType": fields.Int(required=True, load_from="IndustryType"), - "PhonePrefix": fields.Str(required=True, load_from="PhonePrefix"), - "Province": fields.Str(required=True, load_from="Province"), - "UserAddress": fields.Str(required=True, load_from="UserAddress"), - "UserEmail": fields.Str(required=True, load_from="UserEmail"), - "UserId": fields.Int(required=True, load_from="UserId"), - "UserName": fields.Str(required=True, load_from="UserName"), - "UserPhone": fields.Str(required=True, load_from="UserPhone"), - "UserType": fields.Int(required=True, load_from="UserType"), - "UserVersion": fields.Int(required=True, load_from="UserVersion"), - } diff --git a/ucloud/services/ucdn/__init__.py b/ucloud/services/ucdn/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ucdn/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ucdn/client.py b/ucloud/services/ucdn/client.py deleted file mode 100644 index 59e1393..0000000 --- a/ucloud/services/ucdn/client.py +++ /dev/null @@ -1,609 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.ucdn.schemas import apis - - -class UCDNClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UCDNClient, self).__init__(config, transport, middleware, logger) - - def batch_describe_new_ucdn_domain(self, req=None, **kwargs): - """ BatchDescribeNewUcdnDomain - 批量获取加速域名配置 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **ChannelType** (str) - 渠道ucdn、ufile、uvideo - - **DomainId** (list) - 域名id,创建域名时生成的资源id,默认获取账号下的所有域名信息,n为自然数 - - **Limit** (int) - 返回数据长度,如果制定了Offset,则默认20,否则默认全部,非负整数 - - **Offset** (int) - 数据偏移量,默认0,非负整数 - - **Response** - - - **Arrearage** (list) - 标识欠费的数组,数组含有下列元素值, 1=国内流量有欠费 2=国外流量有欠费 3=国内带宽有欠费 4=国外带宽有欠费 - - **ChargeType** (int) - 当前计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 - - **DomainSet** (list) - 见 **DomainInfo** 模型定义 - - **LastChargeType** (int) - 表示最后一次切换的计费方式,10=流量付费 20=带宽日峰值 30=按月后付费 40=未选择计费方式 - - **MaxDomainNum** (int) - 最大域名数量,默认20 - - **TotalCount** (int) - 满足条件的域名个数 - - **Vip** (str) - vip标示,yes-是 no-否 - - **Response Model** - - **CacheConf** - - - **CacheBehavior** (int) - 是否缓存,1为缓存,0为不缓存。为0的情况下,CacheTTL和CacheUnit强制不生效 - - **CacheTTL** (int) - 缓存时间 - - **CacheUnit** (str) - 缓存时间的单位。sec(秒),min(分钟),hour(小时),day(天) - - **Description** (str) - 缓存规则描述 - - **FollowOriginRule** (int) - 是否优先遵循源站头部缓存策略,0为不优先遵循源站,1为优先遵循源站缓存头部。默认为0 - - **HttpCodePattern** (str) - 状态码默认情况只缓存200类状态码,支持正则 - - **IgnoreQueryString** (int) - 是否忽略参数缓存(0为不忽略,1为忽略,默认为0) - - **PathPattern** (str) - 路径模式,支持正则 - - **AccessConf** - - - **IpBlacklist** (str) - 多个ip用逗号隔开 - - **DomainInfo** - - - **AccessConf** (dict) - 见 **AccessConf** 模型定义 - - **AreaCode** (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域 - - **CacheConf** (list) - 见 **CacheConf** 模型定义 - - **CacheHost** (str) - 缓存Host,不同的域名可以配置为同一个CacheHost来实现缓存共享,默认为加速域名 - - **CdnProtocol** (str) - 加速类型http,http|https - - **CdnType** (str) - 加速域名的业务类型,web代表网站,stream代表视频,download代表下载。 - - **CertName** (str) - 证书名称 - - **Cname** (str) - cdn域名。创建加速域名生成的cdn域名,用于设置CNAME记录 - - **CreateTime** (int) - 域名创建的时间。格式:时间戳 - - **Domain** (str) - 域名,用户创建加速的域名 - - **DomainId** (str) - 域名id,创建域名时生成的id - - **HttpsStatusAbroad** (str) - 国外https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用 - - **HttpsStatusCn** (str) - 国内https状态 enableing-开启中 fail-开启失败 enable-启用 disable-未启用 - - **NullRefer** (bool) - ReferType为白名单时,NullRefer为false代表不允许NULL refer访问,为true代表允许Null refer访问 - - **OriginHost** (str) - 回源Http请求头部Host,默认是加速域名 - - **OriginIp** (list) - 源站ip即cdn服务器回源访问的ip地址。支持多个源站ip,多个源站ip,可表述为如:[1.1.1.1,2.2.2.2] - - **OriginPort** (int) - 回源端口 - - **OriginProtocol** (str) - 源站协议http,http|https 默认http - - **ReferList** (list) - Refer列表,支持正则表达式 - - **ReferStatus** (bool) - refer配置开关,true打开,false关闭 - - **ReferType** (int) - 0白名单,1黑名单 - - **Status** (str) - 创建的加速域名的当前的状态。check代表审核中,checkSuccess代表审核通过,checkFail代表审核失败,enable代表加速中,disable代表停止加速,delete代表删除加速 enableing代表正在开启加速,disableing代表正在停止加速中,deleteing代表删除中 - - **Tag** (str) - 业务组,默认为Default - - **TestUrl** (str) - 测试url,用于域名创建加速时的测试 - - **ValidTime** (int) - 开始分配Cname时间。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.BatchDescribeNewUcdnDomainRequestSchema().dumps(d) - resp = self.invoke("BatchDescribeNewUcdnDomain", d, **kwargs) - return apis.BatchDescribeNewUcdnDomainResponseSchema().loads(resp) - - def describe_new_ucdn_prefetch_cache_task(self, req=None, **kwargs): - """ DescribeNewUcdnPrefetchCacheTask - 获取预取任务状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Limit** (int) - 返回数据长度,默认全部,自然数 - - **Offset** (int) - 数据偏移量,默认为0,自然数 - - **Status** (str) - 需要获取的内容预热的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态 - - **TaskId** (list) - 提交任务时返回的任务ID - - **Response** - - - **TaskList** (list) - 见 **TaskInfo** 模型定义 - - **TotalCount** (int) - 预热任务的总数 - - **Response Model** - - **UrlProgressInfo** - - - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp - - **FinishTime** (int) - 任务完成时间。格式为Unix Timestamp - - **Progress** (int) - 刷新进度,单位% - - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 - - **Url** (str) - 刷新的单条url - - **TaskInfo** - - - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp - - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 - - **TaskId** (str) - 提交任务时返回的任务ID - - **Type** (str) - file/dir 刷新任务会返回Type,预取任务没有 - - **UrlLists** (list) - 见 **UrlProgressInfo** 模型定义 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DescribeNewUcdnPrefetchCacheTaskRequestSchema().dumps(d) - resp = self.invoke("DescribeNewUcdnPrefetchCacheTask", d, **kwargs) - return apis.DescribeNewUcdnPrefetchCacheTaskResponseSchema().loads(resp) - - def describe_new_ucdn_refresh_cache_task(self, req=None, **kwargs): - """ DescribeNewUcdnRefreshCacheTask - 获取域名刷新任务状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Limit** (int) - 返回数据长度,默认全部,自然数 - - **Offset** (int) - 数据偏移量,默认为0,自然数 - - **Status** (str) - 需要获取的内容刷新的状态,枚举值:success:成功;wait:等待处理;process:正在处理;failure:失败; unknow:未知,默认选择所有状态 - - **TaskId** (list) - 提交任务时返回的任务ID - - **Response** - - - **TaskList** (list) - 见 **TaskInfo** 模型定义 - - **TotalCount** (int) - 刷新任务的总数 - - **Response Model** - - **UrlProgressInfo** - - - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp - - **FinishTime** (int) - 任务完成时间。格式为Unix Timestamp - - **Progress** (int) - 刷新进度,单位% - - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 - - **Url** (str) - 刷新的单条url - - **TaskInfo** - - - **CreateTime** (int) - 刷新任务创建的时间。格式为Unix Timestamp - - **Status** (str) - 刷新任务的当前状态,枚举值:success:成功;wait:排队中;process:处理中;failure:失败; unknow:未知 - - **TaskId** (str) - 提交任务时返回的任务ID - - **Type** (str) - file/dir 刷新任务会返回Type,预取任务没有 - - **UrlLists** (list) - 见 **UrlProgressInfo** 模型定义 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DescribeNewUcdnRefreshCacheTaskRequestSchema().dumps(d) - resp = self.invoke("DescribeNewUcdnRefreshCacheTask", d, **kwargs) - return apis.DescribeNewUcdnRefreshCacheTaskResponseSchema().loads(resp) - - def get_new_ucdn_domain_bandwidth(self, req=None, **kwargs): - """ GetNewUcdnDomainBandwidth - 获取域名带宽数据 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) - - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外 不填默认为全部区域 - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Response** - - - **BandwidthList** (list) - 见 **BandwidthInfo** 模型定义 - - **Traffic** (str) - 从起始时间到结束时间内的所使用的CDN总流量,单位GB - - **Response Model** - - **BandwidthInfo** - - - **CdnBandwidth** (str) - 返回值返回指定时间区间内CDN的带宽峰值,单位Mbps(如果请求参数Type为0,则Value是五分钟粒度的带宽值,如果Type为1,则Value是1小时的带宽峰值,如果Type为2,则Value是一天内的带宽峰值) - - **Time** (int) - 带宽获取的时间点。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetNewUcdnDomainBandwidthRequestSchema().dumps(d) - resp = self.invoke("GetNewUcdnDomainBandwidth", d, **kwargs) - return apis.GetNewUcdnDomainBandwidthResponseSchema().loads(resp) - - def get_new_ucdn_domain_hit_rate(self, req=None, **kwargs): - """ GetNewUcdnDomainHitRate - 获取域名命中率 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) - - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Response** - - - **HitRateList** (list) - 见 **HitRateInfo** 模型定义 - - **Response Model** - - **HitRateInfo** - - - **FlowHitRate** (float) - 流量命中率,单位% - - **RequestHitRate** (float) - 请求数命中率,单位% - - **Time** (int) - 带宽获取的时间点。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetNewUcdnDomainHitRateRequestSchema().dumps(d) - resp = self.invoke("GetNewUcdnDomainHitRate", d, **kwargs) - return apis.GetNewUcdnDomainHitRateResponseSchema().loads(resp) - - def get_new_ucdn_domain_http_code(self, req=None, **kwargs): - """ GetNewUcdnDomainHttpCode - 获取域名状态码监控 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) - - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Response** - - - **HttpCodeDetail** (list) - 见 **HttpCodeInfo** 模型定义 - - **Response Model** - - **HttpCodeInfo** - - - **HttpFiveXX** (int) - 5xx数量 - - **HttpFourXX** (int) - 4xx数量 - - **HttpOneXX** (int) - 1xx数量 - - **HttpThreeXX** (int) - 3xx数量 - - **HttpTwoXX** (int) - 2xx数量 - - **Time** (int) - 带宽获取的时间点。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetNewUcdnDomainHttpCodeRequestSchema().dumps(d) - resp = self.invoke("GetNewUcdnDomainHttpCode", d, **kwargs) - return apis.GetNewUcdnDomainHttpCodeResponseSchema().loads(resp) - - def get_new_ucdn_domain_http_code_v2(self, req=None, **kwargs): - """ GetNewUcdnDomainHttpCodeV2 - 获取域名详细状态码监控 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **BeginTime** (int) - (Required) 查询的起始时间,格式为Unix Timestamp。 - - **EndTime** (int) - (Required) 查询的结束时间,格式为Unix Timestamp。 - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天粒度,3表示按照一分钟粒度) - - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **Response** - - - **HttpCodeV2Detail** (list) - 见 **HttpCodeV2Detail** 模型定义 - - **Response Model** - - **HttpCodeV2Detail** - - - **Http100** (int) - http100数量 - - **Http101** (int) - http101数量 - - **Http102** (int) - http102数量 - - **Http200** (int) - http200数量 - - **Http201** (int) - http201数量 - - **Http202** (int) - http202数量 - - **Http203** (int) - http203数量 - - **Http204** (int) - http204数量 - - **Http205** (int) - http205数量 - - **Http206** (int) - http206数量 - - **Http207** (int) - http207数量 - - **Http300** (int) - http300数量 - - **Http301** (int) - http301数量 - - **Http302** (int) - http302数量 - - **Http303** (int) - http303数量 - - **Http304** (int) - http304数量 - - **Http305** (int) - http305数量 - - **Http306** (int) - http306数量 - - **Http307** (int) - http307数量 - - **Http400** (int) - http400数量 - - **Http401** (int) - http401数量 - - **Http402** (int) - http402数量 - - **Http403** (int) - http403数量 - - **Http404** (int) - http404数量 - - **Http405** (int) - http405数量 - - **Http406** (int) - http406数量 - - **Http407** (int) - http407数量 - - **Http408** (int) - http408数量 - - **Http409** (int) - http409数量 - - **Http410** (int) - http410数量 - - **Http411** (int) - http411数量 - - **Http412** (int) - http412数量 - - **Http413** (int) - http413数量 - - **Http414** (int) - http414数量 - - **Http415** (int) - http415数量 - - **Http416** (int) - http416数量 - - **Http417** (int) - http417数量 - - **Http418** (int) - http418数量 - - **Http421** (int) - http421数量 - - **Http422** (int) - http422数量 - - **Http423** (int) - http423数量 - - **Http424** (int) - http424数量 - - **Http425** (int) - http425数量 - - **Http426** (int) - http426数量 - - **Http449** (int) - http449数量 - - **Http451** (int) - http451数量 - - **Http500** (int) - http500数量 - - **Http501** (int) - http501数量 - - **Http502** (int) - http502数量 - - **Http503** (int) - http503数量 - - **Http504** (int) - http504数量 - - **Http505** (int) - http505数量 - - **Http506** (int) - http506数量 - - **Http507** (int) - http507数量 - - **Http509** (int) - http509数量 - - **Http510** (int) - http510数量 - - **Time** (int) - 时间 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetNewUcdnDomainHttpCodeV2RequestSchema().dumps(d) - resp = self.invoke("GetNewUcdnDomainHttpCodeV2", d, **kwargs) - return apis.GetNewUcdnDomainHttpCodeV2ResponseSchema().loads(resp) - - def get_new_ucdn_domain_request_num(self, req=None, **kwargs): - """ GetNewUcdnDomainRequestNum - 获取域名请求数 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) - - **Areacode** (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内 - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Response** - - - **RequestList** (list) - 见 **RequestInfo** 模型定义 - - **Response Model** - - **RequestInfo** - - - **CdnRequest** (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和 - - **OriginRequest** (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和 - - **Time** (int) - 带宽获取的时间点。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetNewUcdnDomainRequestNumRequestSchema().dumps(d) - resp = self.invoke("GetNewUcdnDomainRequestNum", d, **kwargs) - return apis.GetNewUcdnDomainRequestNumResponseSchema().loads(resp) - - def get_ucdn_domain_log(self, req=None, **kwargs): - """ GetUcdnDomainLog - 获取加速域名原始日志 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。 - - **DomainId** (list) - 域名ID,创建加速域名时生成。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Type** (int) - 查询粒度 0=default(没有粒度) 1=按小时 2=按天 - - **Response** - - - **LogSet** (list) - 见 **LogSetList** 模型定义 - - **Response Model** - - **LogSetInfo** - - - **AbroadLog** (list) - 国外日志url列表 - - **CnLog** (list) - 国内日志url列表 - - **Time** (int) - 日志时间UnixTime - - **LogSetList** - - - **Domain** (str) - 域名 - - **Logs** (list) - 见 **LogSetInfo** 模型定义 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetUcdnDomainLogRequestSchema().dumps(d) - resp = self.invoke("GetUcdnDomainLog", d, **kwargs) - return apis.GetUcdnDomainLogResponseSchema().loads(resp) - - def get_ucdn_domain_prefetch_enable(self, req=None, **kwargs): - """ GetUcdnDomainPrefetchEnable - 获取域名预取开启状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **DomainId** (str) - (Required) 域名ID,创建加速域名时生成。 - - **Response** - - - **Enable** (int) - 0表示该域名未开启预取,1表示该域名已开启预取 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetUcdnDomainPrefetchEnableRequestSchema().dumps(d) - resp = self.invoke("GetUcdnDomainPrefetchEnable", d, **kwargs) - return apis.GetUcdnDomainPrefetchEnableResponseSchema().loads(resp) - - def get_ucdn_domain_request_num_v2(self, req=None, **kwargs): - """ GetUcdnDomainRequestNumV2 - 获取域名请求数 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **BeginTime** (int) - (Required) 查询的起始时间,格式为Unix Timestamp - - **EndTime** (int) - (Required) 查询的结束时间,格式为Unix Timestamp - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度, 3=按1分钟) - - **Areacode** (str) - 查询区域 cn代表国内 abroad代表海外,只支持国内 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **Response** - - - **RequestList** (list) - 见 **RequestInfo** 模型定义 - - **Response Model** - - **RequestInfo** - - - **CdnRequest** (float) - 返回值返回指定时间区间内的cdn收到的请求次数之和 - - **OriginRequest** (float) - 返回值返回指定时间区间内的cdn回源的请求次数之和 - - **Time** (int) - 带宽获取的时间点。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetUcdnDomainRequestNumV2RequestSchema().dumps(d) - resp = self.invoke("GetUcdnDomainRequestNumV2", d, **kwargs) - return apis.GetUcdnDomainRequestNumV2ResponseSchema().loads(resp) - - def get_ucdn_domain_traffic(self, req=None, **kwargs): - """ GetUcdnDomainTraffic - 获取加速域名流量使用信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Areacode** (str) - 查询流量区域 cn代表国内 abroad代表海外,默认全部区域。 - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。 - - **DomainId** (list) - 域名ID,创建加速域名时生成。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Response** - - - **TrafficSet** (list) - 见 **UcdnDomainTrafficSet** 模型定义 - - **Response Model** - - **UcdnDomainTrafficSet** - - - **Time** (int) - 流量获取的时间点,格式为Unix Timestamp - - **Value** (float) - 查询每日流量总值,单位:GB - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetUcdnDomainTrafficRequestSchema().dumps(d) - resp = self.invoke("GetUcdnDomainTraffic", d, **kwargs) - return apis.GetUcdnDomainTrafficResponseSchema().loads(resp) - - def get_ucdn_pass_bandwidth(self, req=None, **kwargs): - """ GetUcdnPassBandwidth - 获取回源带宽数据(cdn回客户源站部分) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Type** (int) - (Required) 时间粒度(0表示按照5分钟粒度,1表示按照1小时粒度,2表示按照一天的粒度) - - **Areacode** (str) - 查询带宽区域 cn代表国内 abroad代表海外,只支持国内 - - **BeginTime** (int) - 查询的起始时间,格式为Unix Timestamp。如果有EndTime,BeginTime必须赋值。如没有赋值,则返回缺少参 数错误,如果没有EndTime,BeginTime也可以不赋值,EndTime默认当前时间,BeginTime 默认前一天的当前时间。 - - **DomainId** (list) - 域名id,创建域名时生成的id。默认全部域名 - - **EndTime** (int) - 查询的结束时间,格式为Unix Timestamp。EndTime默认为当前时间,BeginTime默认为当前时间前一天时间。 - - **Response** - - - **BandwidthDetail** (list) - 见 **BandwidthInfoDetail** 模型定义 - - **Response Model** - - **BandwidthInfoDetail** - - - **Bandwidth** (float) - 返回值带宽值数据。 - - **Time** (int) - 宽获取的时间点。格式:时间戳 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetUcdnPassBandwidthRequestSchema().dumps(d) - resp = self.invoke("GetUcdnPassBandwidth", d, **kwargs) - return apis.GetUcdnPassBandwidthResponseSchema().loads(resp) - - def get_ucdn_traffic(self, req=None, **kwargs): - """ GetUcdnTraffic - 获取流量信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Response** - - - **TrafficSet** (list) - 见 **TrafficSet** 模型定义 - - **Response Model** - - **TrafficSet** - - - **Areacode** (str) - 购买流量的区域, cn: 国内; abroad: 国外 - - **TrafficLeft** (str) - Areacode区域内总剩余流量, 单位GB - - **TrafficTotal** (str) - Areacode区域内总购买流量, 单位GB - - **TrafficUsed** (str) - Areacode区域内总使用流量, 单位GB - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetUcdnTrafficRequestSchema().dumps(d) - resp = self.invoke("GetUcdnTraffic", d, **kwargs) - return apis.GetUcdnTrafficResponseSchema().loads(resp) - - def prefetch_new_ucdn_domain_cache(self, req=None, **kwargs): - """ PrefetchNewUcdnDomainCache - 提交预取任务 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **UrlList** (list) - (Required) 预热URL列表,n从自然数0开始。UrlList.n字段必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名 - - **Response** - - - **TaskId** (str) - 本次提交url对应的任务id - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.PrefetchNewUcdnDomainCacheRequestSchema().dumps(d) - resp = self.invoke("PrefetchNewUcdnDomainCache", d, **kwargs) - return apis.PrefetchNewUcdnDomainCacheResponseSchema().loads(resp) - - def refresh_new_ucdn_domain_cache(self, req=None, **kwargs): - """ RefreshNewUcdnDomainCache - 刷新缓存 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Type** (str) - (Required) 刷新类型,file代表文件刷新,dir 代表路径刷新 - - **UrlList** (list) - (Required) 刷新多个URL列表时,一次最多提交30个。必须以”http://域名/”开始。目录要以”/”结尾, 如刷新目录a下所有文件,格式为:http://abc.ucloud.cn/a/;如刷新文件目录a下面img.png文件, 格式为http://abc.ucloud.cn/a/img.png。请正确提交需要刷新的域名 - - **Response** - - - **TaskId** (str) - 本次提交url对应的任务id - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.RefreshNewUcdnDomainCacheRequestSchema().dumps(d) - resp = self.invoke("RefreshNewUcdnDomainCache", d, **kwargs) - return apis.RefreshNewUcdnDomainCacheResponseSchema().loads(resp) - - def switch_ucdn_charge_type(self, req=None, **kwargs): - """ SwitchUcdnChargeType - 切换账号计费方式 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **ChargeType** (str) - (Required) 计费方式。traffic代表按流量包计费,bandwidth按带宽付费 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.SwitchUcdnChargeTypeRequestSchema().dumps(d) - resp = self.invoke("SwitchUcdnChargeType", d, **kwargs) - return apis.SwitchUcdnChargeTypeResponseSchema().loads(resp) diff --git a/ucloud/services/ucdn/schemas/__init__.py b/ucloud/services/ucdn/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ucdn/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ucdn/schemas/apis.py b/ucloud/services/ucdn/schemas/apis.py deleted file mode 100644 index ab36d8c..0000000 --- a/ucloud/services/ucdn/schemas/apis.py +++ /dev/null @@ -1,534 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.ucdn.schemas import models - -""" UCDN API Schema -""" -""" -API: BatchDescribeNewUcdnDomain - -批量获取加速域名配置 -""" - - -class BatchDescribeNewUcdnDomainRequestSchema(schema.RequestSchema): - """ BatchDescribeNewUcdnDomain - 批量获取加速域名配置 - """ - - fields = { - "ChannelType": fields.Str(required=False, dump_to="ChannelType"), - "DomainId": fields.List(fields.Str()), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - } - - -class BatchDescribeNewUcdnDomainResponseSchema(schema.ResponseSchema): - """ BatchDescribeNewUcdnDomain - 批量获取加速域名配置 - """ - - fields = { - "Arrearage": fields.List( - fields.Str(), required=False, load_from="Arrearage" - ), - "ChargeType": fields.Int(required=False, load_from="ChargeType"), - "DomainSet": fields.List( - models.DomainInfoSchema(), required=False, load_from="DomainSet" - ), - "LastChargeType": fields.Int( - required=False, load_from="LastChargeType" - ), - "MaxDomainNum": fields.Int(required=False, load_from="MaxDomainNum"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - "Vip": fields.Str(required=False, load_from="Vip"), - } - - -""" -API: DescribeNewUcdnPrefetchCacheTask - -获取预取任务状态 -""" - - -class DescribeNewUcdnPrefetchCacheTaskRequestSchema(schema.RequestSchema): - """ DescribeNewUcdnPrefetchCacheTask - 获取预取任务状态 - """ - - fields = { - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Status": fields.Str(required=False, dump_to="Status"), - "TaskId": fields.List(fields.Str()), - } - - -class DescribeNewUcdnPrefetchCacheTaskResponseSchema(schema.ResponseSchema): - """ DescribeNewUcdnPrefetchCacheTask - 获取预取任务状态 - """ - - fields = { - "TaskList": fields.List( - models.TaskInfoSchema(), required=False, load_from="TaskList" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeNewUcdnRefreshCacheTask - -获取域名刷新任务状态 -""" - - -class DescribeNewUcdnRefreshCacheTaskRequestSchema(schema.RequestSchema): - """ DescribeNewUcdnRefreshCacheTask - 获取域名刷新任务状态 - """ - - fields = { - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Status": fields.Str(required=False, dump_to="Status"), - "TaskId": fields.List(fields.Str()), - } - - -class DescribeNewUcdnRefreshCacheTaskResponseSchema(schema.ResponseSchema): - """ DescribeNewUcdnRefreshCacheTask - 获取域名刷新任务状态 - """ - - fields = { - "TaskList": fields.List( - models.TaskInfoSchema(), required=False, load_from="TaskList" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: GetNewUcdnDomainBandwidth - -获取域名带宽数据 -""" - - -class GetNewUcdnDomainBandwidthRequestSchema(schema.RequestSchema): - """ GetNewUcdnDomainBandwidth - 获取域名带宽数据 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetNewUcdnDomainBandwidthResponseSchema(schema.ResponseSchema): - """ GetNewUcdnDomainBandwidth - 获取域名带宽数据 - """ - - fields = { - "BandwidthList": fields.List( - models.BandwidthInfoSchema(), - required=False, - load_from="BandwidthList", - ), - "Traffic": fields.Str(required=False, load_from="Traffic"), - } - - -""" -API: GetNewUcdnDomainHitRate - -获取域名命中率 -""" - - -class GetNewUcdnDomainHitRateRequestSchema(schema.RequestSchema): - """ GetNewUcdnDomainHitRate - 获取域名命中率 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetNewUcdnDomainHitRateResponseSchema(schema.ResponseSchema): - """ GetNewUcdnDomainHitRate - 获取域名命中率 - """ - - fields = { - "HitRateList": fields.List( - models.HitRateInfoSchema(), required=False, load_from="HitRateList" - ) - } - - -""" -API: GetNewUcdnDomainHttpCode - -获取域名状态码监控 -""" - - -class GetNewUcdnDomainHttpCodeRequestSchema(schema.RequestSchema): - """ GetNewUcdnDomainHttpCode - 获取域名状态码监控 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetNewUcdnDomainHttpCodeResponseSchema(schema.ResponseSchema): - """ GetNewUcdnDomainHttpCode - 获取域名状态码监控 - """ - - fields = { - "HttpCodeDetail": fields.List( - models.HttpCodeInfoSchema(), - required=False, - load_from="HttpCodeDetail", - ) - } - - -""" -API: GetNewUcdnDomainHttpCodeV2 - -获取域名详细状态码监控 -""" - - -class GetNewUcdnDomainHttpCodeV2RequestSchema(schema.RequestSchema): - """ GetNewUcdnDomainHttpCodeV2 - 获取域名详细状态码监控 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=True, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=True, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetNewUcdnDomainHttpCodeV2ResponseSchema(schema.ResponseSchema): - """ GetNewUcdnDomainHttpCodeV2 - 获取域名详细状态码监控 - """ - - fields = { - "HttpCodeV2Detail": fields.List( - models.HttpCodeV2DetailSchema(), - required=False, - load_from="HttpCodeV2Detail", - ) - } - - -""" -API: GetNewUcdnDomainRequestNum - -获取域名请求数 -""" - - -class GetNewUcdnDomainRequestNumRequestSchema(schema.RequestSchema): - """ GetNewUcdnDomainRequestNum - 获取域名请求数 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetNewUcdnDomainRequestNumResponseSchema(schema.ResponseSchema): - """ GetNewUcdnDomainRequestNum - 获取域名请求数 - """ - - fields = { - "RequestList": fields.List( - models.RequestInfoSchema(), required=False, load_from="RequestList" - ) - } - - -""" -API: GetUcdnDomainLog - -获取加速域名原始日志 -""" - - -class GetUcdnDomainLogRequestSchema(schema.RequestSchema): - """ GetUcdnDomainLog - 获取加速域名原始日志 - """ - - fields = { - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=False, dump_to="Type"), - } - - -class GetUcdnDomainLogResponseSchema(schema.ResponseSchema): - """ GetUcdnDomainLog - 获取加速域名原始日志 - """ - - fields = { - "LogSet": fields.List( - models.LogSetListSchema(), required=False, load_from="LogSet" - ) - } - - -""" -API: GetUcdnDomainPrefetchEnable - -获取域名预取开启状态 -""" - - -class GetUcdnDomainPrefetchEnableRequestSchema(schema.RequestSchema): - """ GetUcdnDomainPrefetchEnable - 获取域名预取开启状态 - """ - - fields = { - "DomainId": fields.Str(required=True, dump_to="DomainId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - } - - -class GetUcdnDomainPrefetchEnableResponseSchema(schema.ResponseSchema): - """ GetUcdnDomainPrefetchEnable - 获取域名预取开启状态 - """ - - fields = {"Enable": fields.Int(required=False, load_from="Enable")} - - -""" -API: GetUcdnDomainRequestNumV2 - -获取域名请求数 -""" - - -class GetUcdnDomainRequestNumV2RequestSchema(schema.RequestSchema): - """ GetUcdnDomainRequestNumV2 - 获取域名请求数 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=True, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=True, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetUcdnDomainRequestNumV2ResponseSchema(schema.ResponseSchema): - """ GetUcdnDomainRequestNumV2 - 获取域名请求数 - """ - - fields = { - "RequestList": fields.List( - models.RequestInfoSchema(), required=False, load_from="RequestList" - ) - } - - -""" -API: GetUcdnDomainTraffic - -获取加速域名流量使用信息 -""" - - -class GetUcdnDomainTrafficRequestSchema(schema.RequestSchema): - """ GetUcdnDomainTraffic - 获取加速域名流量使用信息 - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - } - - -class GetUcdnDomainTrafficResponseSchema(schema.ResponseSchema): - """ GetUcdnDomainTraffic - 获取加速域名流量使用信息 - """ - - fields = { - "TrafficSet": fields.List( - models.UcdnDomainTrafficSetSchema(), - required=False, - load_from="TrafficSet", - ) - } - - -""" -API: GetUcdnPassBandwidth - -获取回源带宽数据(cdn回客户源站部分) -""" - - -class GetUcdnPassBandwidthRequestSchema(schema.RequestSchema): - """ GetUcdnPassBandwidth - 获取回源带宽数据(cdn回客户源站部分) - """ - - fields = { - "Areacode": fields.Str(required=False, dump_to="Areacode"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DomainId": fields.List(fields.Str()), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Int(required=True, dump_to="Type"), - } - - -class GetUcdnPassBandwidthResponseSchema(schema.ResponseSchema): - """ GetUcdnPassBandwidth - 获取回源带宽数据(cdn回客户源站部分) - """ - - fields = { - "BandwidthDetail": fields.List( - models.BandwidthInfoDetailSchema(), - required=False, - load_from="BandwidthDetail", - ) - } - - -""" -API: GetUcdnTraffic - -获取流量信息 -""" - - -class GetUcdnTrafficRequestSchema(schema.RequestSchema): - """ GetUcdnTraffic - 获取流量信息 - """ - - fields = {"ProjectId": fields.Str(required=False, dump_to="ProjectId")} - - -class GetUcdnTrafficResponseSchema(schema.ResponseSchema): - """ GetUcdnTraffic - 获取流量信息 - """ - - fields = { - "TrafficSet": fields.List( - models.TrafficSetSchema(), required=False, load_from="TrafficSet" - ) - } - - -""" -API: PrefetchNewUcdnDomainCache - -提交预取任务 -""" - - -class PrefetchNewUcdnDomainCacheRequestSchema(schema.RequestSchema): - """ PrefetchNewUcdnDomainCache - 提交预取任务 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "UrlList": fields.List(fields.Str()), - } - - -class PrefetchNewUcdnDomainCacheResponseSchema(schema.ResponseSchema): - """ PrefetchNewUcdnDomainCache - 提交预取任务 - """ - - fields = {"TaskId": fields.Str(required=False, load_from="TaskId")} - - -""" -API: RefreshNewUcdnDomainCache - -刷新缓存 -""" - - -class RefreshNewUcdnDomainCacheRequestSchema(schema.RequestSchema): - """ RefreshNewUcdnDomainCache - 刷新缓存 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Str(required=True, dump_to="Type"), - "UrlList": fields.List(fields.Str()), - } - - -class RefreshNewUcdnDomainCacheResponseSchema(schema.ResponseSchema): - """ RefreshNewUcdnDomainCache - 刷新缓存 - """ - - fields = {"TaskId": fields.Str(required=False, load_from="TaskId")} - - -""" -API: SwitchUcdnChargeType - -切换账号计费方式 -""" - - -class SwitchUcdnChargeTypeRequestSchema(schema.RequestSchema): - """ SwitchUcdnChargeType - 切换账号计费方式 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - } - - -class SwitchUcdnChargeTypeResponseSchema(schema.ResponseSchema): - """ SwitchUcdnChargeType - 切换账号计费方式 - """ - - fields = {} diff --git a/ucloud/services/ucdn/schemas/models.py b/ucloud/services/ucdn/schemas/models.py deleted file mode 100644 index 3a3dad8..0000000 --- a/ucloud/services/ucdn/schemas/models.py +++ /dev/null @@ -1,266 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class CacheConfSchema(schema.ResponseSchema): - """ CacheConf - 缓存配置 - """ - - fields = { - "CacheBehavior": fields.Int(required=False, load_from="CacheBehavior"), - "CacheTTL": fields.Int(required=False, load_from="CacheTTL"), - "CacheUnit": fields.Str(required=False, load_from="CacheUnit"), - "Description": fields.Str(required=False, load_from="Description"), - "FollowOriginRule": fields.Int( - required=False, load_from="FollowOriginRule" - ), - "HttpCodePattern": fields.Str( - required=False, load_from="HttpCodePattern" - ), - "IgnoreQueryString": fields.Int( - required=False, load_from="IgnoreQueryString" - ), - "PathPattern": fields.Str(required=False, load_from="PathPattern"), - } - - -class AccessConfSchema(schema.ResponseSchema): - """ AccessConf - 访问控制 - """ - - fields = { - "IpBlacklist": fields.Str(required=False, load_from="IpBlacklist") - } - - -class DomainInfoSchema(schema.ResponseSchema): - """ DomainInfo - 域名配置 - """ - - fields = { - "AccessConf": AccessConfSchema(), - "AreaCode": fields.Str(required=False, load_from="AreaCode"), - "CacheConf": fields.List(CacheConfSchema()), - "CacheHost": fields.Str(required=False, load_from="CacheHost"), - "CdnProtocol": fields.Str(required=False, load_from="CdnProtocol"), - "CdnType": fields.Str(required=True, load_from="CdnType"), - "CertName": fields.Str(required=False, load_from="CertName"), - "Cname": fields.Str(required=False, load_from="Cname"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Domain": fields.Str(required=False, load_from="Domain"), - "DomainId": fields.Str(required=False, load_from="DomainId"), - "HttpsStatusAbroad": fields.Str( - required=False, load_from="HttpsStatusAbroad" - ), - "HttpsStatusCn": fields.Str(required=False, load_from="HttpsStatusCn"), - "NullRefer": fields.Bool(required=False, load_from="NullRefer"), - "OriginHost": fields.Str(required=False, load_from="OriginHost"), - "OriginIp": fields.List(fields.Str()), - "OriginPort": fields.Int(required=False, load_from="OriginPort"), - "OriginProtocol": fields.Str( - required=False, load_from="OriginProtocol" - ), - "ReferList": fields.List(fields.Str()), - "ReferStatus": fields.Bool(required=False, load_from="ReferStatus"), - "ReferType": fields.Int(required=False, load_from="ReferType"), - "Status": fields.Str(required=False, load_from="Status"), - "Tag": fields.Str(required=False, load_from="Tag"), - "TestUrl": fields.Str(required=True, load_from="TestUrl"), - "ValidTime": fields.Int(required=False, load_from="ValidTime"), - } - - -class UrlProgressInfoSchema(schema.ResponseSchema): - """ UrlProgressInfo - UrlProgressInfo - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "FinishTime": fields.Int(required=False, load_from="FinishTime"), - "Progress": fields.Int(required=False, load_from="Progress"), - "Status": fields.Str(required=False, load_from="Status"), - "Url": fields.Str(required=False, load_from="Url"), - } - - -class TaskInfoSchema(schema.ResponseSchema): - """ TaskInfo - 预取刷新的任务信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Status": fields.Str(required=False, load_from="Status"), - "TaskId": fields.Str(required=False, load_from="TaskId"), - "Type": fields.Str(required=False, load_from="Type"), - "UrlLists": fields.List(UrlProgressInfoSchema()), - } - - -class BandwidthInfoSchema(schema.ResponseSchema): - """ BandwidthInfo - BandwidthInfo - """ - - fields = { - "CdnBandwidth": fields.Str(required=False, load_from="CdnBandwidth"), - "Time": fields.Int(required=False, load_from="Time"), - } - - -class HitRateInfoSchema(schema.ResponseSchema): - """ HitRateInfo - HitRateInfo - """ - - fields = { - "FlowHitRate": fields.Float(required=False, load_from="FlowHitRate"), - "RequestHitRate": fields.Float( - required=False, load_from="RequestHitRate" - ), - "Time": fields.Int(required=False, load_from="Time"), - } - - -class HttpCodeInfoSchema(schema.ResponseSchema): - """ HttpCodeInfo - HttpCodeInfo - """ - - fields = { - "HttpFiveXX": fields.Int(required=False, load_from="HttpFiveXX"), - "HttpFourXX": fields.Int(required=False, load_from="HttpFourXX"), - "HttpOneXX": fields.Int(required=False, load_from="HttpOneXX"), - "HttpThreeXX": fields.Int(required=False, load_from="HttpThreeXX"), - "HttpTwoXX": fields.Int(required=False, load_from="HttpTwoXX"), - "Time": fields.Int(required=False, load_from="Time"), - } - - -class HttpCodeV2DetailSchema(schema.ResponseSchema): - """ HttpCodeV2Detail - HTTP状态码详细信息 - """ - - fields = { - "Http100": fields.Int(required=False, load_from="Http100"), - "Http101": fields.Int(required=False, load_from="Http101"), - "Http102": fields.Int(required=False, load_from="Http102"), - "Http200": fields.Int(required=False, load_from="Http200"), - "Http201": fields.Int(required=False, load_from="Http201"), - "Http202": fields.Int(required=False, load_from="Http202"), - "Http203": fields.Int(required=False, load_from="Http203"), - "Http204": fields.Int(required=False, load_from="Http204"), - "Http205": fields.Int(required=False, load_from="Http205"), - "Http206": fields.Int(required=False, load_from="Http206"), - "Http207": fields.Int(required=False, load_from="Http207"), - "Http300": fields.Int(required=False, load_from="Http300"), - "Http301": fields.Int(required=False, load_from="Http301"), - "Http302": fields.Int(required=False, load_from="Http302"), - "Http303": fields.Int(required=False, load_from="Http303"), - "Http304": fields.Int(required=False, load_from="Http304"), - "Http305": fields.Int(required=False, load_from="Http305"), - "Http306": fields.Int(required=False, load_from="Http306"), - "Http307": fields.Int(required=False, load_from="Http307"), - "Http400": fields.Int(required=False, load_from="Http400"), - "Http401": fields.Int(required=False, load_from="Http401"), - "Http402": fields.Int(required=False, load_from="Http402"), - "Http403": fields.Int(required=False, load_from="Http403"), - "Http404": fields.Int(required=False, load_from="Http404"), - "Http405": fields.Int(required=False, load_from="Http405"), - "Http406": fields.Int(required=False, load_from="Http406"), - "Http407": fields.Int(required=False, load_from="Http407"), - "Http408": fields.Int(required=False, load_from="Http408"), - "Http409": fields.Int(required=False, load_from="Http409"), - "Http410": fields.Int(required=False, load_from="Http410"), - "Http411": fields.Int(required=False, load_from="Http411"), - "Http412": fields.Int(required=False, load_from="Http412"), - "Http413": fields.Int(required=False, load_from="Http413"), - "Http414": fields.Int(required=False, load_from="Http414"), - "Http415": fields.Int(required=False, load_from="Http415"), - "Http416": fields.Int(required=False, load_from="Http416"), - "Http417": fields.Int(required=False, load_from="Http417"), - "Http418": fields.Int(required=False, load_from="Http418"), - "Http421": fields.Int(required=False, load_from="Http421"), - "Http422": fields.Int(required=False, load_from="Http422"), - "Http423": fields.Int(required=False, load_from="Http423"), - "Http424": fields.Int(required=False, load_from="Http424"), - "Http425": fields.Int(required=False, load_from="Http425"), - "Http426": fields.Int(required=False, load_from="Http426"), - "Http449": fields.Int(required=False, load_from="Http449"), - "Http451": fields.Int(required=False, load_from="Http451"), - "Http500": fields.Int(required=False, load_from="Http500"), - "Http501": fields.Int(required=False, load_from="Http501"), - "Http502": fields.Int(required=False, load_from="Http502"), - "Http503": fields.Int(required=False, load_from="Http503"), - "Http504": fields.Int(required=False, load_from="Http504"), - "Http505": fields.Int(required=False, load_from="Http505"), - "Http506": fields.Int(required=False, load_from="Http506"), - "Http507": fields.Int(required=False, load_from="Http507"), - "Http509": fields.Int(required=False, load_from="Http509"), - "Http510": fields.Int(required=False, load_from="Http510"), - "Time": fields.Int(required=True, load_from="Time"), - } - - -class RequestInfoSchema(schema.ResponseSchema): - """ RequestInfo - RequestInfo - """ - - fields = { - "CdnRequest": fields.Float(required=False, load_from="CdnRequest"), - "OriginRequest": fields.Float( - required=False, load_from="OriginRequest" - ), - "Time": fields.Int(required=False, load_from="Time"), - } - - -class LogSetInfoSchema(schema.ResponseSchema): - """ LogSetInfo - 日志信息 - """ - - fields = { - "AbroadLog": fields.List(fields.Str()), - "CnLog": fields.List(fields.Str()), - "Time": fields.Int(required=False, load_from="Time"), - } - - -class LogSetListSchema(schema.ResponseSchema): - """ LogSetList - 日志信息列表 - """ - - fields = { - "Domain": fields.Str(required=False, load_from="Domain"), - "Logs": fields.List(LogSetInfoSchema()), - } - - -class UcdnDomainTrafficSetSchema(schema.ResponseSchema): - """ UcdnDomainTrafficSet - GetUcdnDomainTraffic - """ - - fields = { - "Time": fields.Int(required=False, load_from="Time"), - "Value": fields.Float(required=False, load_from="Value"), - } - - -class BandwidthInfoDetailSchema(schema.ResponseSchema): - """ BandwidthInfoDetail - 带宽值信息模型(时间-带宽) - """ - - fields = { - "Bandwidth": fields.Float(required=True, load_from="Bandwidth"), - "Time": fields.Int(required=True, load_from="Time"), - } - - -class TrafficSetSchema(schema.ResponseSchema): - """ TrafficSet - GetUcdnTraffic - """ - - fields = { - "Areacode": fields.Str(required=False, load_from="Areacode"), - "TrafficLeft": fields.Str(required=False, load_from="TrafficLeft"), - "TrafficTotal": fields.Str(required=False, load_from="TrafficTotal"), - "TrafficUsed": fields.Str(required=False, load_from="TrafficUsed"), - } diff --git a/ucloud/services/ucloudstack/__init__.py b/ucloud/services/ucloudstack/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ucloudstack/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ucloudstack/client.py b/ucloud/services/ucloudstack/client.py deleted file mode 100644 index ac3591d..0000000 --- a/ucloud/services/ucloudstack/client.py +++ /dev/null @@ -1,2615 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.ucloudstack.schemas import apis - - -class UCloudStackClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UCloudStackClient, self).__init__( - config, transport, middleware, logger - ) - - def allocate_eip(self, req=None, **kwargs): - """ AllocateEIP - 申请外网IP - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **Bandwidth** (int) - (Required) 带宽,默认值1,默认范围1~100 - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **Name** (str) - (Required) 名称 - - **OperatorName** (str) - (Required) 线路。目前支持Bgp - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **EIPID** (str) - 申请的EIP的ID - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.AllocateEIPRequestSchema().dumps(d) - resp = self.invoke("AllocateEIP", d, **kwargs) - return apis.AllocateEIPResponseSchema().loads(resp) - - def attach_disk(self, req=None, **kwargs): - """ AttachDisk - 绑定硬盘 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **DiskID** (str) - (Required) 硬盘ID - - **ResourceID** (str) - (Required) 绑定的资源ID - - **ResourceType** (str) - (Required) 绑定的资源类型,枚举值:VM,标识虚拟机 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.AttachDiskRequestSchema().dumps(d) - resp = self.invoke("AttachDisk", d, **kwargs) - return apis.AttachDiskResponseSchema().loads(resp) - - def bind_alarm_template(self, req=None, **kwargs): - """ BindAlarmTemplate - 绑定告警模板 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **AlarmTemplateID** (str) - (Required) 告警模板ID - - **ResourceIDs** (list) - (Required) 【数组】告警模板ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性IP - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.BindAlarmTemplateRequestSchema().dumps(d) - resp = self.invoke("BindAlarmTemplate", d, **kwargs) - return apis.BindAlarmTemplateResponseSchema().loads(resp) - - def bind_eip(self, req=None, **kwargs): - """ BindEIP - 绑定UCoudStack外网IP - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 - - **EIPID** (str) - (Required) 外网IP的ID - - **ResourceID** (str) - (Required) 资源ID - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.BindEIPRequestSchema().dumps(d) - resp = self.invoke("BindEIP", d, **kwargs) - return apis.BindEIPResponseSchema().loads(resp) - - def bind_physical_ip(self, req=None, **kwargs): - """ BindPhysicalIP - 绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **PhysicalIPID** (str) - (Required) 物理IP的ID - - **ResourceID** (str) - (Required) 资源ID - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机 - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.BindPhysicalIPRequestSchema().dumps(d) - resp = self.invoke("BindPhysicalIP", d, **kwargs) - return apis.BindPhysicalIPResponseSchema().loads(resp) - - def bind_security_group(self, req=None, **kwargs): - """ BindSecurityGroup - 绑定安全组 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **ResourceID** (str) - (Required) 绑定的资源ID。调用方式举例:ResourceID=“one-id”。 - - **SGID** (str) - (Required) 安全组ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **NICID** (str) - 网卡ID - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.BindSecurityGroupRequestSchema().dumps(d) - resp = self.invoke("BindSecurityGroup", d, **kwargs) - return apis.BindSecurityGroupResponseSchema().loads(resp) - - def clone_disk(self, req=None, **kwargs): - """ CloneDisk - 克隆硬盘 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **Name** (str) - (Required) 名称 - - **SrcID** (str) - (Required) 源硬盘ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **DiskID** (str) - 克隆出的硬盘ID - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CloneDiskRequestSchema().dumps(d) - resp = self.invoke("CloneDisk", d, **kwargs) - return apis.CloneDiskResponseSchema().loads(resp) - - def create_certificate(self, req=None, **kwargs): - """ CreateCertificate - 创建证书 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Certificate** (str) - (Required) 证书内容 - - **CertificateType** (str) - (Required) 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。只有在双向认证的时候才需要CA证书 - - **Name** (str) - (Required) 证书名称 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **PrivateKey** (str) - 私钥内容,服务器证书必传,CA证书不用传递 - - **Remark** (str) - 证书描述 - - **Response** - - - **CertificateID** (str) - 证书ID - - **Message** (str) - 错误描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateCertificateRequestSchema().dumps(d) - resp = self.invoke("CreateCertificate", d, **kwargs) - return apis.CreateCertificateResponseSchema().loads(resp) - - def create_custom_image(self, req=None, **kwargs): - """ CreateCustomImage - 创建自制镜像 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ImageName** (str) - (Required) 镜像名称 - - **VMID** (str) - (Required) 虚拟机ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **ImageDescription** (str) - 镜像描述。 - - **Response** - - - **ImageID** (str) - 创建的自制镜像ID - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateCustomImageRequestSchema().dumps(d) - resp = self.invoke("CreateCustomImage", d, **kwargs) - return apis.CreateCustomImageResponseSchema().loads(resp) - - def create_disk(self, req=None, **kwargs): - """ CreateDisk - 创建硬盘 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **DiskSpace** (int) - (Required) 磁盘大小 - - **Name** (str) - (Required) 磁盘名称 - - **SetType** (str) - (Required) 磁盘类型。例如:Normal,SSD - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **DiskID** (str) - 创建的磁盘ID - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateDiskRequestSchema().dumps(d) - resp = self.invoke("CreateDisk", d, **kwargs) - return apis.CreateDiskResponseSchema().loads(resp) - - def create_lb(self, req=None, **kwargs): - """ CreateLB - 创建负载均衡 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **LBType** (str) - (Required) 枚举值。LAN:内网,WAN:外网 - - **Name** (str) - (Required) 名称。 - - **SubnetID** (str) - (Required) LB 实例所在的子网 ID 。 - - **VMType** (str) - (Required) 运行负载均衡实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口) - - **VPCID** (str) - (Required) LB实例所在的 VPC ID 。 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **EIPID** (str) - 外网IP的ID,创建外网LB时为必需 - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Remark** (str) - 描述。 - - **SGID** (str) - 安全组ID,创建外网LB时为必需 - - **Response** - - - **LBID** (str) - 返回创建的负载均衡ID - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateLBRequestSchema().dumps(d) - resp = self.invoke("CreateLB", d, **kwargs) - return apis.CreateLBResponseSchema().loads(resp) - - def create_natgw(self, req=None, **kwargs): - """ CreateNATGW - 创建NAT网关 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **EIPID** (str) - (Required) 外网IP的ID - - **Name** (str) - (Required) 名称。 - - **SGID** (str) - (Required) 安全组ID - - **SubnetID** (str) - (Required) NAT网关实例所在的子网 ID - - **VMType** (str) - (Required) 运行NAT网关实例的主机机型。枚举值:如 Normal ,表示普通机型; SSD,表示 SSD 机型。(机型由平台管理员修改和指定,可参考获取主机机型接口) - - **VPCID** (str) - (Required) NAT网关实例所在的 VPC ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Remark** (str) - 描述 - - **Response** - - - **Message** (str) - 返回信息描述。 - - **NATGWID** (str) - 返回创建的NAT网关ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateNATGWRequestSchema().dumps(d) - resp = self.invoke("CreateNATGW", d, **kwargs) - return apis.CreateNATGWResponseSchema().loads(resp) - - def create_natgw_rule(self, req=None, **kwargs): - """ CreateNATGWRule - 添加NAT网关白名单 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **BindResourceID** (str) - (Required) 绑定的虚拟机资源ID - - **NATGWID** (str) - (Required) NAT网关ID - - **NATGWType** (str) - (Required) NAT的类型。枚举值:SNAT,DNAT - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - **RuleID** (str) - 白名单ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateNATGWRuleRequestSchema().dumps(d) - resp = self.invoke("CreateNATGWRule", d, **kwargs) - return apis.CreateNATGWRuleResponseSchema().loads(resp) - - def create_physical_ip(self, req=None, **kwargs): - """ CreatePhysicalIP - 创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **Name** (str) - (Required) 物理IP名称,限制字符长度30 - - **OperatorName** (str) - (Required) 物理IP线路 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Remark** (str) - 描述 - - **Response** - - - **Message** (str) - 返回信息描述 - - **PhysicalIPID** (str) - 返回创建的物理IP的ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreatePhysicalIPRequestSchema().dumps(d) - resp = self.invoke("CreatePhysicalIP", d, **kwargs) - return apis.CreatePhysicalIPResponseSchema().loads(resp) - - def create_rs(self, req=None, **kwargs): - """ CreateRS - 为负载均衡的 VServer 添加后端服务节点。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **BindResourceID** (str) - (Required) 服务节点的资源 ID ,仅支持添加与 LB 相同 VPC 的虚拟机资源 - - **LBID** (str) - (Required) 负载均衡ID - - **Port** (int) - (Required) 服务节点暴露的服务端口号 - - **VSID** (str) - (Required) VServer的ID - - **Weight** (int) - (Required) 服务节点的权重 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - **RSID** (str) - 返回创建的RSID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateRSRequestSchema().dumps(d) - resp = self.invoke("CreateRS", d, **kwargs) - return apis.CreateRSResponseSchema().loads(resp) - - def create_security_group(self, req=None, **kwargs): - """ CreateSecurityGroup - 创建安全组 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Name** (str) - (Required) 名称; - - **Rule** (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Remark** (str) - 描述; - - **Response** - - - **Message** (str) - 返回信息描述; - - **SGID** (str) - 创建的安全组ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateSecurityGroupRequestSchema().dumps(d) - resp = self.invoke("CreateSecurityGroup", d, **kwargs) - return apis.CreateSecurityGroupResponseSchema().loads(resp) - - def create_security_group_rule(self, req=None, **kwargs): - """ CreateSecurityGroupRule - 创建安全组规则 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Rules** (list) - (Required) 【数组】安全组规则。输入有效的规则,调用方式举例:Rule.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rule.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” - - **SGID** (str) - (Required) 安全组ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述; - - **SGRuleID** (str) - 创建的安全组规则ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateSecurityGroupRuleRequestSchema().dumps(d) - resp = self.invoke("CreateSecurityGroupRule", d, **kwargs) - return apis.CreateSecurityGroupRuleResponseSchema().loads(resp) - - def create_snapshot(self, req=None, **kwargs): - """ CreateSnapshot - 创建硬盘快照 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **DiskID** (str) - (Required) 硬盘ID,输入“有效”状态的ID - - **Name** (str) - (Required) 快照名称,限制字符长度30 - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Remark** (str) - 描述,限制字符长度100 - - **Response** - - - **Message** (str) - 返回信息描述 - - **SnapshotID** (str) - 创建的快照ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateSnapshotRequestSchema().dumps(d) - resp = self.invoke("CreateSnapshot", d, **kwargs) - return apis.CreateSnapshotResponseSchema().loads(resp) - - def create_subnet(self, req=None, **kwargs): - """ CreateSubnet - 创建子网 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Name** (str) - (Required) 名称; - - **Network** (str) - (Required) 网段。列如:10.0.0.0/16; - - **VPCID** (str) - (Required) 所属VPCID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Remark** (str) - 描述; - - **Response** - - - **Message** (str) - 返回信息描述; - - **SubnetID** (str) - 创建Subnet的ID; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateSubnetRequestSchema().dumps(d) - resp = self.invoke("CreateSubnet", d, **kwargs) - return apis.CreateSubnetResponseSchema().loads(resp) - - def create_user(self, req=None, **kwargs): - """ CreateUser - 管理员添加账号 - - **Request** - - - **PassWord** (str) - (Required) 账号密码。 - - **UserEmail** (str) - (Required) 账号邮箱。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - **UserID** (int) - 账户ID - - """ - d = {} - req and d.update(req) - d = apis.CreateUserRequestSchema().dumps(d) - resp = self.invoke("CreateUser", d, **kwargs) - return apis.CreateUserResponseSchema().loads(resp) - - def create_vm_instance(self, req=None, **kwargs): - """ CreateVMInstance - 创建虚拟机 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **BootDiskSetType** (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD; - - **CPU** (int) - (Required) CPU个数,如1,2,4,8,16,32,64等。 - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **DataDiskSetType** (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD; - - **ImageID** (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。 - - **Memory** (int) - (Required) 内存容量,如1024,2048,4096,8192,16384,32768,65535等。 - - **Name** (str) - (Required) 虚拟机名称。可输入如:myVM。名称只能包含中英文、数字以及- _ .且1-30个字符。 - - **Password** (str) - (Required) 密码。可输入如:ucloud.cn。密码长度限6-30个字符;需要同时包含两项或以上(大写字母/小写字母/数字/特殊符号);windows不能包含用户名(administrator)中超过2个连续字符的部分。 - - **SubnetID** (str) - (Required) 子网 ID。 - - **VMType** (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD; - - **VPCID** (str) - (Required) VPC ID。 - - **WANSGID** (str) - (Required) 外网安全组 ID。输入“有效”状态的安全组的ID。 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Bandwidth** (str) - 带宽 - - **DataDiskSpace** (int) - 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 - - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. - - **IPVersion** (str) - 外网IP版本,默认IPv4 - - **InternalIP** (str) - 指定内网IP。输入有效的指定内网 IP。默认为系统自动分配内网 IP。 - - **InternetIP** (str) - 指定外网IP - - **LANSGID** (str) - 内网安全组 ID。输入“有效”状态的安全组的ID。 - - **OperatorName** (str) - 线路 - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **DiskID** (str) - 返回创建数据盘的 ID - - **EIPID** (str) - 返回创建外网IP的 ID - - **Message** (str) - 返回信息描述。 - - **VMID** (str) - 返回创建虚拟机的 ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateVMInstanceRequestSchema().dumps(d) - resp = self.invoke("CreateVMInstance", d, **kwargs) - return apis.CreateVMInstanceResponseSchema().loads(resp) - - def create_vpc(self, req=None, **kwargs): - """ CreateVPC - 创建VPC - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Name** (str) - (Required) 名称; - - **Network** (str) - (Required) 网段。例如:10.0.0.0/16; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Remark** (str) - 描述; - - **Response** - - - **Message** (str) - 返回信息描述; - - **VPCID** (str) - 创建的VPCID; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateVPCRequestSchema().dumps(d) - resp = self.invoke("CreateVPC", d, **kwargs) - return apis.CreateVPCResponseSchema().loads(resp) - - def create_vs(self, req=None, **kwargs): - """ CreateVS - 创建负载均衡VServer - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **HealthcheckType** (str) - (Required) 健康检查类型,枚举值,Port:端口,Path:域名。TCP和UDP协议只支持Port类型。 - - **LBID** (str) - (Required) 负载均衡ID - - **Port** (int) - (Required) VServer 的监听端口。端口范围为 1~65535 ,其中 323、9102、9103、9104、9105、60909、60910 被系统占用。 - - **Protocol** (str) - (Required) VServer 的监听协议。枚举值:支持 TCP、UDP、HTTP、HTTPS 四种协议转发。 - - **Scheduler** (str) - (Required) 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 - - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 - - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。 - - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 - - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 - - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 - - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 - - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS时有效。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - **VSID** (str) - 返回创建的VSID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateVSRequestSchema().dumps(d) - resp = self.invoke("CreateVS", d, **kwargs) - return apis.CreateVSResponseSchema().loads(resp) - - def create_vs_policy(self, req=None, **kwargs): - """ CreateVSPolicy - 创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **RSIDs** (list) - (Required) 【数组】内容转发规则应用的服务节点的 ID,来源于 VServer 中添加的服务节点。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 - - **VSID** (str) - (Required) VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。 - - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。域名和路径至少需要指定一项,且域名和路径的组合在一个 VServer 中必须唯一。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - **PolicyID** (str) - 返回创建的内容转发规则ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.CreateVSPolicyRequestSchema().dumps(d) - resp = self.invoke("CreateVSPolicy", d, **kwargs) - return apis.CreateVSPolicyResponseSchema().loads(resp) - - def delete_certificate(self, req=None, **kwargs): - """ DeleteCertificate - 删除证书 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **CertificateID** (str) - (Required) 证书ID - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteCertificateRequestSchema().dumps(d) - resp = self.invoke("DeleteCertificate", d, **kwargs) - return apis.DeleteCertificateResponseSchema().loads(resp) - - def delete_custom_image(self, req=None, **kwargs): - """ DeleteCustomImage - 删除自制镜像 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ImageID** (str) - (Required) 自制镜像ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteCustomImageRequestSchema().dumps(d) - resp = self.invoke("DeleteCustomImage", d, **kwargs) - return apis.DeleteCustomImageResponseSchema().loads(resp) - - def delete_disk(self, req=None, **kwargs): - """ DeleteDisk - 删除硬盘 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **DiskID** (str) - (Required) 被删除的硬盘ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteDiskRequestSchema().dumps(d) - resp = self.invoke("DeleteDisk", d, **kwargs) - return apis.DeleteDiskResponseSchema().loads(resp) - - def delete_lb(self, req=None, **kwargs): - """ DeleteLB - 删除负载均衡 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteLBRequestSchema().dumps(d) - resp = self.invoke("DeleteLB", d, **kwargs) - return apis.DeleteLBResponseSchema().loads(resp) - - def delete_natgw(self, req=None, **kwargs): - """ DeleteNATGW - 删除NAT网关 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **NATGWID** (str) - (Required) NAT网关ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteNATGWRequestSchema().dumps(d) - resp = self.invoke("DeleteNATGW", d, **kwargs) - return apis.DeleteNATGWResponseSchema().loads(resp) - - def delete_natgw_rule(self, req=None, **kwargs): - """ DeleteNATGWRule - 删除NAT网关白名单 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **NATGWID** (str) - (Required) nat网关ID - - **RuleID** (str) - (Required) 白名单ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteNATGWRuleRequestSchema().dumps(d) - resp = self.invoke("DeleteNATGWRule", d, **kwargs) - return apis.DeleteNATGWRuleResponseSchema().loads(resp) - - def delete_physical_ip(self, req=None, **kwargs): - """ DeletePhysicalIP - 删除物理IP - - **Request** - - - **Region** (str) - (Config) 地域。 - - **PhysicalIPID** (str) - (Required) 物理IP的ID - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回状态描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeletePhysicalIPRequestSchema().dumps(d) - resp = self.invoke("DeletePhysicalIP", d, **kwargs) - return apis.DeletePhysicalIPResponseSchema().loads(resp) - - def delete_rs(self, req=None, **kwargs): - """ DeleteRS - 移除负载均衡的单个服务节点 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **RSID** (str) - (Required) RServer的ID - - **VSID** (str) - (Required) VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteRSRequestSchema().dumps(d) - resp = self.invoke("DeleteRS", d, **kwargs) - return apis.DeleteRSResponseSchema().loads(resp) - - def delete_security_group(self, req=None, **kwargs): - """ DeleteSecurityGroup - 删除安全组 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **SGID** (str) - (Required) 安全组ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteSecurityGroupRequestSchema().dumps(d) - resp = self.invoke("DeleteSecurityGroup", d, **kwargs) - return apis.DeleteSecurityGroupResponseSchema().loads(resp) - - def delete_security_group_rule(self, req=None, **kwargs): - """ DeleteSecurityGroupRule - 删除安全组规则 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **SGID** (str) - (Required) 安全组ID - - **SGRuleID** (str) - (Required) 安全组规则ID - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回信息描述; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteSecurityGroupRuleRequestSchema().dumps(d) - resp = self.invoke("DeleteSecurityGroupRule", d, **kwargs) - return apis.DeleteSecurityGroupRuleResponseSchema().loads(resp) - - def delete_snapshot(self, req=None, **kwargs): - """ DeleteSnapshot - 删除快照,仅支持状态为正常的快照进行删除操作。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **SnapshotID** (str) - (Required) 快照ID - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteSnapshotRequestSchema().dumps(d) - resp = self.invoke("DeleteSnapshot", d, **kwargs) - return apis.DeleteSnapshotResponseSchema().loads(resp) - - def delete_subnet(self, req=None, **kwargs): - """ DeleteSubnet - 删除子网 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **SubnetID** (str) - (Required) SubnetID - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回信息描述; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteSubnetRequestSchema().dumps(d) - resp = self.invoke("DeleteSubnet", d, **kwargs) - return apis.DeleteSubnetResponseSchema().loads(resp) - - def delete_vm_instance(self, req=None, **kwargs): - """ DeleteVMInstance - 删除虚拟机 - - **Request** - - - **Region** (str) - (Config) 地域。 枚举值:cn,表示中国; - - **VMID** (str) - (Required) 虚拟机 ID。输入有效的虚拟机 ID。 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteVMInstanceRequestSchema().dumps(d) - resp = self.invoke("DeleteVMInstance", d, **kwargs) - return apis.DeleteVMInstanceResponseSchema().loads(resp) - - def delete_vpc(self, req=None, **kwargs): - """ DeleteVPC - 删除VPC - - **Request** - - - **Region** (str) - (Config) 地域。 - - **VPCID** (str) - (Required) ID - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回信息描述; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteVPCRequestSchema().dumps(d) - resp = self.invoke("DeleteVPC", d, **kwargs) - return apis.DeleteVPCResponseSchema().loads(resp) - - def delete_vs(self, req=None, **kwargs): - """ DeleteVS - 删除VServer - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID - - **VSID** (str) - (Required) 负载均衡VServer监听器ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteVSRequestSchema().dumps(d) - resp = self.invoke("DeleteVS", d, **kwargs) - return apis.DeleteVSResponseSchema().loads(resp) - - def delete_vs_policy(self, req=None, **kwargs): - """ DeleteVSPolicy - 删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **PolicyID** (str) - (Required) 内容转发规则ID - - **VSID** (str) - (Required) VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DeleteVSPolicyRequestSchema().dumps(d) - resp = self.invoke("DeleteVSPolicy", d, **kwargs) - return apis.DeleteVSPolicyResponseSchema().loads(resp) - - def describe_certificate(self, req=None, **kwargs): - """ DescribeCertificate - 查询证书 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **CertificateIDs** (list) - 证书ID列表 - - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"]。分别表示服务器证书和CA证书。 - - **Limit** (int) - 返回数据长度,默认为20,最大100 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **Response** - - - **Infos** (list) - 见 **CertificateInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **TotalCount** (int) - 证书总个数 - - **Response Model** - - **BindVSInfo** - - - **LBID** (str) - LB ID - - **LBName** (str) - LB名称 - - **Port** (int) - VS的端口 - - **Protocol** (str) - VS的协议 - - **VSID** (str) - VS ID - - **CertificateInfo** - - - **CertificateContent** (str) - 证书内容 - - **CertificateID** (str) - 证书ID - - **CertificateType** (str) - 证书类型,枚举值["ServerCrt","CACrt"] - - **CommonName** (str) - 主域名 - - **CreateTime** (int) - 创建时间(平台创建时间) - - **ExpireTime** (int) - 证书内容的过期时间 - - **Fingerprint** (str) - 证书指纹 - - **Name** (str) - 证书名 - - **Privatekey** (str) - 私钥内容 - - **Region** (str) - 地域 - - **Remark** (str) - 证书描述 - - **SubjectAlternativeNames** (list) - 备域名 - - **VSInfos** (list) - 见 **BindVSInfo** 模型定义 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeCertificateRequestSchema().dumps(d) - resp = self.invoke("DescribeCertificate", d, **kwargs) - return apis.DescribeCertificateResponseSchema().loads(resp) - - def describe_disk(self, req=None, **kwargs): - """ DescribeDisk - 获取硬盘信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **DiskIDs** (list) - 【数组】磁盘的 ID。输入有效的 ID。调用方式举例:DiskIDs.0=“one-id”、DiskIDs.1=“two-id”。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **Response** - - - **Infos** (list) - 见 **DiskInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回磁盘总个数。 - - **Response Model** - - **DiskInfo** - - - **AttachResourceID** (str) - 绑定资源ID - - **ChargeType** (str) - 硬盘计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **CreateTime** (int) - 创建时间。时间戳 - - **DiskID** (str) - 硬盘ID - - **DiskStatus** (str) - 硬盘状态。Creating:创建中,BeingCloned:正在被克隆中,Unbound:已解绑,Unbounding:解绑中,Bounding:绑定中,Bound:已绑定,Upgrading:升级中,Deleting:删除中,Deleted:已删除,Releasing:销毁中,Released:已销毁 - - **ExpireTime** (int) - 过期时间。时间戳 - - **Name** (str) - 名称 - - **Region** (str) - 地域 - - **Remark** (str) - 备注 - - **SetType** (str) - 磁盘类型。例如:Normal,SSD - - **Size** (int) - 大小。单位GB - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeDiskRequestSchema().dumps(d) - resp = self.invoke("DescribeDisk", d, **kwargs) - return apis.DescribeDiskResponseSchema().loads(resp) - - def describe_eip(self, req=None, **kwargs): - """ DescribeEIP - 获取外网IP的信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **EIPIDs** (list) - 【数组】外网的 ID。输入有效的 ID。调用方式举例:EIPIDs.0=“one-id”、EIPIDs.1=“two-id” - - **Limit** (str) - 返回数据长度,默认为20,最大100。 - - **Offset** (str) - 列表起始位置偏移量,默认为0。 - - **Response** - - - **Infos** (list) - 见 **EIPInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **Totalcount** (int) - 返回现有外网IP总数 - - **Response Model** - - **EIPInfo** - - - **Bandwidth** (int) - 带宽大小 - - **BindResourceID** (str) - 绑定资源ID - - **BindResourceType** (str) - 绑定资源类型 - - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **CreateTime** (int) - 创建时间。时间戳 - - **EIPID** (str) - ID - - **ExpireTime** (int) - 过期时间。时间戳 - - **IP** (str) - 外网IP - - **Name** (str) - 名称 - - **OperatorName** (str) - 线路 - - **Region** (str) - 地域 - - **Remark** (str) - 备注 - - **Status** (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁,BandwidthChanging:带宽修改中 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeEIPRequestSchema().dumps(d) - resp = self.invoke("DescribeEIP", d, **kwargs) - return apis.DescribeEIPResponseSchema().loads(resp) - - def describe_image(self, req=None, **kwargs): - """ DescribeImage - 获取镜像信息,包括默认镜像和自制镜像。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **ImageIDs** (list) - 【数组】镜像的 ID。输入有效的 ID。调用方式举例:ImageIDs.0=“one-id”、ImageIDs.1=“two-id”。 - - **ImageType** (str) - 镜像类型。枚举值:Base(基础镜像,平台默认提供的镜像),Custom(自制镜像,通过虚拟机导出的镜像) 。若该值为空,默认查询所有镜像。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **Response** - - - **Action** (str) - 操作名称 - - **Infos** (list) - 见 **ImageInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **RetCode** (int) - 返回码 - - **TotalCount** (int) - 返回镜像的总个数。 - - **Response Model** - - **ImageInfo** - - - **CreateTime** (int) - 创建时间。时间戳。 - - **ImageID** (str) - 镜像ID - - **ImageStatus** (str) - 镜像状态。枚举类型:Making(创建中),Available(可用),Unavailable(不可用),Terminating(销毁中),Used(被使用中),Deleting(删除中),Deleted(已删除), Uploading(导入中) - - **ImageType** (str) - 镜像类型。枚举类型:Base(基础镜像),Custom(自制镜像)。 - - **Name** (str) - 镜像名称 - - **OSDistribution** (str) - 镜像系统发行版本。例如:Centos, Ubuntu, Windows等 - - **OSName** (str) - 系统名称。例如:CentOS 7.4 x86_64 - - **OSType** (str) - 系统类型。例如:Linux, Windows,Kylin - - **Region** (str) - 地域 - - **SetArch** (str) - 架构名称。例如:x86_64 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeImageRequestSchema().dumps(d) - resp = self.invoke("DescribeImage", d, **kwargs) - return apis.DescribeImageResponseSchema().loads(resp) - - def describe_lb(self, req=None, **kwargs): - """ DescribeLB - 获取负载均衡信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **LBIDs** (list) - 【数组】负载均衡的 ID。调用方式举例:LBIDs.0=“one-id”、LBIDs.1=“two-id”。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **SubnetID** (str) - 子网ID - - **VPCID** (str) - VPCID - - **Response** - - - **Infos** (list) - 见 **LBInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回负载均衡总个数。 - - **Response Model** - - **LBInfo** - - - **AlarmTemplateID** (str) - 告警模板ID - - **ChargeType** (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **CreateTime** (int) - 创建时间,时间戳 - - **ExpireTime** (int) - 过期时间,时间戳 - - **LBID** (str) - 负载均衡ID - - **LBStatus** (str) - 状态。Creating:创建中,Running:运行中,Deleting:删除中,Deleted:已删除 - - **LBType** (str) - 负载均衡类型,枚举值,WAN:外网负载均衡,LAN:内网负载均衡。 - - **Name** (str) - 名称 - - **PrivateIP** (str) - 负载均衡的内网 IP 地址,当LB为外网类型时,该值为空。 - - **PublicIP** (str) - 负载均衡的外网 IP 地址,当LB为内网类型时,该值为空。 - - **Region** (str) - 地域 - - **Remark** (str) - 描述 - - **SGID** (str) - 安全组 ID ,当LB为内网类型时,该值为空。 - - **SubnetID** (str) - 子网ID - - **VPCID** (str) - VPCID - - **VSCount** (int) - VServer的数量 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeLBRequestSchema().dumps(d) - resp = self.invoke("DescribeLB", d, **kwargs) - return apis.DescribeLBResponseSchema().loads(resp) - - def describe_metric(self, req=None, **kwargs): - """ DescribeMetric - 获取资源监控信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **BeginTime** (str) - (Required) 开始时间。使用unix时间戳 - - **EndTime** (str) - (Required) 结束时间。使用Unix时间戳 - - **MetricName** (list) - (Required) 监控指标。1. 获取虚拟机监控信息调用举例,MetricName.0="CPUUtilization"、MetricName.0="MemUsage"。虚拟机监控指标枚举值:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数;2. EIP监控指标:NetPacketIn:入包量;NetPacketOut:出包量;NICIn:入带宽;NICOut:出带宽;NICOutUsage:出带宽使用率; - - **ResourceID** (str) - (Required) 资源ID - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机;EIP:弹性IP - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,中国; - - **Response** - - - **Infos** (list) - 见 **MetricInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **TotalCount** (int) - 返回监控信息条数 - - **Response Model** - - **MetricSet** - - - **Timestamp** (int) - 监控时间 - - **Value** (float) - 监控值 - - **MetricInfo** - - - **Infos** (list) - 见 **MetricSet** 模型定义 - - **MetricName** (str) - 监控指标。虚拟机的监控指标枚举值为:BlockProcessCount,表示阻塞进程数;CPUUtilization,表示CPU使用率;DiskReadOps,表示磁盘读次数;DiskWriteOps,表示磁盘写次数;IORead,表示磁盘读吞吐;IOWrite,表示磁盘写吞吐;LoadAvg,表示平均负载1分钟;MemUsage,表示内存使用率;NetPacketIn,表示网卡入包量;NetPacketOut,表示网卡出包量;NICIn,表示网卡入带宽;NICOut,表示网卡出带宽;SpaceUsage,表示空间使用率;TCPConnectCount,表示TCP连接数; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeMetricRequestSchema().dumps(d) - resp = self.invoke("DescribeMetric", d, **kwargs) - return apis.DescribeMetricResponseSchema().loads(resp) - - def describe_natgw(self, req=None, **kwargs): - """ DescribeNATGW - 获取NAT网关信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **NATGWIDs** (list) - 【数组】NAT网关的 ID。调用方式举例:NATGWIDs.0=“one-id”、NATGWIDs.1=“two-id”。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **Response** - - - **Infos** (list) - 见 **NATGWInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回NAT网关总个数 - - **Response Model** - - **NATGWInfo** - - - **AlarmTemplateID** (str) - 告警模板ID - - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **CreateTime** (int) - 创建时间,时间戳 - - **EIP** (str) - 虚拟IP - - **ExpireTime** (int) - 过期时间,时间戳 - - **NATGWID** (str) - NAT网关ID - - **NATGWStatus** (str) - 状态。Creating:创建中, Running:运行中, Deleting:删除中, Deleted:已删除 - - **Name** (str) - 名称 - - **Region** (str) - 地域 - - **Remark** (str) - 备注 - - **SGID** (str) - NAT网关绑定的安全组ID - - **SubnetID** (str) - NAT网关实例所在的子网 ID - - **VPCID** (str) - NAT网关实例所在的 VPC ID - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeNATGWRequestSchema().dumps(d) - resp = self.invoke("DescribeNATGW", d, **kwargs) - return apis.DescribeNATGWResponseSchema().loads(resp) - - def describe_natgw_rule(self, req=None, **kwargs): - """ DescribeNATGWRule - 获取NAT网关白名单信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **NATGWID** (str) - (Required) NAT网关ID - - **NATGWType** (str) - (Required) NAT类型。枚举值:SNAT,DNAT - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **BindResourceIDs** (list) - 【数组】NAT网关白名单资源ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **RuleIDs** (list) - 【数组】NAT网关白名单ID。调用方式举例:NATGWRules.0=“one-id”、NATGWRules.1=“two-id”。 - - **Response** - - - **Infos** (list) - 见 **NATGWRuleInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回NAT网关白名单资源总个数。 - - **Response Model** - - **NATGWRuleInfo** - - - **BindResourceID** (str) - 绑定的资源ID - - **BindResourceType** (str) - 绑定资源的类型 - - **CreateTime** (int) - 创建时间,时间戳。 - - **IP** (str) - 白名单资源的内网IP地址 - - **NATGWID** (str) - NAT网关ID - - **NATGWType** (str) - nat网关类型 - - **Name** (str) - 添加的白名单资源名称 - - **RuleID** (str) - 白名单ID - - **RuleStatus** (str) - 状态。Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Unbound:已解绑 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeNATGWRuleRequestSchema().dumps(d) - resp = self.invoke("DescribeNATGWRule", d, **kwargs) - return apis.DescribeNATGWRuleResponseSchema().loads(resp) - - def describe_op_logs(self, req=None, **kwargs): - """ DescribeOPLogs - 查询操作日志 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BeginTime** (int) - (Required) 开始时间 - - **EndTime** (int) - (Required) 结束时间 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **IsSuccess** (str) - 是否操作成功 - - **Limit** (int) - - - **Offset** (int) - - - **ResourceID** (str) - 资源ID - - **ResourceType** (str) - 资源类型 - - **Response** - - - **Infos** (list) - 见 **OPLogInfo** 模型定义 - - **Message** (str) - 错误信息 - - **TotalCount** (int) - 总数 - - **Response Model** - - **OPLogInfo** - - - **CreateTime** (int) - 创建时间 - - **IsSuccess** (str) - 是否操作成功, Yes, No - - **OPLogsID** (str) - 日志ID - - **OPName** (str) - API - - **OPTime** (int) - 操作时间 - - **OpMessage** (str) - 错误信息 - - **Region** (str) - - - **ResourceID** (str) - 资源ID - - **ResourceType** (int) - 资源类型 - - **RetCode** (int) - 状态码 - - **UserEmail** (str) - 账号邮箱 - - **Zone** (str) - - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeOPLogsRequestSchema().dumps(d) - resp = self.invoke("DescribeOPLogs", d, **kwargs) - return apis.DescribeOPLogsResponseSchema().loads(resp) - - def describe_physical_ip(self, req=None, **kwargs): - """ DescribePhysicalIP - 获取物理IP信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Limit** (str) - 返回数据长度,默认为20,最大100。 - - **Offset** (str) - 列表起始位置偏移量,默认为0。 - - **PhysicalIPIDs** (list) - 【数组】物理IP的 ID。输入有效的 ID。调用方式举例:PhysicalIPIDs.0=“one-id”、PhysicalIPIDs.1=“two-id” - - **Response** - - - **Infos** (list) - 见 **PhysicalIPInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **TotalCount** (int) - 返回现有物理IP总数 - - **Response Model** - - **PhysicalIPInfo** - - - **BindResourceID** (str) - 绑定资源ID - - **BindResourceType** (str) - 绑定资源类型 - - **CreateTime** (int) - 创建时间。时间戳 - - **IP** (str) - 物理IP - - **Name** (str) - 名称 - - **OperatorName** (str) - 线路 - - **PhysicalIPID** (str) - 物理IP的ID - - **Region** (str) - 地域 - - **Remark** (str) - 备注 - - **Status** (str) - 状态。Allocating:申请中,Free:未绑定,Bounding:绑定中,Bound:已绑定,Unbounding:解绑中,Deleted:已删除,Releasing:销毁中,Released:已销毁 - - **UpdateTime** (int) - 过期时间。时间戳 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribePhysicalIPRequestSchema().dumps(d) - resp = self.invoke("DescribePhysicalIP", d, **kwargs) - return apis.DescribePhysicalIPResponseSchema().loads(resp) - - def describe_rs(self, req=None, **kwargs): - """ DescribeRS - 获取负载均衡服务的服务节点信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **RSIDs** (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 - - **VSID** (str) - VServer的ID - - **Response** - - - **Infos** (list) - 见 **RSInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回该负载均衡下VServer的总个数。 - - **Response Model** - - **RSInfo** - - - **BindResourceID** (str) - 绑定的资源ID - - **CreateTime** (int) - 创建时间,时间戳 - - **IP** (str) - 服务节点的内网 IP 地址 - - **LBID** (str) - 服务节点所属的负载均衡 ID - - **Name** (str) - 服务节点的资源名称 - - **Port** (int) - 服务节点暴露的服务端口号 - - **RSID** (str) - 服务节点的 ID - - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 - - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - 服务节点所属的 VServer ID - - **Weight** (int) - 服务节点的权重 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeRSRequestSchema().dumps(d) - resp = self.invoke("DescribeRS", d, **kwargs) - return apis.DescribeRSResponseSchema().loads(resp) - - def describe_recycled_resource(self, req=None, **kwargs): - """ DescribeRecycledResource - 查询回收站资源 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **ResourceIDs** (list) - 【数组】资源ID,输入“有效”的ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 - - **Response** - - - **Infos** (list) - 见 **RecycledResourceInfo** 模型定义 - - **TotalCount** (int) - 返回回收站资源的总个数 - - **Response Model** - - **RecycledResourceInfo** - - - **CreateTime** (int) - 创建时间 - - **DeleteTime** (int) - 删除时间 - - **Description** (str) - 描述 - - **ExpireTime** (int) - 过期时间 - - **IsAutoTerminated** (bool) - 是否自动销户 - - **Name** (str) - 名称 - - **Region** (str) - 地域 - - **ResourceID** (str) - 资源ID - - **ResourceType** (str) - 资源类型:VM:虚拟机,Disk:硬盘,EIP:外网IP,PIP:物理IP,MySQL:数据库,Redis:缓存 - - **Status** (str) - 资源状态 - - **WillTerminateTime** (int) - 销毁时间 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeRecycledResourceRequestSchema().dumps(d) - resp = self.invoke("DescribeRecycledResource", d, **kwargs) - return apis.DescribeRecycledResourceResponseSchema().loads(resp) - - def describe_security_group(self, req=None, **kwargs): - """ DescribeSecurityGroup - 查询安全组信息 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **Zone** (str) - (Required) 可用区。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **SGIDs** (list) - 【数组】安全组的 ID。输入有效的 ID。调用方式举例:SGIDs.0=“one-id”、SGIDs.1=“two-id” - - **Response** - - - **Infos** (list) - 见 **SGInfo** 模型定义 - - **Message** (str) - 返回信息描述; - - **TotalCount** (int) - 安全组的总数 - - **Response Model** - - **SGRuleInfo** - - - **DstPort** (str) - 端口号 - - **IsIn** (str) - 方向。1:入,0:出 - - **Priority** (str) - 优先级。HIGH:高,MEDIUM:中,LOW:低 - - **ProtocolType** (str) - 协议 - - **RuleAction** (str) - 动作。ACCEPT:接受,DROP:拒绝 - - **RuleID** (str) - 规则ID - - **SrcIP** (str) - IP或者掩码/段形式。10.0.0.2,10.0.10.10/16 - - **SGInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Name** (str) - 名称 - - **Region** (str) - 地域 - - **Remark** (str) - 描述 - - **ResourceCount** (int) - 资源绑定数量 - - **Rule** (list) - 见 **SGRuleInfo** 模型定义 - - **RuleCount** (int) - 规则数量 - - **SGID** (str) - 安全组ID - - **Status** (str) - 状态。Creating:创建中,Updating:更新中,Available:有效,Deleted:已删除,Terminating:销毁中,Terminated:已销毁 - - **UpdateTime** (int) - 更新时间,时间戳 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeSecurityGroupRequestSchema().dumps(d) - resp = self.invoke("DescribeSecurityGroup", d, **kwargs) - return apis.DescribeSecurityGroupResponseSchema().loads(resp) - - def describe_storage_type(self, req=None, **kwargs): - """ DescribeStorageType - 查询存储类型 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Infos** (list) - 见 **StorageTypeInfo** 模型定义 - - **Message** (str) - 返回信息描述; - - **TotalCount** (int) - 存储类型的总数 - - **Response Model** - - **StorageTypeInfo** - - - **Region** (str) - 地域 - - **SetArch** (str) - 架构 - - **StorageType** (str) - 存储类型 - - **StorageTypeAlias** (str) - 存储类型别名 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeStorageTypeRequestSchema().dumps(d) - resp = self.invoke("DescribeStorageType", d, **kwargs) - return apis.DescribeStorageTypeResponseSchema().loads(resp) - - def describe_subnet(self, req=None, **kwargs): - """ DescribeSubnet - 查询子网信息 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **Zone** (str) - (Required) 可用区。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **SubnetIDs** (list) - 【数组】子网 ID。调用方式举例:SubnetIDs.0=“one-id”、SubnetIDs.1=“two-id” - - **VPCID** (str) - VPCID - - **Response** - - - **Infos** (list) - 见 **SubnetInfo** 模型定义 - - **Message** (str) - 返回信息描述; - - **TotalCount** (int) - 子网的总数 - - **Response Model** - - **SubnetInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Name** (str) - 名称 - - **Network** (str) - 网段 - - **Region** (str) - 地域 - - **Remark** (str) - 描述 - - **State** (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除 - - **SubnetID** (str) - ID - - **UpdateTime** (int) - 更新时间,时间戳 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeSubnetRequestSchema().dumps(d) - resp = self.invoke("DescribeSubnet", d, **kwargs) - return apis.DescribeSubnetResponseSchema().loads(resp) - - def describe_user(self, req=None, **kwargs): - """ DescribeUser - 查询租户信息 - - **Request** - - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **UserIDs** (list) - 【数组】租户的 ID。输入有效的 ID。调用方式举例:UserIDs.0=123”、UserIDs.1=456 - - **Response** - - - **Infos** (list) - 见 **UserInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **TotalCount** (int) - 返回现有租户总数 - - **Response Model** - - **UserInfo** - - - **Amount** (float) - 账户余额 - - **CreateTime** (int) - 账户创建时间。时间戳 - - **Email** (str) - 租户名称 - - **PrivateKey** (str) - 私钥 - - **PublicKey** (str) - 公钥 - - **Status** (str) - 用户状态。USER_STATUS_AVAILABLE:正常,USER_STATUS_FREEZE:冻结 - - **UpdateTime** (int) - 更新时间。时间戳 - - **UserID** (int) - 租户ID. - - """ - d = {} - req and d.update(req) - d = apis.DescribeUserRequestSchema().dumps(d) - resp = self.invoke("DescribeUser", d, **kwargs) - return apis.DescribeUserResponseSchema().loads(resp) - - def describe_vm_instance(self, req=None, **kwargs): - """ DescribeVMInstance - 查询虚拟机 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (str) - 列表起始位置偏移量,默认为0。 - - **SubnetID** (str) - 子网 ID。输入“有效”状态的子网 ID。 - - **VMIDs** (list) - 【数组】虚拟机的 ID。输入有效的 ID。调用方式举例:PrivateIp.0=“one-id”、PrivateIp.1=“two-id”。 - - **VPCID** (str) - VPC ID。输入“有效”状态的VPC ID。 - - **Response** - - - **Infos** (list) - 见 **VMInstanceInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **TotalCount** (int) - 返回虚拟机总个数 - - **Response Model** - - **VMIPInfo** - - - **IP** (str) - IP 值 - - **IPVersion** (str) - IP版本,支持值:IPv4\\IPv6 - - **InterfaceID** (str) - 网卡 ID - - **IsElastic** (str) - 是否是弹性网卡。枚举值:Y,表示是;N,表示否; - - **MAC** (str) - MAC 地址值 - - **SGID** (str) - 安全组 ID - - **SGName** (str) - 安全组名称 - - **SubnetID** (str) - 子网 ID - - **SubnetName** (str) - 子网名称 - - **Type** (str) - IP 类型。枚举值:Private,表示内网;Public,表示外网;Physical,表示物理网; - - **VPCID** (str) - VPC ID - - **VPCName** (str) - VPC 名称 - - **VMDiskInfo** - - - **DiskID** (str) - 磁盘 ID - - **Drive** (str) - 磁盘盘符 - - **IsElastic** (str) - 是否是弹性磁盘。枚举值为:Y,表示是;N,表示否; - - **Name** (str) - 磁盘名称 - - **Size** (int) - 磁盘大小,单位 GB - - **Type** (str) - 磁盘类型。枚举值:Boot,表示系统盘;Data,表示数据盘; - - **VMInstanceInfo** - - - **CPU** (int) - CPU 个数 - - **ChargeType** (str) - 虚拟机计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **CreateTime** (int) - 虚拟机创建时间 - - **DiskInfos** (list) - 见 **VMDiskInfo** 模型定义 - - **ExpireTime** (int) - 虚拟机过期时间 - - **IPInfos** (list) - 见 **VMIPInfo** 模型定义 - - **ImageID** (str) - 镜像 ID - - **Memory** (int) - 内存大小,单位 M - - **Name** (str) - 虚拟机名称 - - **OSName** (str) - 操作系统名称 - - **OSType** (str) - 操作系统类型 - - **Region** (str) - Region - - **RegionAlias** (str) - Region 别名 - - **Remark** (str) - 备注 - - **State** (str) - 虚拟机状态。枚举值:Initializing,表示初始化;Starting,表示启动中;Restarting,表示重启中;Running,表示运行;Stopping,表示关机中;Stopped,表示关机;Deleted,表示已删除;Resizing,表示修改配置中;Terminating,表示销毁中;Terminated,表示已销毁;Migrating,表示迁移中;WaitReinstall,表示等待重装系统;Reinstalling,表示重装中;Poweroffing,表示断电中;ChangeSGing,表示修改防火墙中; - - **SubnetID** (str) - 子网 ID - - **SubnetName** (str) - 子网 名称 - - **VMID** (str) - 虚拟机 ID - - **VMType** (str) - 虚拟机类型 - - **VMTypeAlias** (str) - 虚拟机类型别名 - - **VPCID** (str) - VPC ID - - **VPCName** (str) - VPC 名称 - - **Zone** (str) - Zone - - **ZoneAlias** (str) - Zone 别名 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeVMInstanceRequestSchema().dumps(d) - resp = self.invoke("DescribeVMInstance", d, **kwargs) - return apis.DescribeVMInstanceResponseSchema().loads(resp) - - def describe_vm_type(self, req=None, **kwargs): - """ DescribeVMType - 查询主机机型 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Infos** (list) - 见 **VMTypeInfo** 模型定义 - - **Message** (str) - 返回信息描述; - - **TotalCount** (int) - 主机机型的总数 - - **Response Model** - - **VMTypeInfo** - - - **Region** (str) - 地域 - - **SetArch** (str) - 架构 - - **VMType** (str) - 机型 - - **VMTypeAlias** (str) - 机型别名 - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeVMTypeRequestSchema().dumps(d) - resp = self.invoke("DescribeVMType", d, **kwargs) - return apis.DescribeVMTypeResponseSchema().loads(resp) - - def describe_vpc(self, req=None, **kwargs): - """ DescribeVPC - 查询VPC信息 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **Zone** (str) - (Required) 可用区。 - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **VPCIDs** (list) - 【数组】VPC的 ID。调用方式举例:VPCIDs.0=“one-id”、VPCIDs.1=“two-id” - - **Response** - - - **Infos** (list) - 见 **VPCInfo** 模型定义 - - **Message** (str) - 返回信息描述; - - **TotalCount** (int) - VPC的总数 - - **Response Model** - - **SubnetInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Name** (str) - 名称 - - **Network** (str) - 网段 - - **Region** (str) - 地域 - - **Remark** (str) - 描述 - - **State** (str) - 状态;Allocating:申请中,Available:有效,Deleting:删除中,Deleted:已删除 - - **SubnetID** (str) - ID - - **UpdateTime** (int) - 更新时间,时间戳 - - **Zone** (str) - 可用区 - - **VPCInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Name** (str) - 名称 - - **Network** (str) - 网段,比如10.0.0.0/16 - - **Region** (str) - 地域。 - - **Remark** (str) - 描述 - - **State** (str) - 状态;Allocating:申请中,Available:有效,Terminating:销毁中,Terminated:已销毁 - - **SubnetCount** (int) - 该VPC下拥有的子网数目 - - **SubnetInfos** (list) - 见 **SubnetInfo** 模型定义 - - **UpdateTime** (int) - 修改时间,时间戳 - - **VPCID** (str) - VPC的ID - - **Zone** (str) - 可用区 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeVPCRequestSchema().dumps(d) - resp = self.invoke("DescribeVPC", d, **kwargs) - return apis.DescribeVPCResponseSchema().loads(resp) - - def describe_vs(self, req=None, **kwargs): - """ DescribeVS - 获取负载均衡 VServer 信息 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **VSIDs** (list) - 【数组】VServer的 ID。调用方式举例:VSIDs.0=“one-id”、VSIDs.1=“two-id”。 - - **Response** - - - **Infos** (list) - 见 **VSInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回当前负载均衡 VServer 总个数。 - - **Response Model** - - **VSPolicyInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 - - **LBID** (str) - 负载均衡ID - - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 - - **PolicyID** (str) - 内容转发规则ID - - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 - - **RSInfos** (list) - 见 **RSInfo** 模型定义 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - VServerID - - **RSInfo** - - - **BindResourceID** (str) - 绑定的资源ID - - **CreateTime** (int) - 创建时间,时间戳 - - **IP** (str) - 服务节点的内网 IP 地址 - - **LBID** (str) - 服务节点所属的负载均衡 ID - - **Name** (str) - 服务节点的资源名称 - - **Port** (int) - 服务节点暴露的服务端口号 - - **RSID** (str) - 服务节点的 ID - - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 - - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - 服务节点所属的 VServer ID - - **Weight** (int) - 服务节点的权重 - - **VSInfo** - - - **AlarmTemplateID** (str) - 告警模板ID - - **CreateTime** (int) - 创建时间,时间戳 - - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 - - **HealthcheckType** (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。 - - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。 - - **LBID** (str) - VServer 所属的负载均衡 ID - - **Path** (str) - HTTP 健康检查的路径。当健康检查类型为端口检查时,该值为空。 - - **PersistenceKey** (str) - 会话保持KEY,仅当 VServer 协议为 HTTP 且会话保持为手动时有效。 - - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值为空;当协议为 UDP 时 Auto 表示开启会话保持 。 - - **Port** (int) - 端口 - - **Protocol** (str) - 协议 - - **RSHealthStatus** (str) - 健康检查状态,枚举值,Empty:全部异常,Parts:部分异常,All:正常 - - **RSInfos** (list) - 见 **RSInfo** 模型定义 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - VServer的ID - - **VSPolicyInfos** (list) - 见 **VSPolicyInfo** 模型定义 - - **VSStatus** (str) - VServer 的资源状态。枚举值,Available:可用,Updating:更新中,Deleted:已删除 。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeVSRequestSchema().dumps(d) - resp = self.invoke("DescribeVS", d, **kwargs) - return apis.DescribeVSResponseSchema().loads(resp) - - def describe_vs_policy(self, req=None, **kwargs): - """ DescribeVSPolicy - 获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Limit** (int) - 返回数据长度,默认为20,最大100。 - - **Offset** (int) - 列表起始位置偏移量,默认为0。 - - **PolicyIDs** (list) - 【数组】七层负载均衡内容转发规则的 ID。调用方式举例:PolicyIDs.0=“one-id”、PolicyIDs.1=“two-id” - - **VSID** (str) - VServerID - - **Response** - - - **Infos** (list) - 见 **VSPolicyInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **TotalCount** (int) - 返回内容转发规则的总个数。 - - **Response Model** - - **RSInfo** - - - **BindResourceID** (str) - 绑定的资源ID - - **CreateTime** (int) - 创建时间,时间戳 - - **IP** (str) - 服务节点的内网 IP 地址 - - **LBID** (str) - 服务节点所属的负载均衡 ID - - **Name** (str) - 服务节点的资源名称 - - **Port** (int) - 服务节点暴露的服务端口号 - - **RSID** (str) - 服务节点的 ID - - **RSMode** (str) - 节点模式。枚举值,Enabling:开启中,Enable:已启用,Disabling:禁用中,Disable:已禁用 - - **RSStatus** (str) - RSStatus 的描述修改为:状态,枚举值,Creating:创建中,Inactive:无效,Active:有效,Updating:更新中,Deleting:删除中,Deleted:已删除。其中有效代表节点服务健康,无效代表节点服务异常。 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - 服务节点所属的 VServer ID - - **Weight** (int) - 服务节点的权重 - - **VSPolicyInfo** - - - **CreateTime** (int) - 创建时间,时间戳 - - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 - - **LBID** (str) - 负载均衡ID - - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 - - **PolicyID** (str) - 内容转发规则ID - - **PolicyStatus** (str) - 状态,枚举值,Available:有效,Deleted:已删除 - - **RSInfos** (list) - 见 **RSInfo** 模型定义 - - **UpdateTime** (int) - 更新时间,时间戳 - - **VSID** (str) - VServerID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeVSPolicyRequestSchema().dumps(d) - resp = self.invoke("DescribeVSPolicy", d, **kwargs) - return apis.DescribeVSPolicyResponseSchema().loads(resp) - - def detach_disk(self, req=None, **kwargs): - """ DetachDisk - 解绑UClouStack硬盘 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **DiskID** (str) - (Required) 硬盘ID - - **ResourceID** (str) - (Required) 绑定的资源ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DetachDiskRequestSchema().dumps(d) - resp = self.invoke("DetachDisk", d, **kwargs) - return apis.DetachDiskResponseSchema().loads(resp) - - def disable_rs(self, req=None, **kwargs): - """ DisableRS - 禁用负载均衡的单个服务节点 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **RSID** (str) - (Required) RServer的ID - - **VSID** (str) - (Required) VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DisableRSRequestSchema().dumps(d) - resp = self.invoke("DisableRS", d, **kwargs) - return apis.DisableRSResponseSchema().loads(resp) - - def enable_rs(self, req=None, **kwargs): - """ EnableRS - 启用负载均衡的单个服务节点 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **RSID** (str) - (Required) RServer的ID - - **VSID** (str) - (Required) VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.EnableRSRequestSchema().dumps(d) - resp = self.invoke("EnableRS", d, **kwargs) - return apis.EnableRSResponseSchema().loads(resp) - - def get_disk_price(self, req=None, **kwargs): - """ GetDiskPrice - 获取硬盘价格 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **DiskSpace** (int) - (Required) 磁盘大小 - - **SetType** (str) - (Required) 磁盘类型 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **Infos** (list) - 见 **PriceInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **Response Model** - - **PriceInfo** - - - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **Price** (float) - 价格 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.GetDiskPriceRequestSchema().dumps(d) - resp = self.invoke("GetDiskPrice", d, **kwargs) - return apis.GetDiskPriceResponseSchema().loads(resp) - - def get_eip_price(self, req=None, **kwargs): - """ GetEIPPrice - 获取外网IP价格 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **Bandwidth** (int) - (Required) 带宽,默认值1,默认范围1~100 - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **OpertatorName** (str) - (Required) 线路。目前支持Bgp - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **Infos** (list) - 见 **PriceInfo** 模型定义 - - **Message** (str) - 返回信息描述 - - **Response Model** - - **PriceInfo** - - - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **Price** (float) - 价格 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.GetEIPPriceRequestSchema().dumps(d) - resp = self.invoke("GetEIPPrice", d, **kwargs) - return apis.GetEIPPriceResponseSchema().loads(resp) - - def get_vm_instance_price(self, req=None, **kwargs): - """ GetVMInstancePrice - 获取虚拟机价格 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **BootDiskSetType** (str) - (Required) 系统盘类型。枚举值:Normal,表示普通;SSD,表示SSD; - - **CPU** (int) - (Required) CPU 个数,目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。 - - **ChargeType** (str) - (Required) 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **DataDiskSetType** (str) - (Required) 数据盘类型。枚举值:Normal,表示普通;SSD,表示SSD; - - **DataDiskSpace** (int) - (Required) 数据盘大小,单位 GB。默认值为0。范围:【0,8000】,步长10。 - - **ImageID** (str) - (Required) 镜像 ID。基础镜像 ID 或者自制镜像 ID。如:cn-image-centos-74。 - - **Memory** (int) - (Required) 内存大小,单位 M。目前只能输入数据库配置指定规格参数,如:1核2048M、2核4096M、4核8192M、8核16384M、16核32768M。 - - **OSType** (str) - (Required) 系统类型。 - - **VMType** (str) - (Required) 机型。枚举值:Normal,表示普通;SSD,表示SSD; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **GPU** (int) - GPU 卡核心的占用个数。枚举值:【1,2,4】。GPU与CPU、内存大小关系:CPU个数>=4*GPU个数,同时内存与CPU规格匹配. - - **Quantity** (int) - 购买时长。默认值1。小时不生效,月范围【1,11】,年范围【1,5】。 - - **Response** - - - **Infos** (list) - 见 **PriceInfo** 模型定义 - - **Message** (str) - 返回信息描述。 - - **Response Model** - - **PriceInfo** - - - **ChargeType** (str) - 计费模式。枚举值:Dynamic,表示小时;Month,表示月;Year,表示年; - - **Price** (float) - 价格 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.GetVMInstancePriceRequestSchema().dumps(d) - resp = self.invoke("GetVMInstancePrice", d, **kwargs) - return apis.GetVMInstancePriceResponseSchema().loads(resp) - - def modify_eip_bandwidth(self, req=None, **kwargs): - """ ModifyEIPBandwidth - 调整外网IP带宽 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **Bandwidth** (int) - (Required) 调整后的带宽 - - **EIPID** (str) - (Required) 外网IP的ID - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回信息描述; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.ModifyEIPBandwidthRequestSchema().dumps(d) - resp = self.invoke("ModifyEIPBandwidth", d, **kwargs) - return apis.ModifyEIPBandwidthResponseSchema().loads(resp) - - def modify_name_and_remark(self, req=None, **kwargs): - """ ModifyNameAndRemark - 修改资源名称和备注 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Name** (str) - (Required) 名称; - - **ResourceID** (str) - (Required) 资源ID; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Remark** (str) - 描述; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.ModifyNameAndRemarkRequestSchema().dumps(d) - resp = self.invoke("ModifyNameAndRemark", d, **kwargs) - return apis.ModifyNameAndRemarkResponseSchema().loads(resp) - - def poweroff_vm_instance(self, req=None, **kwargs): - """ PoweroffVMInstance - 断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **VMID** (str) - (Required) 虚拟机ID - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.PoweroffVMInstanceRequestSchema().dumps(d) - resp = self.invoke("PoweroffVMInstance", d, **kwargs) - return apis.PoweroffVMInstanceResponseSchema().loads(resp) - - def recharge(self, req=None, **kwargs): - """ Recharge - 管理员给租户充值 - - **Request** - - - **Amount** (int) - (Required) 充值金额。最少100,最大500000 - - **FromType** (str) - (Required) 充值来源。INPOUR_FROM_ALIPAY:支付宝,INPOUR_FROM_OFFLINE:银行转账,INPOUR_FROM_SINPAY:新浪支付,INPOUR_FROM_WECHAT_PAY:微信转账。 - - **SerialNo** (str) - (Required) 充值单号。充值方式为“账户余额”时为必要参数。 - - **UserID** (int) - (Required) 租户的账户ID。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {} - req and d.update(req) - d = apis.RechargeRequestSchema().dumps(d) - resp = self.invoke("Recharge", d, **kwargs) - return apis.RechargeResponseSchema().loads(resp) - - def reinstall_vm_instance(self, req=None, **kwargs): - """ ReinstallVMInstance - 重装系统,关机的虚拟机才可以重装系统 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **ImageID** (str) - (Required) 镜像ID - - **VMID** (str) - (Required) 虚拟机ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.ReinstallVMInstanceRequestSchema().dumps(d) - resp = self.invoke("ReinstallVMInstance", d, **kwargs) - return apis.ReinstallVMInstanceResponseSchema().loads(resp) - - def release_eip(self, req=None, **kwargs): - """ ReleaseEIP - 删除外网IP - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 - - **EIPID** (str) - (Required) 外网IP的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国 - - **Response** - - - **Message** (str) - 返回状态描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.ReleaseEIPRequestSchema().dumps(d) - resp = self.invoke("ReleaseEIP", d, **kwargs) - return apis.ReleaseEIPResponseSchema().loads(resp) - - def renew_resource(self, req=None, **kwargs): - """ RenewResource - 续费回收站资源 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **ResourceID** (str) - (Required) 待续续的资源ID - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Quantity** (int) - 购买时长,默认为 1。按小时(Dynamic)付费的资源无需此参数,按月付费的资源传 0 时,代表购买至月末。 - - **Response** - - - **Message** (str) - 返回描述信息 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.RenewResourceRequestSchema().dumps(d) - resp = self.invoke("RenewResource", d, **kwargs) - return apis.RenewResourceResponseSchema().loads(resp) - - def reset_vm_instance_password(self, req=None, **kwargs): - """ ResetVMInstancePassword - 重置虚拟机密码,主机必须开机才可以重置密码 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Password** (str) - (Required) 密码 - - **VMID** (str) - (Required) 虚拟机ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.ResetVMInstancePasswordRequestSchema().dumps(d) - resp = self.invoke("ResetVMInstancePassword", d, **kwargs) - return apis.ResetVMInstancePasswordResponseSchema().loads(resp) - - def resize_vm_config(self, req=None, **kwargs): - """ ResizeVMConfig - 修改虚拟机配置 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **CPU** (int) - (Required) CPU 个数,如 1、2、4、8、16、32、64。 - - **Memory** (int) - (Required) 内存容量,如 2048、4096、8192、16384、32768、65536、131072。 - - **VMID** (str) - (Required) 虚拟机ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.ResizeVMConfigRequestSchema().dumps(d) - resp = self.invoke("ResizeVMConfig", d, **kwargs) - return apis.ResizeVMConfigResponseSchema().loads(resp) - - def restart_vm_instance(self, req=None, **kwargs): - """ RestartVMInstance - 重启虚拟机 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **VMID** (str) - (Required) 虚拟机ID; - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.RestartVMInstanceRequestSchema().dumps(d) - resp = self.invoke("RestartVMInstance", d, **kwargs) - return apis.RestartVMInstanceResponseSchema().loads(resp) - - def rollback_resource(self, req=None, **kwargs): - """ RollbackResource - 恢复回收站资源 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **ResourceID** (str) - (Required) 待恢复的资源ID - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Response** - - - **Message** (str) - 返回描述信息 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.RollbackResourceRequestSchema().dumps(d) - resp = self.invoke("RollbackResource", d, **kwargs) - return apis.RollbackResourceResponseSchema().loads(resp) - - def rollback_snapshot(self, req=None, **kwargs): - """ RollbackSnapshot - 将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:如 cn,表示中国。 - - **DiskID** (str) - (Required) 对应的云硬盘 ID; - - **SnapshotID** (str) - (Required) 快照ID - - **Zone** (str) - (Required) 可用区。枚举值:如 zone-01,表示可用区1。 - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.RollbackSnapshotRequestSchema().dumps(d) - resp = self.invoke("RollbackSnapshot", d, **kwargs) - return apis.RollbackSnapshotResponseSchema().loads(resp) - - def start_vm_instance(self, req=None, **kwargs): - """ StartVMInstance - 开启虚拟机 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **VMID** (str) - (Required) 虚拟机 ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.StartVMInstanceRequestSchema().dumps(d) - resp = self.invoke("StartVMInstance", d, **kwargs) - return apis.StartVMInstanceResponseSchema().loads(resp) - - def stop_vm_instance(self, req=None, **kwargs): - """ StopVMInstance - 关闭虚拟机 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **VMID** (str) - (Required) 虚拟机 ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - **VMID** (str) - 虚拟机 ID - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.StopVMInstanceRequestSchema().dumps(d) - resp = self.invoke("StopVMInstance", d, **kwargs) - return apis.StopVMInstanceResponseSchema().loads(resp) - - def terminate_resource(self, req=None, **kwargs): - """ TerminateResource - 销毁资源 - - **Request** - - - **Region** (str) - (Config) 地域。 - - **ResourceID** (str) - (Required) 资源id - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回描述信息 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.TerminateResourceRequestSchema().dumps(d) - resp = self.invoke("TerminateResource", d, **kwargs) - return apis.TerminateResourceResponseSchema().loads(resp) - - def un_bind_eip(self, req=None, **kwargs): - """ UnBindEIP - 解绑外网IP - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国;中国 - - **EIPID** (str) - (Required) 外网IP的ID - - **ResourceID** (str) - (Required) 资源ID - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UnBindEIPRequestSchema().dumps(d) - resp = self.invoke("UnBindEIP", d, **kwargs) - return apis.UnBindEIPResponseSchema().loads(resp) - - def un_bind_security_group(self, req=None, **kwargs): - """ UnBindSecurityGroup - 解绑安全组 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **ResourceID** (str) - (Required) 解绑的资源ID。调用方式举例:ResourceID=“one-id”。 - - **SGID** (str) - (Required) 安全组ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UnBindSecurityGroupRequestSchema().dumps(d) - resp = self.invoke("UnBindSecurityGroup", d, **kwargs) - return apis.UnBindSecurityGroupResponseSchema().loads(resp) - - def unbind_alarm_template(self, req=None, **kwargs): - """ UnbindAlarmTemplate - 解绑告警模板 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **AlarmTemplateID** (str) - (Required) 告警模板ID - - **ResourceIDs** (list) - (Required) 【数组】资源的 ID。调用方式举例:ResourceIDs.0=“one-id”、ResourceIDs.1=“two-id”。 - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机, LB:负载均衡, NATGW:nat网关;EIP:弹性网卡 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UnbindAlarmTemplateRequestSchema().dumps(d) - resp = self.invoke("UnbindAlarmTemplate", d, **kwargs) - return apis.UnbindAlarmTemplateResponseSchema().loads(resp) - - def unbind_physical_ip(self, req=None, **kwargs): - """ UnbindPhysicalIP - 解绑物理IP - - **Request** - - - **Region** (str) - (Config) 地域。 - - **PhysicalIPID** (str) - (Required) 物理IP的ID - - **ResourceID** (str) - (Required) 资源ID - - **ResourceType** (str) - (Required) 资源类型。VM:虚拟机 - - **Zone** (str) - (Required) 可用区。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UnbindPhysicalIPRequestSchema().dumps(d) - resp = self.invoke("UnbindPhysicalIP", d, **kwargs) - return apis.UnbindPhysicalIPResponseSchema().loads(resp) - - def update_alarm_template_rule(self, req=None, **kwargs): - """ UpdateAlarmTemplateRule - 更新告警模板规则 - - **Request** - - - **Region** (str) - (Config) 地域 - - **AlarmStrategy** (str) - (Required) 瘦脸策略 - - **AlarmTemplateID** (str) - (Required) 告警模板ID - - **AlarmTemplateRuleID** (str) - (Required) 告警规则ID - - **Compare** (str) - (Required) 对比方式 - - **ContactGroupID** (str) - (Required) 通知组ID - - **MetricName** (str) - (Required) 监控指标名称 - - **ResourceType** (str) - (Required) 资源类型 - - **Threshold** (str) - (Required) 告警阈值 - - **TriggerCount** (str) - (Required) 连续触发次数 - - **Zone** (str) - (Required) 可用区 - - **Response** - - - **Message** (str) - 返回描述信息 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpdateAlarmTemplateRuleRequestSchema().dumps(d) - resp = self.invoke("UpdateAlarmTemplateRule", d, **kwargs) - return apis.UpdateAlarmTemplateRuleResponseSchema().loads(resp) - - def update_rs(self, req=None, **kwargs): - """ UpdateRS - 修改负载均衡的服务节点 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID - - **RSID** (str) - (Required) RServer的ID - - **VSID** (str) - (Required) RServer所属的VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Port** (int) - 端口号 - - **Weight** (int) - 权重 - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpdateRSRequestSchema().dumps(d) - resp = self.invoke("UpdateRS", d, **kwargs) - return apis.UpdateRSResponseSchema().loads(resp) - - def update_security_group_rule(self, req=None, **kwargs): - """ UpdateSecurityGroupRule - 修改安全组规则 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值: cn,表示中国; - - **Rules** (list) - (Required) 【数组】规则。输入有效的 规则。调用方式举例:Rules.0=“TCP|23|0.0.0.0/0|ACCEPT|HIGH|1”、Rules.1=“TCP|55|0.0.0.0/0|ACCEPT|HIGH|1” - - **SGID** (str) - (Required) 安全组ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述; - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpdateSecurityGroupRuleRequestSchema().dumps(d) - resp = self.invoke("UpdateSecurityGroupRule", d, **kwargs) - return apis.UpdateSecurityGroupRuleResponseSchema().loads(resp) - - def update_vs(self, req=None, **kwargs): - """ UpdateVS - 修改负载均衡VServer - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) VServer 监听器所属的负载均衡 ID - - **VSID** (str) - (Required) 需要更新的VSID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **CACertificateID** (str) - CA证书ID,用于验证客户端证书的签名,仅当VServer监听协议为 HTTPS 且 SSLMode 为双向认证时有效。 - - **Domain** (str) - HTTP 健康检查时校验请求的 HOST 字段中的域名。当健康检查类型为端口检查时,该值为空。 - - **HealthcheckType** (str) - 负载均衡的健康检查类型。枚举值:Port:端口检查;Path: HTTP检查 。仅当 VServer 协议类型为 HTTP 时,才可进行 HTTP 检查。 - - **KeepaliveTimeout** (int) - 负载均衡的连接空闲超时时间,单位为秒,默认值为 60s 。当 VServer 协议为 UDP 时,该值为空。 - - **Path** (str) - HTTP 健康检查的路径,健康检查类型为 HTTP 检查时为必填项。当健康检查类型为端口检查时,该值为空。 - - **PersistenceKey** (str) - 会话保持KEY,会话保持类型为Manual时为必填项,仅当 VServer 协议为 HTTP 时有效。 - - **PersistenceType** (str) - 会话保持类型。枚举值:None:关闭;Auto:自动生成;Manual:手动生成 。当协议为 TCP 时,该值不生效,会话保持和选择的调度算法相关;当协议为 UDP 时 Auto 表示开启会话保持 。 - - **Port** (int) - VServer 监听端口 - - **SSLMode** (str) - SSL认证模式,HTTPS协议下必传,取值范围["simplex","duplex"]分别表示单向认证和双向认证。 - - **Scheduler** (str) - 负载均衡的调度算法。枚举值:wrr:加权轮训;least_conn:最小连接数;hash:原地址,四层lb使用。ip_hash:七层lb使用 - - **ServerCertificateID** (str) - 服务器证书ID,用于证明服务器的身份,仅当 VServer监听协议为 HTTPS 时有效。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpdateVSRequestSchema().dumps(d) - resp = self.invoke("UpdateVS", d, **kwargs) - return apis.UpdateVSResponseSchema().loads(resp) - - def update_vs_policy(self, req=None, **kwargs): - """ UpdateVSPolicy - 更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **LBID** (str) - (Required) 负载均衡ID - - **PolicyID** (str) - (Required) 内容转发规则ID - - **VSID** (str) - (Required) VServer的ID - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Domain** (str) - 内容转发规则关联的请求域名,值可为空,即代表仅匹配路径。 - - **Path** (str) - 内容转发规则关联的请求访问路径,如 "/" 。 - - **RSIDs** (list) - 【数组】RServer的 ID。调用方式举例:RSIDs.0=“one-id”、RSIDs.1=“two-id”。 - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpdateVSPolicyRequestSchema().dumps(d) - resp = self.invoke("UpdateVSPolicy", d, **kwargs) - return apis.UpdateVSPolicyResponseSchema().loads(resp) - - def upgrade_disk(self, req=None, **kwargs): - """ UpgradeDisk - 升级硬盘 - - **Request** - - - **Region** (str) - (Config) 地域。枚举值:cn,表示中国; - - **DiskID** (str) - (Required) 硬盘ID - - **DiskSpace** (int) - (Required) 硬盘升级后的容量, 不能小于原硬盘容量,单位为 GB 。 - - **Zone** (str) - (Required) 可用区。枚举值:zone-01,表示中国; - - **Response** - - - **Message** (str) - 返回信息描述。 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpgradeDiskRequestSchema().dumps(d) - resp = self.invoke("UpgradeDisk", d, **kwargs) - return apis.UpgradeDiskResponseSchema().loads(resp) diff --git a/ucloud/services/ucloudstack/schemas/__init__.py b/ucloud/services/ucloudstack/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ucloudstack/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ucloudstack/schemas/apis.py b/ucloud/services/ucloudstack/schemas/apis.py deleted file mode 100644 index 1453d8c..0000000 --- a/ucloud/services/ucloudstack/schemas/apis.py +++ /dev/null @@ -1,2764 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.ucloudstack.schemas import models - -""" UCloudStack API Schema -""" -""" -API: AllocateEIP - -申请外网IP -""" - - -class AllocateEIPRequestSchema(schema.RequestSchema): - """ AllocateEIP - 申请外网IP - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "Name": fields.Str(required=True, dump_to="Name"), - "OperatorName": fields.Str(required=True, dump_to="OperatorName"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class AllocateEIPResponseSchema(schema.ResponseSchema): - """ AllocateEIP - 申请外网IP - """ - - fields = { - "EIPID": fields.Str(required=True, load_from="EIPID"), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: AttachDisk - -绑定硬盘 -""" - - -class AttachDiskRequestSchema(schema.RequestSchema): - """ AttachDisk - 绑定硬盘 - """ - - fields = { - "DiskID": fields.Str(required=True, dump_to="DiskID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class AttachDiskResponseSchema(schema.ResponseSchema): - """ AttachDisk - 绑定硬盘 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: BindAlarmTemplate - -绑定告警模板 -""" - - -class BindAlarmTemplateRequestSchema(schema.RequestSchema): - """ BindAlarmTemplate - 绑定告警模板 - """ - - fields = { - "AlarmTemplateID": fields.Str(required=True, dump_to="AlarmTemplateID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceIDs": fields.List(fields.Str()), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class BindAlarmTemplateResponseSchema(schema.ResponseSchema): - """ BindAlarmTemplate - 绑定告警模板 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: BindEIP - -绑定UCoudStack外网IP -""" - - -class BindEIPRequestSchema(schema.RequestSchema): - """ BindEIP - 绑定UCoudStack外网IP - """ - - fields = { - "EIPID": fields.Str(required=True, dump_to="EIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class BindEIPResponseSchema(schema.ResponseSchema): - """ BindEIP - 绑定UCoudStack外网IP - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: BindPhysicalIP - -绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。 -""" - - -class BindPhysicalIPRequestSchema(schema.RequestSchema): - """ BindPhysicalIP - 绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。 - """ - - fields = { - "PhysicalIPID": fields.Str(required=True, dump_to="PhysicalIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class BindPhysicalIPResponseSchema(schema.ResponseSchema): - """ BindPhysicalIP - 绑定物理 IP ,被绑定的资源必须处于运行中或有效状态。 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: BindSecurityGroup - -绑定安全组 -""" - - -class BindSecurityGroupRequestSchema(schema.RequestSchema): - """ BindSecurityGroup - 绑定安全组 - """ - - fields = { - "NICID": fields.Str(required=False, dump_to="NICID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "SGID": fields.Str(required=True, dump_to="SGID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class BindSecurityGroupResponseSchema(schema.ResponseSchema): - """ BindSecurityGroup - 绑定安全组 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: CloneDisk - -克隆硬盘 -""" - - -class CloneDiskRequestSchema(schema.RequestSchema): - """ CloneDisk - 克隆硬盘 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "Name": fields.Str(required=True, dump_to="Name"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SrcID": fields.Str(required=True, dump_to="SrcID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CloneDiskResponseSchema(schema.ResponseSchema): - """ CloneDisk - 克隆硬盘 - """ - - fields = { - "DiskID": fields.Str(required=True, load_from="DiskID"), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: CreateCertificate - -创建证书 -""" - - -class CreateCertificateRequestSchema(schema.RequestSchema): - """ CreateCertificate - 创建证书 - """ - - fields = { - "Certificate": fields.Str(required=True, dump_to="Certificate"), - "CertificateType": fields.Str(required=True, dump_to="CertificateType"), - "Name": fields.Str(required=True, dump_to="Name"), - "PrivateKey": fields.Str(required=False, dump_to="PrivateKey"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateCertificateResponseSchema(schema.ResponseSchema): - """ CreateCertificate - 创建证书 - """ - - fields = { - "CertificateID": fields.Str(required=True, load_from="CertificateID"), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: CreateCustomImage - -创建自制镜像 -""" - - -class CreateCustomImageRequestSchema(schema.RequestSchema): - """ CreateCustomImage - 创建自制镜像 - """ - - fields = { - "ImageDescription": fields.Str( - required=False, dump_to="ImageDescription" - ), - "ImageName": fields.Str(required=True, dump_to="ImageName"), - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateCustomImageResponseSchema(schema.ResponseSchema): - """ CreateCustomImage - 创建自制镜像 - """ - - fields = { - "ImageID": fields.Str(required=True, load_from="ImageID"), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: CreateDisk - -创建硬盘 -""" - - -class CreateDiskRequestSchema(schema.RequestSchema): - """ CreateDisk - 创建硬盘 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "Name": fields.Str(required=True, dump_to="Name"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SetType": fields.Str(required=True, dump_to="SetType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateDiskResponseSchema(schema.ResponseSchema): - """ CreateDisk - 创建硬盘 - """ - - fields = { - "DiskID": fields.Str(required=True, load_from="DiskID"), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: CreateLB - -创建负载均衡 -""" - - -class CreateLBRequestSchema(schema.RequestSchema): - """ CreateLB - 创建负载均衡 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "EIPID": fields.Str(required=False, dump_to="EIPID"), - "LBType": fields.Str(required=True, dump_to="LBType"), - "Name": fields.Str(required=True, dump_to="Name"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "SGID": fields.Str(required=False, dump_to="SGID"), - "SubnetID": fields.Str(required=True, dump_to="SubnetID"), - "VMType": fields.Str(required=True, dump_to="VMType"), - "VPCID": fields.Str(required=True, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateLBResponseSchema(schema.ResponseSchema): - """ CreateLB - 创建负载均衡 - """ - - fields = { - "LBID": fields.Str(required=False, load_from="LBID"), - "Message": fields.Str(required=False, load_from="Message"), - } - - -""" -API: CreateNATGW - -创建NAT网关 -""" - - -class CreateNATGWRequestSchema(schema.RequestSchema): - """ CreateNATGW - 创建NAT网关 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "EIPID": fields.Str(required=True, dump_to="EIPID"), - "Name": fields.Str(required=True, dump_to="Name"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "SGID": fields.Str(required=True, dump_to="SGID"), - "SubnetID": fields.Str(required=True, dump_to="SubnetID"), - "VMType": fields.Str(required=True, dump_to="VMType"), - "VPCID": fields.Str(required=True, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateNATGWResponseSchema(schema.ResponseSchema): - """ CreateNATGW - 创建NAT网关 - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "NATGWID": fields.Str(required=False, load_from="NATGWID"), - } - - -""" -API: CreateNATGWRule - -添加NAT网关白名单 -""" - - -class CreateNATGWRuleRequestSchema(schema.RequestSchema): - """ CreateNATGWRule - 添加NAT网关白名单 - """ - - fields = { - "BindResourceID": fields.Str(required=True, dump_to="BindResourceID"), - "NATGWID": fields.Str(required=True, dump_to="NATGWID"), - "NATGWType": fields.Str(required=True, dump_to="NATGWType"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateNATGWRuleResponseSchema(schema.ResponseSchema): - """ CreateNATGWRule - 添加NAT网关白名单 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "RuleID": fields.Str(required=False, load_from="RuleID"), - } - - -""" -API: CreatePhysicalIP - -创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。 -""" - - -class CreatePhysicalIPRequestSchema(schema.RequestSchema): - """ CreatePhysicalIP - 创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。 - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "OperatorName": fields.Str(required=True, dump_to="OperatorName"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreatePhysicalIPResponseSchema(schema.ResponseSchema): - """ CreatePhysicalIP - 创建物理 IP ,需确保平台已配置物理 IP 线路相关信息及物理网络联通性。 - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "PhysicalIPID": fields.Str(required=True, load_from="PhysicalIPID"), - } - - -""" -API: CreateRS - -为负载均衡的 VServer 添加后端服务节点。 -""" - - -class CreateRSRequestSchema(schema.RequestSchema): - """ CreateRS - 为负载均衡的 VServer 添加后端服务节点。 - """ - - fields = { - "BindResourceID": fields.Str(required=True, dump_to="BindResourceID"), - "LBID": fields.Str(required=True, dump_to="LBID"), - "Port": fields.Int(required=True, dump_to="Port"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Weight": fields.Int(required=True, dump_to="Weight"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateRSResponseSchema(schema.ResponseSchema): - """ CreateRS - 为负载均衡的 VServer 添加后端服务节点。 - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "RSID": fields.Str(required=False, load_from="RSID"), - } - - -""" -API: CreateSecurityGroup - -创建安全组 -""" - - -class CreateSecurityGroupRequestSchema(schema.RequestSchema): - """ CreateSecurityGroup - 创建安全组 - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Rule": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateSecurityGroupResponseSchema(schema.ResponseSchema): - """ CreateSecurityGroup - 创建安全组 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "SGID": fields.Str(required=False, load_from="SGID"), - } - - -""" -API: CreateSecurityGroupRule - -创建安全组规则 -""" - - -class CreateSecurityGroupRuleRequestSchema(schema.RequestSchema): - """ CreateSecurityGroupRule - 创建安全组规则 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "Rules": fields.List(fields.Str()), - "SGID": fields.Str(required=True, dump_to="SGID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateSecurityGroupRuleResponseSchema(schema.ResponseSchema): - """ CreateSecurityGroupRule - 创建安全组规则 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "SGRuleID": fields.Str(required=False, load_from="SGRuleID"), - } - - -""" -API: CreateSnapshot - -创建硬盘快照 -""" - - -class CreateSnapshotRequestSchema(schema.RequestSchema): - """ CreateSnapshot - 创建硬盘快照 - """ - - fields = { - "DiskID": fields.Str(required=True, dump_to="DiskID"), - "Name": fields.Str(required=True, dump_to="Name"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateSnapshotResponseSchema(schema.ResponseSchema): - """ CreateSnapshot - 创建硬盘快照 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "SnapshotID": fields.Str(required=True, load_from="SnapshotID"), - } - - -""" -API: CreateSubnet - -创建子网 -""" - - -class CreateSubnetRequestSchema(schema.RequestSchema): - """ CreateSubnet - 创建子网 - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "Network": fields.Str(required=True, dump_to="Network"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "VPCID": fields.Str(required=True, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateSubnetResponseSchema(schema.ResponseSchema): - """ CreateSubnet - 创建子网 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "SubnetID": fields.Str(required=False, load_from="SubnetID"), - } - - -""" -API: CreateUser - -管理员添加账号 -""" - - -class CreateUserRequestSchema(schema.RequestSchema): - """ CreateUser - 管理员添加账号 - """ - - fields = { - "PassWord": fields.Str(required=True, dump_to="PassWord"), - "UserEmail": fields.Str(required=True, dump_to="UserEmail"), - } - - -class CreateUserResponseSchema(schema.ResponseSchema): - """ CreateUser - 管理员添加账号 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "UserID": fields.Int(required=False, load_from="UserID"), - } - - -""" -API: CreateVMInstance - -创建虚拟机 -""" - - -class CreateVMInstanceRequestSchema(schema.RequestSchema): - """ CreateVMInstance - 创建虚拟机 - """ - - fields = { - "Bandwidth": fields.Str(required=False, dump_to="Bandwidth"), - "BootDiskSetType": fields.Str(required=True, dump_to="BootDiskSetType"), - "CPU": fields.Int(required=True, dump_to="CPU"), - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "DataDiskSetType": fields.Str(required=True, dump_to="DataDiskSetType"), - "DataDiskSpace": fields.Int(required=False, dump_to="DataDiskSpace"), - "GPU": fields.Int(required=False, dump_to="GPU"), - "IPVersion": fields.Str(required=False, dump_to="IPVersion"), - "ImageID": fields.Str(required=True, dump_to="ImageID"), - "InternalIP": fields.Str(required=False, dump_to="InternalIP"), - "InternetIP": fields.Str(required=False, dump_to="InternetIP"), - "LANSGID": fields.Str(required=False, dump_to="LANSGID"), - "Memory": fields.Int(required=True, dump_to="Memory"), - "Name": fields.Str(required=True, dump_to="Name"), - "OperatorName": fields.Str(required=False, dump_to="OperatorName"), - "Password": fields.Str(required=True, dump_to="Password"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetID": fields.Str(required=True, dump_to="SubnetID"), - "VMType": fields.Str(required=True, dump_to="VMType"), - "VPCID": fields.Str(required=True, dump_to="VPCID"), - "WANSGID": fields.Str(required=True, dump_to="WANSGID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateVMInstanceResponseSchema(schema.ResponseSchema): - """ CreateVMInstance - 创建虚拟机 - """ - - fields = { - "DiskID": fields.Str(required=False, load_from="DiskID"), - "EIPID": fields.Str(required=False, load_from="EIPID"), - "Message": fields.Str(required=False, load_from="Message"), - "VMID": fields.Str(required=False, load_from="VMID"), - } - - -""" -API: CreateVPC - -创建VPC -""" - - -class CreateVPCRequestSchema(schema.RequestSchema): - """ CreateVPC - 创建VPC - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "Network": fields.Str(required=True, dump_to="Network"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateVPCResponseSchema(schema.ResponseSchema): - """ CreateVPC - 创建VPC - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "VPCID": fields.Str(required=False, load_from="VPCID"), - } - - -""" -API: CreateVS - -创建负载均衡VServer -""" - - -class CreateVSRequestSchema(schema.RequestSchema): - """ CreateVS - 创建负载均衡VServer - """ - - fields = { - "CACertificateID": fields.Str( - required=False, dump_to="CACertificateID" - ), - "Domain": fields.Str(required=False, dump_to="Domain"), - "HealthcheckType": fields.Str(required=True, dump_to="HealthcheckType"), - "KeepaliveTimeout": fields.Int( - required=False, dump_to="KeepaliveTimeout" - ), - "LBID": fields.Str(required=True, dump_to="LBID"), - "Path": fields.Str(required=False, dump_to="Path"), - "PersistenceKey": fields.Str(required=False, dump_to="PersistenceKey"), - "PersistenceType": fields.Str( - required=False, dump_to="PersistenceType" - ), - "Port": fields.Int(required=True, dump_to="Port"), - "Protocol": fields.Str(required=True, dump_to="Protocol"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLMode": fields.Str(required=False, dump_to="SSLMode"), - "Scheduler": fields.Str(required=True, dump_to="Scheduler"), - "ServerCertificateID": fields.Str( - required=False, dump_to="ServerCertificateID" - ), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateVSResponseSchema(schema.ResponseSchema): - """ CreateVS - 创建负载均衡VServer - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "VSID": fields.Str(required=False, load_from="VSID"), - } - - -""" -API: CreateVSPolicy - -创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 -""" - - -class CreateVSPolicyRequestSchema(schema.RequestSchema): - """ CreateVSPolicy - 创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = { - "Domain": fields.Str(required=False, dump_to="Domain"), - "LBID": fields.Str(required=True, dump_to="LBID"), - "Path": fields.Str(required=False, dump_to="Path"), - "RSIDs": fields.List(fields.Str()), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateVSPolicyResponseSchema(schema.ResponseSchema): - """ CreateVSPolicy - 创建七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "PolicyID": fields.Str(required=False, load_from="PolicyID"), - } - - -""" -API: DeleteCertificate - -删除证书 -""" - - -class DeleteCertificateRequestSchema(schema.RequestSchema): - """ DeleteCertificate - 删除证书 - """ - - fields = { - "CertificateID": fields.Str(required=True, dump_to="CertificateID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteCertificateResponseSchema(schema.ResponseSchema): - """ DeleteCertificate - 删除证书 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteCustomImage - -删除自制镜像 -""" - - -class DeleteCustomImageRequestSchema(schema.RequestSchema): - """ DeleteCustomImage - 删除自制镜像 - """ - - fields = { - "ImageID": fields.Str(required=True, dump_to="ImageID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteCustomImageResponseSchema(schema.ResponseSchema): - """ DeleteCustomImage - 删除自制镜像 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteDisk - -删除硬盘 -""" - - -class DeleteDiskRequestSchema(schema.RequestSchema): - """ DeleteDisk - 删除硬盘 - """ - - fields = { - "DiskID": fields.Str(required=True, dump_to="DiskID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteDiskResponseSchema(schema.ResponseSchema): - """ DeleteDisk - 删除硬盘 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteLB - -删除负载均衡 -""" - - -class DeleteLBRequestSchema(schema.RequestSchema): - """ DeleteLB - 删除负载均衡 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteLBResponseSchema(schema.ResponseSchema): - """ DeleteLB - 删除负载均衡 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteNATGW - -删除NAT网关 -""" - - -class DeleteNATGWRequestSchema(schema.RequestSchema): - """ DeleteNATGW - 删除NAT网关 - """ - - fields = { - "NATGWID": fields.Str(required=True, dump_to="NATGWID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteNATGWResponseSchema(schema.ResponseSchema): - """ DeleteNATGW - 删除NAT网关 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteNATGWRule - -删除NAT网关白名单 -""" - - -class DeleteNATGWRuleRequestSchema(schema.RequestSchema): - """ DeleteNATGWRule - 删除NAT网关白名单 - """ - - fields = { - "NATGWID": fields.Str(required=True, dump_to="NATGWID"), - "Region": fields.Str(required=True, dump_to="Region"), - "RuleID": fields.Str(required=True, dump_to="RuleID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteNATGWRuleResponseSchema(schema.ResponseSchema): - """ DeleteNATGWRule - 删除NAT网关白名单 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeletePhysicalIP - -删除物理IP -""" - - -class DeletePhysicalIPRequestSchema(schema.RequestSchema): - """ DeletePhysicalIP - 删除物理IP - """ - - fields = { - "PhysicalIPID": fields.Str(required=True, dump_to="PhysicalIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeletePhysicalIPResponseSchema(schema.ResponseSchema): - """ DeletePhysicalIP - 删除物理IP - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteRS - -移除负载均衡的单个服务节点 -""" - - -class DeleteRSRequestSchema(schema.RequestSchema): - """ DeleteRS - 移除负载均衡的单个服务节点 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "RSID": fields.Str(required=True, dump_to="RSID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteRSResponseSchema(schema.ResponseSchema): - """ DeleteRS - 移除负载均衡的单个服务节点 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteSecurityGroup - -删除安全组 -""" - - -class DeleteSecurityGroupRequestSchema(schema.RequestSchema): - """ DeleteSecurityGroup - 删除安全组 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "SGID": fields.Str(required=True, dump_to="SGID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteSecurityGroupResponseSchema(schema.ResponseSchema): - """ DeleteSecurityGroup - 删除安全组 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteSecurityGroupRule - -删除安全组规则 -""" - - -class DeleteSecurityGroupRuleRequestSchema(schema.RequestSchema): - """ DeleteSecurityGroupRule - 删除安全组规则 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "SGID": fields.Str(required=True, dump_to="SGID"), - "SGRuleID": fields.Str(required=True, dump_to="SGRuleID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteSecurityGroupRuleResponseSchema(schema.ResponseSchema): - """ DeleteSecurityGroupRule - 删除安全组规则 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteSnapshot - -删除快照,仅支持状态为正常的快照进行删除操作。 -""" - - -class DeleteSnapshotRequestSchema(schema.RequestSchema): - """ DeleteSnapshot - 删除快照,仅支持状态为正常的快照进行删除操作。 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "SnapshotID": fields.Str(required=True, dump_to="SnapshotID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteSnapshotResponseSchema(schema.ResponseSchema): - """ DeleteSnapshot - 删除快照,仅支持状态为正常的快照进行删除操作。 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteSubnet - -删除子网 -""" - - -class DeleteSubnetRequestSchema(schema.RequestSchema): - """ DeleteSubnet - 删除子网 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetID": fields.Str(required=True, dump_to="SubnetID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteSubnetResponseSchema(schema.ResponseSchema): - """ DeleteSubnet - 删除子网 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteVMInstance - -删除虚拟机 -""" - - -class DeleteVMInstanceRequestSchema(schema.RequestSchema): - """ DeleteVMInstance - 删除虚拟机 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteVMInstanceResponseSchema(schema.ResponseSchema): - """ DeleteVMInstance - 删除虚拟机 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: DeleteVPC - -删除VPC -""" - - -class DeleteVPCRequestSchema(schema.RequestSchema): - """ DeleteVPC - 删除VPC - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "VPCID": fields.Str(required=True, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteVPCResponseSchema(schema.ResponseSchema): - """ DeleteVPC - 删除VPC - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteVS - -删除VServer -""" - - -class DeleteVSRequestSchema(schema.RequestSchema): - """ DeleteVS - 删除VServer - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteVSResponseSchema(schema.ResponseSchema): - """ DeleteVS - 删除VServer - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteVSPolicy - -删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 -""" - - -class DeleteVSPolicyRequestSchema(schema.RequestSchema): - """ DeleteVSPolicy - 删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "PolicyID": fields.Str(required=True, dump_to="PolicyID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteVSPolicyResponseSchema(schema.ResponseSchema): - """ DeleteVSPolicy - 删除七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: DescribeCertificate - -查询证书 -""" - - -class DescribeCertificateRequestSchema(schema.RequestSchema): - """ DescribeCertificate - 查询证书 - """ - - fields = { - "CertificateIDs": fields.List(fields.Str()), - "CertificateType": fields.Str( - required=False, dump_to="CertificateType" - ), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeCertificateResponseSchema(schema.ResponseSchema): - """ DescribeCertificate - 查询证书 - """ - - fields = { - "Infos": fields.List( - models.CertificateInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeDisk - -获取硬盘信息 -""" - - -class DescribeDiskRequestSchema(schema.RequestSchema): - """ DescribeDisk - 获取硬盘信息 - """ - - fields = { - "DiskIDs": fields.List(fields.Str()), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeDiskResponseSchema(schema.ResponseSchema): - """ DescribeDisk - 获取硬盘信息 - """ - - fields = { - "Infos": fields.List( - models.DiskInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeEIP - -获取外网IP的信息 -""" - - -class DescribeEIPRequestSchema(schema.RequestSchema): - """ DescribeEIP - 获取外网IP的信息 - """ - - fields = { - "EIPIDs": fields.List(fields.Str()), - "Limit": fields.Str(required=False, dump_to="Limit"), - "Offset": fields.Str(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeEIPResponseSchema(schema.ResponseSchema): - """ DescribeEIP - 获取外网IP的信息 - """ - - fields = { - "Infos": fields.List( - models.EIPInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "Totalcount": fields.Int(required=False, load_from="Totalcount"), - } - - -""" -API: DescribeImage - -获取镜像信息,包括默认镜像和自制镜像。 -""" - - -class DescribeImageRequestSchema(schema.RequestSchema): - """ DescribeImage - 获取镜像信息,包括默认镜像和自制镜像。 - """ - - fields = { - "ImageIDs": fields.List(fields.Str()), - "ImageType": fields.Str(required=False, dump_to="ImageType"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeImageResponseSchema(schema.ResponseSchema): - """ DescribeImage - 获取镜像信息,包括默认镜像和自制镜像。 - """ - - fields = { - "Action": fields.Str(required=True, load_from="Action"), - "Infos": fields.List( - models.ImageInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "RetCode": fields.Int(required=True, load_from="RetCode"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeLB - -获取负载均衡信息 -""" - - -class DescribeLBRequestSchema(schema.RequestSchema): - """ DescribeLB - 获取负载均衡信息 - """ - - fields = { - "LBIDs": fields.List(fields.Str()), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetID": fields.Str(required=False, dump_to="SubnetID"), - "VPCID": fields.Str(required=False, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeLBResponseSchema(schema.ResponseSchema): - """ DescribeLB - 获取负载均衡信息 - """ - - fields = { - "Infos": fields.List( - models.LBInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeMetric - -获取资源监控信息 -""" - - -class DescribeMetricRequestSchema(schema.RequestSchema): - """ DescribeMetric - 获取资源监控信息 - """ - - fields = { - "BeginTime": fields.Str(required=True, dump_to="BeginTime"), - "EndTime": fields.Str(required=True, dump_to="EndTime"), - "MetricName": fields.List(fields.Str()), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeMetricResponseSchema(schema.ResponseSchema): - """ DescribeMetric - 获取资源监控信息 - """ - - fields = { - "Infos": fields.List( - models.MetricInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=False, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeNATGW - -获取NAT网关信息 -""" - - -class DescribeNATGWRequestSchema(schema.RequestSchema): - """ DescribeNATGW - 获取NAT网关信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "NATGWIDs": fields.List(fields.Str()), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeNATGWResponseSchema(schema.ResponseSchema): - """ DescribeNATGW - 获取NAT网关信息 - """ - - fields = { - "Infos": fields.List( - models.NATGWInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeNATGWRule - -获取NAT网关白名单信息 -""" - - -class DescribeNATGWRuleRequestSchema(schema.RequestSchema): - """ DescribeNATGWRule - 获取NAT网关白名单信息 - """ - - fields = { - "BindResourceIDs": fields.List(fields.Str()), - "Limit": fields.Int(required=False, dump_to="Limit"), - "NATGWID": fields.Str(required=True, dump_to="NATGWID"), - "NATGWType": fields.Str(required=True, dump_to="NATGWType"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "RuleIDs": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeNATGWRuleResponseSchema(schema.ResponseSchema): - """ DescribeNATGWRule - 获取NAT网关白名单信息 - """ - - fields = { - "Infos": fields.List( - models.NATGWRuleInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeOPLogs - -查询操作日志 -""" - - -class DescribeOPLogsRequestSchema(schema.RequestSchema): - """ DescribeOPLogs - 查询操作日志 - """ - - fields = { - "BeginTime": fields.Int(required=True, dump_to="BeginTime"), - "EndTime": fields.Int(required=True, dump_to="EndTime"), - "IsSuccess": fields.Str(required=False, dump_to="IsSuccess"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=False, dump_to="ResourceID"), - "ResourceType": fields.Str(required=False, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeOPLogsResponseSchema(schema.ResponseSchema): - """ DescribeOPLogs - 查询操作日志 - """ - - fields = { - "Infos": fields.List( - models.OPLogInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribePhysicalIP - -获取物理IP信息 -""" - - -class DescribePhysicalIPRequestSchema(schema.RequestSchema): - """ DescribePhysicalIP - 获取物理IP信息 - """ - - fields = { - "Limit": fields.Str(required=False, dump_to="Limit"), - "Offset": fields.Str(required=False, dump_to="Offset"), - "PhysicalIPIDs": fields.List(fields.Str()), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribePhysicalIPResponseSchema(schema.ResponseSchema): - """ DescribePhysicalIP - 获取物理IP信息 - """ - - fields = { - "Infos": fields.List( - models.PhysicalIPInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeRS - -获取负载均衡服务的服务节点信息 -""" - - -class DescribeRSRequestSchema(schema.RequestSchema): - """ DescribeRS - 获取负载均衡服务的服务节点信息 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "RSIDs": fields.List(fields.Str()), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=False, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeRSResponseSchema(schema.ResponseSchema): - """ DescribeRS - 获取负载均衡服务的服务节点信息 - """ - - fields = { - "Infos": fields.List( - models.RSInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeRecycledResource - -查询回收站资源 -""" - - -class DescribeRecycledResourceRequestSchema(schema.RequestSchema): - """ DescribeRecycledResource - 查询回收站资源 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceIDs": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeRecycledResourceResponseSchema(schema.ResponseSchema): - """ DescribeRecycledResource - 查询回收站资源 - """ - - fields = { - "Infos": fields.List( - models.RecycledResourceInfoSchema(), - required=True, - load_from="Infos", - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeSecurityGroup - -查询安全组信息 -""" - - -class DescribeSecurityGroupRequestSchema(schema.RequestSchema): - """ DescribeSecurityGroup - 查询安全组信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "SGIDs": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeSecurityGroupResponseSchema(schema.ResponseSchema): - """ DescribeSecurityGroup - 查询安全组信息 - """ - - fields = { - "Infos": fields.List( - models.SGInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeStorageType - -查询存储类型 -""" - - -class DescribeStorageTypeRequestSchema(schema.RequestSchema): - """ DescribeStorageType - 查询存储类型 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeStorageTypeResponseSchema(schema.ResponseSchema): - """ DescribeStorageType - 查询存储类型 - """ - - fields = { - "Infos": fields.List( - models.StorageTypeInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeSubnet - -查询子网信息 -""" - - -class DescribeSubnetRequestSchema(schema.RequestSchema): - """ DescribeSubnet - 查询子网信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetIDs": fields.List(fields.Str()), - "VPCID": fields.Str(required=False, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeSubnetResponseSchema(schema.ResponseSchema): - """ DescribeSubnet - 查询子网信息 - """ - - fields = { - "Infos": fields.List( - models.SubnetInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUser - -查询租户信息 -""" - - -class DescribeUserRequestSchema(schema.RequestSchema): - """ DescribeUser - 查询租户信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "UserIDs": fields.List(fields.Int()), - } - - -class DescribeUserResponseSchema(schema.ResponseSchema): - """ DescribeUser - 查询租户信息 - """ - - fields = { - "Infos": fields.List( - models.UserInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeVMInstance - -查询虚拟机 -""" - - -class DescribeVMInstanceRequestSchema(schema.RequestSchema): - """ DescribeVMInstance - 查询虚拟机 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Str(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetID": fields.Str(required=False, dump_to="SubnetID"), - "VMIDs": fields.List(fields.Str()), - "VPCID": fields.Str(required=False, dump_to="VPCID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeVMInstanceResponseSchema(schema.ResponseSchema): - """ DescribeVMInstance - 查询虚拟机 - """ - - fields = { - "Infos": fields.List( - models.VMInstanceInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=False, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVMType - -查询主机机型 -""" - - -class DescribeVMTypeRequestSchema(schema.RequestSchema): - """ DescribeVMType - 查询主机机型 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeVMTypeResponseSchema(schema.ResponseSchema): - """ DescribeVMType - 查询主机机型 - """ - - fields = { - "Infos": fields.List( - models.VMTypeInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVPC - -查询VPC信息 -""" - - -class DescribeVPCRequestSchema(schema.RequestSchema): - """ DescribeVPC - 查询VPC信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCIDs": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeVPCResponseSchema(schema.ResponseSchema): - """ DescribeVPC - 查询VPC信息 - """ - - fields = { - "Infos": fields.List( - models.VPCInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVS - -获取负载均衡 VServer 信息 -""" - - -class DescribeVSRequestSchema(schema.RequestSchema): - """ DescribeVS - 获取负载均衡 VServer 信息 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSIDs": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeVSResponseSchema(schema.ResponseSchema): - """ DescribeVS - 获取负载均衡 VServer 信息 - """ - - fields = { - "Infos": fields.List( - models.VSInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeVSPolicy - -获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。 -""" - - -class DescribeVSPolicyRequestSchema(schema.RequestSchema): - """ DescribeVSPolicy - 获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "PolicyIDs": fields.List(fields.Str()), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=False, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeVSPolicyResponseSchema(schema.ResponseSchema): - """ DescribeVSPolicy - 获取七层负载均衡内容转发规则信息,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = { - "Infos": fields.List( - models.VSPolicyInfoSchema(), required=True, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DetachDisk - -解绑UClouStack硬盘 -""" - - -class DetachDiskRequestSchema(schema.RequestSchema): - """ DetachDisk - 解绑UClouStack硬盘 - """ - - fields = { - "DiskID": fields.Str(required=True, dump_to="DiskID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DetachDiskResponseSchema(schema.ResponseSchema): - """ DetachDisk - 解绑UClouStack硬盘 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DisableRS - -禁用负载均衡的单个服务节点 -""" - - -class DisableRSRequestSchema(schema.RequestSchema): - """ DisableRS - 禁用负载均衡的单个服务节点 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "RSID": fields.Str(required=True, dump_to="RSID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DisableRSResponseSchema(schema.ResponseSchema): - """ DisableRS - 禁用负载均衡的单个服务节点 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: EnableRS - -启用负载均衡的单个服务节点 -""" - - -class EnableRSRequestSchema(schema.RequestSchema): - """ EnableRS - 启用负载均衡的单个服务节点 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "RSID": fields.Str(required=True, dump_to="RSID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class EnableRSResponseSchema(schema.ResponseSchema): - """ EnableRS - 启用负载均衡的单个服务节点 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: GetDiskPrice - -获取硬盘价格 -""" - - -class GetDiskPriceRequestSchema(schema.RequestSchema): - """ GetDiskPrice - 获取硬盘价格 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SetType": fields.Str(required=True, dump_to="SetType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class GetDiskPriceResponseSchema(schema.ResponseSchema): - """ GetDiskPrice - 获取硬盘价格 - """ - - fields = { - "Infos": fields.List( - models.PriceInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: GetEIPPrice - -获取外网IP价格 -""" - - -class GetEIPPriceRequestSchema(schema.RequestSchema): - """ GetEIPPrice - 获取外网IP价格 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "OpertatorName": fields.Str(required=True, dump_to="OpertatorName"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class GetEIPPriceResponseSchema(schema.ResponseSchema): - """ GetEIPPrice - 获取外网IP价格 - """ - - fields = { - "Infos": fields.List( - models.PriceInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: GetVMInstancePrice - -获取虚拟机价格 -""" - - -class GetVMInstancePriceRequestSchema(schema.RequestSchema): - """ GetVMInstancePrice - 获取虚拟机价格 - """ - - fields = { - "BootDiskSetType": fields.Str(required=True, dump_to="BootDiskSetType"), - "CPU": fields.Int(required=True, dump_to="CPU"), - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "DataDiskSetType": fields.Str(required=True, dump_to="DataDiskSetType"), - "DataDiskSpace": fields.Int(required=True, dump_to="DataDiskSpace"), - "GPU": fields.Int(required=False, dump_to="GPU"), - "ImageID": fields.Str(required=True, dump_to="ImageID"), - "Memory": fields.Int(required=True, dump_to="Memory"), - "OSType": fields.Str(required=True, dump_to="OSType"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "VMType": fields.Str(required=True, dump_to="VMType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class GetVMInstancePriceResponseSchema(schema.ResponseSchema): - """ GetVMInstancePrice - 获取虚拟机价格 - """ - - fields = { - "Infos": fields.List( - models.PriceInfoSchema(), required=False, load_from="Infos" - ), - "Message": fields.Str(required=False, load_from="Message"), - } - - -""" -API: ModifyEIPBandwidth - -调整外网IP带宽 -""" - - -class ModifyEIPBandwidthRequestSchema(schema.RequestSchema): - """ ModifyEIPBandwidth - 调整外网IP带宽 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "EIPID": fields.Str(required=True, dump_to="EIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ModifyEIPBandwidthResponseSchema(schema.ResponseSchema): - """ ModifyEIPBandwidth - 调整外网IP带宽 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: ModifyNameAndRemark - -修改资源名称和备注 -""" - - -class ModifyNameAndRemarkRequestSchema(schema.RequestSchema): - """ ModifyNameAndRemark - 修改资源名称和备注 - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ModifyNameAndRemarkResponseSchema(schema.ResponseSchema): - """ ModifyNameAndRemark - 修改资源名称和备注 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: PoweroffVMInstance - -断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。 -""" - - -class PoweroffVMInstanceRequestSchema(schema.RequestSchema): - """ PoweroffVMInstance - 断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class PoweroffVMInstanceResponseSchema(schema.ResponseSchema): - """ PoweroffVMInstance - 断电虚拟机,可能导致丢失数据甚至损坏操作系统,仅适用于虚拟机死机及级端测试场景。 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: Recharge - -管理员给租户充值 -""" - - -class RechargeRequestSchema(schema.RequestSchema): - """ Recharge - 管理员给租户充值 - """ - - fields = { - "Amount": fields.Int(required=True, dump_to="Amount"), - "FromType": fields.Str(required=True, dump_to="FromType"), - "SerialNo": fields.Str(required=True, dump_to="SerialNo"), - "UserID": fields.Int(required=True, dump_to="UserID"), - } - - -class RechargeResponseSchema(schema.ResponseSchema): - """ Recharge - 管理员给租户充值 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: ReinstallVMInstance - -重装系统,关机的虚拟机才可以重装系统 -""" - - -class ReinstallVMInstanceRequestSchema(schema.RequestSchema): - """ ReinstallVMInstance - 重装系统,关机的虚拟机才可以重装系统 - """ - - fields = { - "ImageID": fields.Str(required=True, dump_to="ImageID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ReinstallVMInstanceResponseSchema(schema.ResponseSchema): - """ ReinstallVMInstance - 重装系统,关机的虚拟机才可以重装系统 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: ReleaseEIP - -删除外网IP -""" - - -class ReleaseEIPRequestSchema(schema.RequestSchema): - """ ReleaseEIP - 删除外网IP - """ - - fields = { - "EIPID": fields.Str(required=True, dump_to="EIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ReleaseEIPResponseSchema(schema.ResponseSchema): - """ ReleaseEIP - 删除外网IP - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: RenewResource - -续费回收站资源 -""" - - -class RenewResourceRequestSchema(schema.RequestSchema): - """ RenewResource - 续费回收站资源 - """ - - fields = { - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class RenewResourceResponseSchema(schema.ResponseSchema): - """ RenewResource - 续费回收站资源 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: ResetVMInstancePassword - -重置虚拟机密码,主机必须开机才可以重置密码 -""" - - -class ResetVMInstancePasswordRequestSchema(schema.RequestSchema): - """ ResetVMInstancePassword - 重置虚拟机密码,主机必须开机才可以重置密码 - """ - - fields = { - "Password": fields.Str(required=True, dump_to="Password"), - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ResetVMInstancePasswordResponseSchema(schema.ResponseSchema): - """ ResetVMInstancePassword - 重置虚拟机密码,主机必须开机才可以重置密码 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: ResizeVMConfig - -修改虚拟机配置 -""" - - -class ResizeVMConfigRequestSchema(schema.RequestSchema): - """ ResizeVMConfig - 修改虚拟机配置 - """ - - fields = { - "CPU": fields.Int(required=True, dump_to="CPU"), - "Memory": fields.Int(required=True, dump_to="Memory"), - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ResizeVMConfigResponseSchema(schema.ResponseSchema): - """ ResizeVMConfig - 修改虚拟机配置 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: RestartVMInstance - -重启虚拟机 -""" - - -class RestartVMInstanceRequestSchema(schema.RequestSchema): - """ RestartVMInstance - 重启虚拟机 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class RestartVMInstanceResponseSchema(schema.ResponseSchema): - """ RestartVMInstance - 重启虚拟机 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: RollbackResource - -恢复回收站资源 -""" - - -class RollbackResourceRequestSchema(schema.RequestSchema): - """ RollbackResource - 恢复回收站资源 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class RollbackResourceResponseSchema(schema.ResponseSchema): - """ RollbackResource - 恢复回收站资源 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: RollbackSnapshot - -将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。 -""" - - -class RollbackSnapshotRequestSchema(schema.RequestSchema): - """ RollbackSnapshot - 将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。 - """ - - fields = { - "DiskID": fields.Str(required=True, dump_to="DiskID"), - "Region": fields.Str(required=True, dump_to="Region"), - "SnapshotID": fields.Str(required=True, dump_to="SnapshotID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class RollbackSnapshotResponseSchema(schema.ResponseSchema): - """ RollbackSnapshot - 将某个快照内的数据回滚到原云硬盘,仅支持正常状态的快照进行回滚操作,回滚时硬盘必须处于未绑定或其挂载的主机为关机状态。 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: StartVMInstance - -开启虚拟机 -""" - - -class StartVMInstanceRequestSchema(schema.RequestSchema): - """ StartVMInstance - 开启虚拟机 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class StartVMInstanceResponseSchema(schema.ResponseSchema): - """ StartVMInstance - 开启虚拟机 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: StopVMInstance - -关闭虚拟机 -""" - - -class StopVMInstanceRequestSchema(schema.RequestSchema): - """ StopVMInstance - 关闭虚拟机 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "VMID": fields.Str(required=True, dump_to="VMID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class StopVMInstanceResponseSchema(schema.ResponseSchema): - """ StopVMInstance - 关闭虚拟机 - """ - - fields = { - "Message": fields.Str(required=False, load_from="Message"), - "VMID": fields.Str(required=False, load_from="VMID"), - } - - -""" -API: TerminateResource - -销毁资源 -""" - - -class TerminateResourceRequestSchema(schema.RequestSchema): - """ TerminateResource - 销毁资源 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class TerminateResourceResponseSchema(schema.ResponseSchema): - """ TerminateResource - 销毁资源 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: UnBindEIP - -解绑外网IP -""" - - -class UnBindEIPRequestSchema(schema.RequestSchema): - """ UnBindEIP - 解绑外网IP - """ - - fields = { - "EIPID": fields.Str(required=True, dump_to="EIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UnBindEIPResponseSchema(schema.ResponseSchema): - """ UnBindEIP - 解绑外网IP - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UnBindSecurityGroup - -解绑安全组 -""" - - -class UnBindSecurityGroupRequestSchema(schema.RequestSchema): - """ UnBindSecurityGroup - 解绑安全组 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "SGID": fields.Str(required=True, dump_to="SGID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UnBindSecurityGroupResponseSchema(schema.ResponseSchema): - """ UnBindSecurityGroup - 解绑安全组 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UnbindAlarmTemplate - -解绑告警模板 -""" - - -class UnbindAlarmTemplateRequestSchema(schema.RequestSchema): - """ UnbindAlarmTemplate - 解绑告警模板 - """ - - fields = { - "AlarmTemplateID": fields.Str(required=True, dump_to="AlarmTemplateID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceIDs": fields.List(fields.Str()), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UnbindAlarmTemplateResponseSchema(schema.ResponseSchema): - """ UnbindAlarmTemplate - 解绑告警模板 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UnbindPhysicalIP - -解绑物理IP -""" - - -class UnbindPhysicalIPRequestSchema(schema.RequestSchema): - """ UnbindPhysicalIP - 解绑物理IP - """ - - fields = { - "PhysicalIPID": fields.Str(required=True, dump_to="PhysicalIPID"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceID": fields.Str(required=True, dump_to="ResourceID"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UnbindPhysicalIPResponseSchema(schema.ResponseSchema): - """ UnbindPhysicalIP - 解绑物理IP - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UpdateAlarmTemplateRule - -更新告警模板规则 -""" - - -class UpdateAlarmTemplateRuleRequestSchema(schema.RequestSchema): - """ UpdateAlarmTemplateRule - 更新告警模板规则 - """ - - fields = { - "AlarmStrategy": fields.Str(required=True, dump_to="AlarmStrategy"), - "AlarmTemplateID": fields.Str(required=True, dump_to="AlarmTemplateID"), - "AlarmTemplateRuleID": fields.Str( - required=True, dump_to="AlarmTemplateRuleID" - ), - "Compare": fields.Str(required=True, dump_to="Compare"), - "ContactGroupID": fields.Str(required=True, dump_to="ContactGroupID"), - "MetricName": fields.Str(required=True, dump_to="MetricName"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "Threshold": fields.Str(required=True, dump_to="Threshold"), - "TriggerCount": fields.Str(required=True, dump_to="TriggerCount"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpdateAlarmTemplateRuleResponseSchema(schema.ResponseSchema): - """ UpdateAlarmTemplateRule - 更新告警模板规则 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UpdateRS - -修改负载均衡的服务节点 -""" - - -class UpdateRSRequestSchema(schema.RequestSchema): - """ UpdateRS - 修改负载均衡的服务节点 - """ - - fields = { - "LBID": fields.Str(required=True, dump_to="LBID"), - "Port": fields.Int(required=False, dump_to="Port"), - "RSID": fields.Str(required=True, dump_to="RSID"), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Weight": fields.Int(required=False, dump_to="Weight"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpdateRSResponseSchema(schema.ResponseSchema): - """ UpdateRS - 修改负载均衡的服务节点 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: UpdateSecurityGroupRule - -修改安全组规则 -""" - - -class UpdateSecurityGroupRuleRequestSchema(schema.RequestSchema): - """ UpdateSecurityGroupRule - 修改安全组规则 - """ - - fields = { - "Region": fields.Str(required=True, dump_to="Region"), - "Rules": fields.List(fields.Str()), - "SGID": fields.Str(required=True, dump_to="SGID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpdateSecurityGroupRuleResponseSchema(schema.ResponseSchema): - """ UpdateSecurityGroupRule - 修改安全组规则 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UpdateVS - -修改负载均衡VServer -""" - - -class UpdateVSRequestSchema(schema.RequestSchema): - """ UpdateVS - 修改负载均衡VServer - """ - - fields = { - "CACertificateID": fields.Str( - required=False, dump_to="CACertificateID" - ), - "Domain": fields.Str(required=False, dump_to="Domain"), - "HealthcheckType": fields.Str( - required=False, dump_to="HealthcheckType" - ), - "KeepaliveTimeout": fields.Int( - required=False, dump_to="KeepaliveTimeout" - ), - "LBID": fields.Str(required=True, dump_to="LBID"), - "Path": fields.Str(required=False, dump_to="Path"), - "PersistenceKey": fields.Str(required=False, dump_to="PersistenceKey"), - "PersistenceType": fields.Str( - required=False, dump_to="PersistenceType" - ), - "Port": fields.Int(required=False, dump_to="Port"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLMode": fields.Str(required=False, dump_to="SSLMode"), - "Scheduler": fields.Str(required=False, dump_to="Scheduler"), - "ServerCertificateID": fields.Str( - required=False, dump_to="ServerCertificateID" - ), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpdateVSResponseSchema(schema.ResponseSchema): - """ UpdateVS - 修改负载均衡VServer - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: UpdateVSPolicy - -更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 -""" - - -class UpdateVSPolicyRequestSchema(schema.RequestSchema): - """ UpdateVSPolicy - 更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = { - "Domain": fields.Str(required=False, dump_to="Domain"), - "LBID": fields.Str(required=True, dump_to="LBID"), - "Path": fields.Str(required=False, dump_to="Path"), - "PolicyID": fields.Str(required=True, dump_to="PolicyID"), - "RSIDs": fields.List(fields.Str()), - "Region": fields.Str(required=True, dump_to="Region"), - "VSID": fields.Str(required=True, dump_to="VSID"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpdateVSPolicyResponseSchema(schema.ResponseSchema): - """ UpdateVSPolicy - 更新七层负载均衡内容转发规则,仅当 VServer 的监听协议为 HTTP 时有效。 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: UpgradeDisk - -升级硬盘 -""" - - -class UpgradeDiskRequestSchema(schema.RequestSchema): - """ UpgradeDisk - 升级硬盘 - """ - - fields = { - "DiskID": fields.Str(required=True, dump_to="DiskID"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpgradeDiskResponseSchema(schema.ResponseSchema): - """ UpgradeDisk - 升级硬盘 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} diff --git a/ucloud/services/ucloudstack/schemas/models.py b/ucloud/services/ucloudstack/schemas/models.py deleted file mode 100644 index fe8964f..0000000 --- a/ucloud/services/ucloudstack/schemas/models.py +++ /dev/null @@ -1,528 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class BindVSInfoSchema(schema.ResponseSchema): - """ BindVSInfo - 证书绑定的vs信息 - """ - - fields = { - "LBID": fields.Str(required=False, load_from="LBID"), - "LBName": fields.Str(required=False, load_from="LBName"), - "Port": fields.Int(required=False, load_from="Port"), - "Protocol": fields.Str(required=False, load_from="Protocol"), - "VSID": fields.Str(required=False, load_from="VSID"), - } - - -class CertificateInfoSchema(schema.ResponseSchema): - """ CertificateInfo - 证书信息 - """ - - fields = { - "CertificateContent": fields.Str( - required=False, load_from="CertificateContent" - ), - "CertificateID": fields.Str(required=False, load_from="CertificateID"), - "CertificateType": fields.Str( - required=False, load_from="CertificateType" - ), - "CommonName": fields.Str(required=False, load_from="CommonName"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "Fingerprint": fields.Str(required=False, load_from="Fingerprint"), - "Name": fields.Str(required=False, load_from="Name"), - "Privatekey": fields.Str(required=False, load_from="Privatekey"), - "Region": fields.Str(required=False, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "SubjectAlternativeNames": fields.List(fields.Str()), - "VSInfos": fields.List(BindVSInfoSchema()), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class DiskInfoSchema(schema.ResponseSchema): - """ DiskInfo - 磁盘信息 - """ - - fields = { - "AttachResourceID": fields.Str( - required=False, load_from="AttachResourceID" - ), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DiskID": fields.Str(required=False, load_from="DiskID"), - "DiskStatus": fields.Str(required=False, load_from="DiskStatus"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Region": fields.Str(required=False, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "SetType": fields.Str(required=False, load_from="SetType"), - "Size": fields.Int(required=False, load_from="Size"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class EIPInfoSchema(schema.ResponseSchema): - """ EIPInfo - 外网IP信息 - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "BindResourceID": fields.Str( - required=False, load_from="BindResourceID" - ), - "BindResourceType": fields.Str( - required=False, load_from="BindResourceType" - ), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "EIPID": fields.Str(required=False, load_from="EIPID"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "IP": fields.Str(required=False, load_from="IP"), - "Name": fields.Str(required=False, load_from="Name"), - "OperatorName": fields.Str(required=False, load_from="OperatorName"), - "Region": fields.Str(required=False, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "Status": fields.Str(required=False, load_from="Status"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class ImageInfoSchema(schema.ResponseSchema): - """ ImageInfo - 镜像信息 - """ - - fields = { - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "ImageID": fields.Str(required=True, load_from="ImageID"), - "ImageStatus": fields.Str(required=True, load_from="ImageStatus"), - "ImageType": fields.Str(required=True, load_from="ImageType"), - "Name": fields.Str(required=True, load_from="Name"), - "OSDistribution": fields.Str(required=True, load_from="OSDistribution"), - "OSName": fields.Str(required=True, load_from="OSName"), - "OSType": fields.Str(required=True, load_from="OSType"), - "Region": fields.Str(required=True, load_from="Region"), - "SetArch": fields.Str(required=True, load_from="SetArch"), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class LBInfoSchema(schema.ResponseSchema): - """ LBInfo - 负载均衡信息 - """ - - fields = { - "AlarmTemplateID": fields.Str( - required=True, load_from="AlarmTemplateID" - ), - "ChargeType": fields.Str(required=True, load_from="ChargeType"), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "ExpireTime": fields.Int(required=True, load_from="ExpireTime"), - "LBID": fields.Str(required=True, load_from="LBID"), - "LBStatus": fields.Str(required=True, load_from="LBStatus"), - "LBType": fields.Str(required=True, load_from="LBType"), - "Name": fields.Str(required=True, load_from="Name"), - "PrivateIP": fields.Str(required=False, load_from="PrivateIP"), - "PublicIP": fields.Str(required=False, load_from="PublicIP"), - "Region": fields.Str(required=True, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "SGID": fields.Str(required=False, load_from="SGID"), - "SubnetID": fields.Str(required=True, load_from="SubnetID"), - "VPCID": fields.Str(required=True, load_from="VPCID"), - "VSCount": fields.Int(required=True, load_from="VSCount"), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class MetricSetSchema(schema.ResponseSchema): - """ MetricSet - 监控值 - """ - - fields = { - "Timestamp": fields.Int(required=False, load_from="Timestamp"), - "Value": fields.Float(required=False, load_from="Value"), - } - - -class MetricInfoSchema(schema.ResponseSchema): - """ MetricInfo - 监控信息 - """ - - fields = { - "Infos": fields.List(MetricSetSchema()), - "MetricName": fields.Str(required=False, load_from="MetricName"), - } - - -class NATGWInfoSchema(schema.ResponseSchema): - """ NATGWInfo - NAT网关信息 - """ - - fields = { - "AlarmTemplateID": fields.Str( - required=True, load_from="AlarmTemplateID" - ), - "ChargeType": fields.Str(required=True, load_from="ChargeType"), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "EIP": fields.Str(required=True, load_from="EIP"), - "ExpireTime": fields.Int(required=True, load_from="ExpireTime"), - "NATGWID": fields.Str(required=True, load_from="NATGWID"), - "NATGWStatus": fields.Str(required=True, load_from="NATGWStatus"), - "Name": fields.Str(required=True, load_from="Name"), - "Region": fields.Str(required=True, load_from="Region"), - "Remark": fields.Str(required=True, load_from="Remark"), - "SGID": fields.Str(required=True, load_from="SGID"), - "SubnetID": fields.Str(required=True, load_from="SubnetID"), - "VPCID": fields.Str(required=True, load_from="VPCID"), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class NATGWRuleInfoSchema(schema.ResponseSchema): - """ NATGWRuleInfo - NAT网关关联的白名单资源信息 - """ - - fields = { - "BindResourceID": fields.Str(required=True, load_from="BindResourceID"), - "BindResourceType": fields.Str( - required=True, load_from="BindResourceType" - ), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "IP": fields.Str(required=True, load_from="IP"), - "NATGWID": fields.Str(required=True, load_from="NATGWID"), - "NATGWType": fields.Str(required=True, load_from="NATGWType"), - "Name": fields.Str(required=True, load_from="Name"), - "RuleID": fields.Str(required=True, load_from="RuleID"), - "RuleStatus": fields.Str(required=True, load_from="RuleStatus"), - } - - -class OPLogInfoSchema(schema.ResponseSchema): - """ OPLogInfo - 操作日志 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "IsSuccess": fields.Str(required=False, load_from="IsSuccess"), - "OPLogsID": fields.Str(required=False, load_from="OPLogsID"), - "OPName": fields.Str(required=False, load_from="OPName"), - "OPTime": fields.Int(required=False, load_from="OPTime"), - "OpMessage": fields.Str(required=False, load_from="OpMessage"), - "Region": fields.Str(required=False, load_from="Region"), - "ResourceID": fields.Str(required=False, load_from="ResourceID"), - "ResourceType": fields.Int(required=False, load_from="ResourceType"), - "RetCode": fields.Int(required=False, load_from="RetCode"), - "UserEmail": fields.Str(required=False, load_from="UserEmail"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class PhysicalIPInfoSchema(schema.ResponseSchema): - """ PhysicalIPInfo - 物理IP信息 - """ - - fields = { - "BindResourceID": fields.Str(required=True, load_from="BindResourceID"), - "BindResourceType": fields.Str( - required=True, load_from="BindResourceType" - ), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "IP": fields.Str(required=True, load_from="IP"), - "Name": fields.Str(required=True, load_from="Name"), - "OperatorName": fields.Str(required=True, load_from="OperatorName"), - "PhysicalIPID": fields.Str(required=True, load_from="PhysicalIPID"), - "Region": fields.Str(required=True, load_from="Region"), - "Remark": fields.Str(required=True, load_from="Remark"), - "Status": fields.Str(required=True, load_from="Status"), - "UpdateTime": fields.Int(required=True, load_from="UpdateTime"), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class RSInfoSchema(schema.ResponseSchema): - """ RSInfo - 转发规则关联的服务节点信息 - """ - - fields = { - "BindResourceID": fields.Str(required=True, load_from="BindResourceID"), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "IP": fields.Str(required=True, load_from="IP"), - "LBID": fields.Str(required=True, load_from="LBID"), - "Name": fields.Str(required=True, load_from="Name"), - "Port": fields.Int(required=True, load_from="Port"), - "RSID": fields.Str(required=True, load_from="RSID"), - "RSMode": fields.Str(required=True, load_from="RSMode"), - "RSStatus": fields.Str(required=True, load_from="RSStatus"), - "UpdateTime": fields.Int(required=True, load_from="UpdateTime"), - "VSID": fields.Str(required=True, load_from="VSID"), - "Weight": fields.Int(required=True, load_from="Weight"), - } - - -class RecycledResourceInfoSchema(schema.ResponseSchema): - """ RecycledResourceInfo - 回收站资源信息 - """ - - fields = { - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "DeleteTime": fields.Int(required=True, load_from="DeleteTime"), - "Description": fields.Str(required=True, load_from="Description"), - "ExpireTime": fields.Int(required=True, load_from="ExpireTime"), - "IsAutoTerminated": fields.Bool( - required=True, load_from="IsAutoTerminated" - ), - "Name": fields.Str(required=True, load_from="Name"), - "Region": fields.Str(required=True, load_from="Region"), - "ResourceID": fields.Str(required=True, load_from="ResourceID"), - "ResourceType": fields.Str(required=True, load_from="ResourceType"), - "Status": fields.Str(required=False, load_from="Status"), - "WillTerminateTime": fields.Int( - required=True, load_from="WillTerminateTime" - ), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class SGRuleInfoSchema(schema.ResponseSchema): - """ SGRuleInfo - 安全组规则信息 - """ - - fields = { - "DstPort": fields.Str(required=False, load_from="DstPort"), - "IsIn": fields.Str(required=False, load_from="IsIn"), - "Priority": fields.Str(required=False, load_from="Priority"), - "ProtocolType": fields.Str(required=False, load_from="ProtocolType"), - "RuleAction": fields.Str(required=False, load_from="RuleAction"), - "RuleID": fields.Str(required=False, load_from="RuleID"), - "SrcIP": fields.Str(required=False, load_from="SrcIP"), - } - - -class SGInfoSchema(schema.ResponseSchema): - """ SGInfo - 安全组信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Region": fields.Str(required=False, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "ResourceCount": fields.Int(required=False, load_from="ResourceCount"), - "Rule": fields.List(SGRuleInfoSchema()), - "RuleCount": fields.Int(required=False, load_from="RuleCount"), - "SGID": fields.Str(required=False, load_from="SGID"), - "Status": fields.Str(required=False, load_from="Status"), - "UpdateTime": fields.Int(required=False, load_from="UpdateTime"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class StorageTypeInfoSchema(schema.ResponseSchema): - """ StorageTypeInfo - 存储类型信息 - """ - - fields = { - "Region": fields.Str(required=True, load_from="Region"), - "SetArch": fields.Str(required=True, load_from="SetArch"), - "StorageType": fields.Str(required=True, load_from="StorageType"), - "StorageTypeAlias": fields.Str( - required=True, load_from="StorageTypeAlias" - ), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class SubnetInfoSchema(schema.ResponseSchema): - """ SubnetInfo - 子网信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Network": fields.Str(required=False, load_from="Network"), - "Region": fields.Str(required=False, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "State": fields.Str(required=False, load_from="State"), - "SubnetID": fields.Str(required=False, load_from="SubnetID"), - "UpdateTime": fields.Int(required=False, load_from="UpdateTime"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UserInfoSchema(schema.ResponseSchema): - """ UserInfo - 租户信息 - """ - - fields = { - "Amount": fields.Float(required=False, load_from="Amount"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Email": fields.Str(required=False, load_from="Email"), - "PrivateKey": fields.Str(required=False, load_from="PrivateKey"), - "PublicKey": fields.Str(required=False, load_from="PublicKey"), - "Status": fields.Str(required=False, load_from="Status"), - "UpdateTime": fields.Int(required=False, load_from="UpdateTime"), - "UserID": fields.Int(required=False, load_from="UserID"), - } - - -class VMDiskInfoSchema(schema.ResponseSchema): - """ VMDiskInfo - UCloudStack虚拟机磁盘信息 - """ - - fields = { - "DiskID": fields.Str(required=False, load_from="DiskID"), - "Drive": fields.Str(required=False, load_from="Drive"), - "IsElastic": fields.Str(required=False, load_from="IsElastic"), - "Name": fields.Str(required=False, load_from="Name"), - "Size": fields.Int(required=False, load_from="Size"), - "Type": fields.Str(required=False, load_from="Type"), - } - - -class VMIPInfoSchema(schema.ResponseSchema): - """ VMIPInfo - UCloudStack虚拟机IP信息 - """ - - fields = { - "IP": fields.Str(required=False, load_from="IP"), - "IPVersion": fields.Str(required=False, load_from="IPVersion"), - "InterfaceID": fields.Str(required=False, load_from="InterfaceID"), - "IsElastic": fields.Str(required=False, load_from="IsElastic"), - "MAC": fields.Str(required=False, load_from="MAC"), - "SGID": fields.Str(required=False, load_from="SGID"), - "SGName": fields.Str(required=False, load_from="SGName"), - "SubnetID": fields.Str(required=False, load_from="SubnetID"), - "SubnetName": fields.Str(required=False, load_from="SubnetName"), - "Type": fields.Str(required=False, load_from="Type"), - "VPCID": fields.Str(required=False, load_from="VPCID"), - "VPCName": fields.Str(required=False, load_from="VPCName"), - } - - -class VMInstanceInfoSchema(schema.ResponseSchema): - """ VMInstanceInfo - UCloudStack虚拟机信息 - """ - - fields = { - "CPU": fields.Int(required=False, load_from="CPU"), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DiskInfos": fields.List(VMDiskInfoSchema()), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "IPInfos": fields.List(VMIPInfoSchema()), - "ImageID": fields.Str(required=False, load_from="ImageID"), - "Memory": fields.Int(required=False, load_from="Memory"), - "Name": fields.Str(required=False, load_from="Name"), - "OSName": fields.Str(required=False, load_from="OSName"), - "OSType": fields.Str(required=False, load_from="OSType"), - "Region": fields.Str(required=False, load_from="Region"), - "RegionAlias": fields.Str(required=False, load_from="RegionAlias"), - "Remark": fields.Str(required=False, load_from="Remark"), - "State": fields.Str(required=False, load_from="State"), - "SubnetID": fields.Str(required=False, load_from="SubnetID"), - "SubnetName": fields.Str(required=False, load_from="SubnetName"), - "VMID": fields.Str(required=False, load_from="VMID"), - "VMType": fields.Str(required=False, load_from="VMType"), - "VMTypeAlias": fields.Str(required=False, load_from="VMTypeAlias"), - "VPCID": fields.Str(required=False, load_from="VPCID"), - "VPCName": fields.Str(required=False, load_from="VPCName"), - "Zone": fields.Str(required=False, load_from="Zone"), - "ZoneAlias": fields.Str(required=False, load_from="ZoneAlias"), - } - - -class VMTypeInfoSchema(schema.ResponseSchema): - """ VMTypeInfo - 主机机型信息 - """ - - fields = { - "Region": fields.Str(required=True, load_from="Region"), - "SetArch": fields.Str(required=True, load_from="SetArch"), - "VMType": fields.Str(required=True, load_from="VMType"), - "VMTypeAlias": fields.Str(required=True, load_from="VMTypeAlias"), - "Zone": fields.Str(required=True, load_from="Zone"), - } - - -class VPCInfoSchema(schema.ResponseSchema): - """ VPCInfo - VPC信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Network": fields.Str(required=False, load_from="Network"), - "Region": fields.Str(required=False, load_from="Region"), - "Remark": fields.Str(required=False, load_from="Remark"), - "State": fields.Str(required=False, load_from="State"), - "SubnetCount": fields.Int(required=False, load_from="SubnetCount"), - "SubnetInfos": fields.List(SubnetInfoSchema()), - "UpdateTime": fields.Int(required=False, load_from="UpdateTime"), - "VPCID": fields.Str(required=False, load_from="VPCID"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class VSPolicyInfoSchema(schema.ResponseSchema): - """ VSPolicyInfo - 内容转发规则信息 - """ - - fields = { - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "Domain": fields.Str(required=True, load_from="Domain"), - "LBID": fields.Str(required=True, load_from="LBID"), - "Path": fields.Str(required=True, load_from="Path"), - "PolicyID": fields.Str(required=True, load_from="PolicyID"), - "PolicyStatus": fields.Str(required=True, load_from="PolicyStatus"), - "RSInfos": fields.List(RSInfoSchema()), - "UpdateTime": fields.Int(required=True, load_from="UpdateTime"), - "VSID": fields.Str(required=True, load_from="VSID"), - } - - -class VSInfoSchema(schema.ResponseSchema): - """ VSInfo - RServer信息 - """ - - fields = { - "AlarmTemplateID": fields.Str( - required=True, load_from="AlarmTemplateID" - ), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "Domain": fields.Str(required=False, load_from="Domain"), - "HealthcheckType": fields.Str( - required=True, load_from="HealthcheckType" - ), - "KeepaliveTimeout": fields.Int( - required=True, load_from="KeepaliveTimeout" - ), - "LBID": fields.Str(required=True, load_from="LBID"), - "Path": fields.Str(required=False, load_from="Path"), - "PersistenceKey": fields.Str( - required=False, load_from="PersistenceKey" - ), - "PersistenceType": fields.Str( - required=True, load_from="PersistenceType" - ), - "Port": fields.Int(required=True, load_from="Port"), - "Protocol": fields.Str(required=True, load_from="Protocol"), - "RSHealthStatus": fields.Str(required=True, load_from="RSHealthStatus"), - "RSInfos": fields.List(RSInfoSchema()), - "UpdateTime": fields.Int(required=True, load_from="UpdateTime"), - "VSID": fields.Str(required=True, load_from="VSID"), - "VSPolicyInfos": fields.List(VSPolicyInfoSchema()), - "VSStatus": fields.Str(required=True, load_from="VSStatus"), - } - - -class PriceInfoSchema(schema.ResponseSchema): - """ PriceInfo - 价格信息 - """ - - fields = { - "ChargeType": fields.Str(required=True, load_from="ChargeType"), - "Price": fields.Float(required=True, load_from="Price"), - } diff --git a/ucloud/services/udb/__init__.py b/ucloud/services/udb/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/udb/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/udb/client.py b/ucloud/services/udb/client.py deleted file mode 100644 index 03b1c62..0000000 --- a/ucloud/services/udb/client.py +++ /dev/null @@ -1,1315 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.udb.schemas import apis - - -class UDBClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UDBClient, self).__init__(config, transport, middleware, logger) - - def backup_udb_instance(self, req=None, **kwargs): - """ BackupUDBInstance - 备份UDB实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupName** (str) - (Required) 备份名称 - - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 - - **BackupMethod** (str) - 使用的备份方式。(快照备份即物理备份。注意只有SSD版本的mysql实例支持设置为snapshot) - - **Blacklist** (str) - 备份黑名单列表,以 ; 分隔。注意:只有逻辑备份下备份黑名单才生效,快照备份备份黑名单下无效 - - **ForceBackup** (bool) - true表示逻辑备份时是使用 --force 参数,false表示不使用 --force 参数。物理备份此参数无效。 - - **UseBlacklist** (bool) - 是否使用黑名单备份,默认false - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.BackupUDBInstanceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("BackupUDBInstance", d, **kwargs) - return apis.BackupUDBInstanceResponseSchema().loads(resp) - - def backup_udb_instance_binlog(self, req=None, **kwargs): - """ BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupFile** (str) - (Required) 需要备份文件,可通过DescribeUDBInstanceBinlog获得 如果要传入多个文件名,以空格键分割,用单引号包含. - - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 - - **BackupName** (str) - DB备份文件名称 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.BackupUDBInstanceBinlogRequestSchema().dumps(d) - resp = self.invoke("BackupUDBInstanceBinlog", d, **kwargs) - return apis.BackupUDBInstanceBinlogResponseSchema().loads(resp) - - def backup_udb_instance_error_log(self, req=None, **kwargs): - """ BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupName** (str) - (Required) 备份名称 - - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.BackupUDBInstanceErrorLogRequestSchema().dumps(d) - resp = self.invoke("BackupUDBInstanceErrorLog", d, **kwargs) - return apis.BackupUDBInstanceErrorLogResponseSchema().loads(resp) - - def backup_udb_instance_slow_log(self, req=None, **kwargs): - """ BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupName** (str) - (Required) 备份文件名称 - - **BeginTime** (int) - (Required) 过滤条件:起始时间(时间戳) - - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 - - **EndTime** (int) - (Required) 过滤条件:结束时间(时间戳) - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.BackupUDBInstanceSlowLogRequestSchema().dumps(d) - resp = self.invoke("BackupUDBInstanceSlowLog", d, **kwargs) - return apis.BackupUDBInstanceSlowLogResponseSchema().loads(resp) - - def check_recover_udb_instance(self, req=None, **kwargs): - """ CheckRecoverUDBInstance - 核查db是否可以使用回档功能 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SrcDBId** (str) - (Required) 源实例的Id(只支持普通版DB不支持高可用) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **LastestTime** (int) - 核查成功返回值为可以回档到的最近时刻,核查失败不返回 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CheckRecoverUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("CheckRecoverUDBInstance", d, **kwargs) - return apis.CheckRecoverUDBInstanceResponseSchema().loads(resp) - - def check_udb_instance_to_ha_allowance(self, req=None, **kwargs): - """ CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **Response** - - - **Allowance** (str) - Yes ,No ,Yes即可以升级,No为不可以升级 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CheckUDBInstanceToHAAllowanceRequestSchema().dumps(d) - resp = self.invoke("CheckUDBInstanceToHAAllowance", d, **kwargs) - return apis.CheckUDBInstanceToHAAllowanceResponseSchema().loads(resp) - - def clear_udb_log(self, req=None, **kwargs): - """ ClearUDBLog - 清除UDB实例的log - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取 - - **LogType** (int) - (Required) 日志类型,10-error(暂不支持)、20-slow(暂不支持 )、30-binlog - - **BeforeTime** (int) - 删除时间点(至少前一天)之前log,采用时间戳(秒),默认当 前时间点前一天 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ClearUDBLogRequestSchema().dumps(d) - resp = self.invoke("ClearUDBLog", d, **kwargs) - return apis.ClearUDBLogResponseSchema().loads(resp) - - def create_udb_instance(self, req=None, **kwargs): - """ CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **AdminPassword** (str) - (Required) 管理员密码 - - **DBTypeId** (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6,14:postgresql-10.4 - - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 3000G - - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M - - **Name** (str) - (Required) 实例名称,至少6位 - - **ParamGroupId** (int) - (Required) DB实例使用的配置参数组id - - **Port** (int) - (Required) 端口号,mysql默认3306,mongodb默认27017,postgresql默认5432 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **AdminUser** (str) - 管理员帐户名,默认root - - **BackupCount** (int) - 备份策略,每周备份数量,默认7次 - - **BackupDuration** (int) - 备份策略,备份时间间隔,单位小时计,默认24小时 - - **BackupId** (int) - 备份id,如果指定,则表明从备份恢复实例 - - **BackupTime** (int) - 备份策略,备份开始时间,单位小时计,默认1点 - - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见 `可用区列表 `_ - - **CPU** (int) - cpu核数 - - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Month - - **ClusterRole** (str) - 当DB类型(DBTypeId)为mongodb时,需要指定mongo的角色,可选值为configsrv (配置节点),shardsrv (数据节点) - - **CouponId** (str) - 使用的代金券id - - **DisableSemisync** (bool) - 是否开启异步高可用,默认不填,可置为true - - **HAArch** (str) - 高可用架构:1) haproxy(默认): 当前仅支持mysql。2) sentinel: 基于vip和哨兵节点的架构,当前支持mysql和pg。 - - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例 "HA": 高可用版UDB实例 默认是"Normal" - - **InstanceType** (str) - UDB数据库机型 - - **Quantity** (int) - 购买时长,默认值1 - - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 - - **SubnetId** (str) - 子网ID - - **Tag** (str) - 实例所在的业务组名称 - - **UDBCId** (str) - 专区ID信息(如果这个参数存在这说明是在专区中创建DB) - - **UseSSD** (bool) - 是否使用SSD,默认为false。目前主要可用区、海外机房、新机房只提供SSD资源,非SSD资源不再提供。 - - **VPCId** (str) - VPC的ID - - **Response** - - - **DBId** (str) - BD实例id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDBInstanceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDBInstance", d, **kwargs) - return apis.CreateUDBInstanceResponseSchema().loads(resp) - - def create_udb_instance_by_recovery(self, req=None, **kwargs): - """ CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 实例名称,至少6位 - - **RecoveryTime** (int) - (Required) 恢复到某个时间点的时间戳(UTC时间格式,默认单位秒) - - **SrcDBId** (str) - (Required) 源实例的Id - - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic - - **CouponId** (str) - 使用的代金券id - - **Quantity** (int) - 购买时长,默认值1 - - **SubnetId** (str) - 子网ID - - **UDBCId** (str) - 专区的Id - - **UseSSD** (bool) - 指定是否是否使用SSD,默认使用主库的配置 - - **VPCId** (str) - VPC的ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DBId** (str) - db实例id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDBInstanceByRecoveryRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDBInstanceByRecovery", d, **kwargs) - return apis.CreateUDBInstanceByRecoveryResponseSchema().loads(resp) - - def create_udb_param_group(self, req=None, **kwargs): - """ CreateUDBParamGroup - 从已有配置文件创建新配置文件 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBTypeId** (str) - (Required) DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6 - - **Description** (str) - (Required) 参数组描述 - - **GroupName** (str) - (Required) 新配置参数组名称 - - **SrcGroupId** (int) - (Required) 源参数组id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **RegionFlag** (bool) - 是否是地域级别的配置文件,默认是false - - **Response** - - - **GroupId** (int) - 新配置参数组id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDBParamGroupRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDBParamGroup", d, **kwargs) - return apis.CreateUDBParamGroupResponseSchema().loads(resp) - - def create_udb_replication_instance(self, req=None, **kwargs): - """ CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 实例名称,至少6位 - - **SrcId** (str) - (Required) primary节点的DBId,该值可以通过DescribeUDBInstance获取 - - **CouponId** (str) - 使用的代金券id - - **IsArbiter** (bool) - 是否是仲裁节点,默认false,仲裁节点按最小机型创建 - - **Port** (int) - 端口号,默认27017,取值范围3306至65535。 - - **UseSSD** (bool) - 是否使用SSD,默认不使用 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DBId** (str) - 创建从节点的DBId - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDBReplicationInstanceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDBReplicationInstance", d, **kwargs) - return apis.CreateUDBReplicationInstanceResponseSchema().loads(resp) - - def create_udb_route_instance(self, req=None, **kwargs): - """ CreateUDBRouteInstance - 创建mongos实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ConfigsvrId** (list) - (Required) 配置服务器的dbid,允许一个或者三个。 - - **DBTypeId** (str) - (Required) DB类型id,mongodb按版本细分有1:mongodb-2.4,2:mongodb-2.6,3:mongodb-3.0,4:mongodb-3.2 - - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G - - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 600M/1500M/3000M /6000M/15000M/30000M - - **Name** (str) - (Required) 实例名称,至少6位 - - **ParamGroupId** (int) - (Required) DB实例使用的配置参数组id - - **Port** (int) - (Required) 端口号,mongodb默认27017 - - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Month - - **CouponId** (str) - 使用的代金券id - - **Quantity** (int) - 购买时长,默认值1 - - **UseSSD** (bool) - 是否使用SSD,默认为false - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DBId** (str) - db实例id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDBRouteInstanceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDBRouteInstance", d, **kwargs) - return apis.CreateUDBRouteInstanceResponseSchema().loads(resp) - - def create_udb_slave(self, req=None, **kwargs): - """ CreateUDBSlave - 创建UDB实例的slave - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 实例名称,至少6位 - - **SrcId** (str) - (Required) master实例的DBId,该值可以通过DescribeUDBInstance获取 - - **CouponId** (str) - 使用的代金券id - - **DiskSpace** (int) - 磁盘空间(GB), 暂时支持20G - 3000G(API支持,前端暂时只开放内存定制) - - **InstanceMode** (str) - UDB实例部署模式,可选值如下:Normal: 普通单点实例HA: 高可用部署实例 - - **InstanceType** (str) - UDB实例类型:Normal和SATA_SSD - - **IsLock** (bool) - 是否锁主库,默认为true - - **MemoryLimit** (int) - 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/12000M/16000M/ 24000M/32000M/48000M/ 64000M/96000M - - **Port** (int) - 端口号,mysql默认3306 - - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 - - **UseSSD** (bool) - 是否使用SSD,默认为false - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DBId** (str) - 创建slave的DBId - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDBSlaveRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDBSlave", d, **kwargs) - return apis.CreateUDBSlaveResponseSchema().loads(resp) - - def delete_udb_backup(self, req=None, **kwargs): - """ DeleteUDBBackup - 删除UDB实例备份 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) 备份id,可通过DescribeUDBBackup获得 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见[可用区列表] - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUDBBackupRequestSchema().dumps(d) - resp = self.invoke("DeleteUDBBackup", d, **kwargs) - return apis.DeleteUDBBackupResponseSchema().loads(resp) - - def delete_udb_instance(self, req=None, **kwargs): - """ DeleteUDBInstance - 删除UDB实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) DB实例的id,该值可以通过DescribeUDBInstance获取 - - **UDBCId** (str) - 专区ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("DeleteUDBInstance", d, **kwargs) - return apis.DeleteUDBInstanceResponseSchema().loads(resp) - - def delete_udb_log_package(self, req=None, **kwargs): - """ DeleteUDBLogPackage - 删除UDB日志包 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) 日志包id,可通过DescribeUDBLogPackage获得 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **BackupZone** (str) - 跨可用区高可用备库所在可用区 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUDBLogPackageRequestSchema().dumps(d) - resp = self.invoke("DeleteUDBLogPackage", d, **kwargs) - return apis.DeleteUDBLogPackageResponseSchema().loads(resp) - - def delete_udb_param_group(self, req=None, **kwargs): - """ DeleteUDBParamGroup - 删除配置参数组 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (int) - (Required) 参数组id,可通过DescribeUDBParamGroup获取 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **RegionFlag** (bool) - 是否属于地域级别 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUDBParamGroupRequestSchema().dumps(d) - resp = self.invoke("DeleteUDBParamGroup", d, **kwargs) - return apis.DeleteUDBParamGroupResponseSchema().loads(resp) - - def describe_udb_backup(self, req=None, **kwargs): - """ DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 - - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 - - **BackupId** (int) - 如果填了BackupId, 那么只拉取这个备份的记录 - - **BackupType** (int) - 备份类型,取值为0或1,0表示自动,1表示手动 - - **BeginTime** (int) - 过滤条件:起始时间(Unix时间戳) - - **ClassType** (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver) - - **DBId** (str) - DB实例Id,如果指定,则只获取该db的备份信息 该值可以通过DescribeUDBInstance获取 - - **EndTime** (int) - 过滤条件:结束时间(Unix时间戳) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDBBackupSet** 模型定义 - - **TotalCount** (int) - 满足条件备份总数,如果指定dbid,则是该db备份总数 - - **Response Model** - - **UDBBackupSet** - - - **BackupEndTime** (int) - 备份完成时间(Unix时间戳) - - **BackupId** (int) - 备份id - - **BackupName** (str) - 备份名称 - - **BackupSize** (int) - 备份文件大小(字节) - - **BackupTime** (int) - 备份时间(Unix时间戳) - - **BackupType** (int) - 备份类型,取值为0或1,0表示自动,1表示手动 - - **BackupZone** (str) - 跨机房高可用备库所在可用区 - - **DBId** (str) - dbid - - **DBName** (str) - 对应的db名称 - - **ErrorInfo** (str) - 备份错误信息 - - **State** (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期 - - **Zone** (str) - 备份所在可用区 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBBackupRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBBackup", d, **kwargs) - return apis.DescribeUDBBackupResponseSchema().loads(resp) - - def describe_udb_backup_blacklist(self, req=None, **kwargs): - """ DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Blacklist** (str) - DB的黑名单列表, db.%为指定库 dbname.tablename为指定表 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBBackupBlacklistRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBBackupBlacklist", d, **kwargs) - return apis.DescribeUDBBackupBlacklistResponseSchema().loads(resp) - - def describe_udb_binlog_backup_url(self, req=None, **kwargs): - """ DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) DB实例binlog备份ID,可以从DescribeUDBLogPackage结果当中获得 - - **DBId** (str) - (Required) DB实例Id - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **BackupPath** (str) - DB实例备份文件的公网地址 - - **InnerBackupPath** (str) - DB实例备份文件的内网地址 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBBinlogBackupURLRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBBinlogBackupURL", d, **kwargs) - return apis.DescribeUDBBinlogBackupURLResponseSchema().loads(resp) - - def describe_udb_instance(self, req=None, **kwargs): - """ DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ClassType** (str) - DB种类,如果是列表操作,则需要指定,不区分大小写,其取值如下:mysql: SQL;mongo: NOSQL;postgresql: postgresql - - **DBId** (str) - DB实例id,如果指定则获取单个db实例的描述,否则为列表操作。 指定DBId时无需填写ClassType、Offset、Limit - - **IncludeSlaves** (bool) - 当只获取这个特定DBId的信息时,如果有该选项,那么把这个DBId实例的所有从库信息一起拉取并返回 - - **IsInUDBC** (bool) - 是否查看专区里面DB - - **Limit** (int) - 分页显示数量,列表操作时必填 - - **Offset** (int) - 分页显示起始偏移位置,列表操作时必填 - - **UDBCId** (str) - IsInUDBC为True,UDBCId为空,说明查看整个可用区的专区的db,如果UDBId不为空则只查看此专区下面的db - - **Zone** (str) - 可用区,不填时默认全部可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDBInstanceSet** 模型定义 - - **TotalCount** (int) - 用户db组的数量,对于 mysql: 主从结对数量,没有slave,则只有master mongodb: 副本集数量 - - **Response Model** - - **UDBSlaveInstanceSet** - - - **AdminUser** (str) - 管理员帐户名,默认root - - **BackupBeginTime** (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点 - - **BackupBlacklist** (str) - 备份策略,备份黑名单,mongodb则不适用 - - **BackupCount** (int) - 备份策略,不可修改,备份文件保留的数量,默认7次 - - **BackupDate** (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能 - - **BackupDuration** (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时 - - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic - - **ClusterRole** (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式 - - **CreateTime** (int) - DB实例创建时间,采用UTC计时时间戳 - - **DBId** (str) - DB实例id - - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 - - **DataFileSize** (float) - DB实例数据文件大小,单位GB - - **DiskSpace** (int) - 磁盘空间(GB), 默认根据配置机型 - - **DiskUsedSize** (float) - DB实例磁盘已使用空间,单位GB - - **ExpiredTime** (int) - DB实例过期时间,采用UTC计时时间戳 - - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例;"HA": 高可用版UDB实例 - - **InstanceType** (str) - UDB数据库机型 - - **InstanceTypeId** (int) - UDB数据库机型ID - - **LogFileSize** (float) - DB实例日志文件大小,单位GB - - **MemoryLimit** (int) - 内存限制(MB),默认根据配置机型 - - **ModifyTime** (int) - DB实例修改时间,采用UTC计时时间戳 - - **Name** (str) - 实例名称,至少6位 - - **ParamGroupId** (int) - DB实例使用的配置参数组id - - **Port** (int) - 端口号,mysql默认3306,mongodb默认27017 - - **Role** (str) - DB实例角色,mysql区分master/slave,mongodb多种角色 - - **SSDType** (str) - SSD类型,SATA/PCI-E - - **SrcDBId** (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id - - **State** (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败 - - **SubnetId** (str) - 子网ID - - **SystemFileSize** (float) - DB实例系统文件大小,单位GB - - **Tag** (str) - 获取资源其他信息 - - **UseSSD** (bool) - 是否使用SSD - - **VPCId** (str) - VPC的ID - - **VirtualIP** (str) - DB实例虚ip - - **VirtualIPMac** (str) - DB实例虚ip的mac地址 - - **Zone** (str) - 可用区 - - **UDBInstanceSet** - - - **AdminUser** (str) - 管理员帐户名,默认root - - **BackupBeginTime** (int) - 备份策略,不可修改,开始时间,单位小时计,默认3点 - - **BackupBlacklist** (str) - 备份策略,备份黑名单,mongodb则不适用 - - **BackupCount** (int) - 备份策略,不可修改,备份文件保留的数量,默认7次 - - **BackupDate** (str) - 备份日期标记位。共7位,每一位为一周中一天的备份情况 0表示关闭当天备份,1表示打开当天备份。最右边的一位 为星期天的备份开关,其余从右到左依次为星期一到星期 六的备份配置开关,每周必须至少设置两天备份。 例如:1100000 表示打开星期六和星期五的自动备份功能 - - **BackupDuration** (int) - 备份策略,一天内备份时间间隔,单位小时,默认24小时 - - **BackupZone** (str) - 跨可用区高可用备库所在可用区 - - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic - - **CluserRole** (str) - 当DB类型为mongodb时,返回该实例所在集群中的角色,包括:mongos、configsrv_sccc、configsrv_csrs、shardsrv_datanode、shardsrv_arbiter,其中congfigsrv分为sccc和csrs两种模式,shardsrv分为datanode和arbiter两种模式 - - **CreateTime** (int) - DB实例创建时间,采用UTC计时时间戳 - - **DBId** (str) - DB实例id - - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 - - **DataFileSize** (float) - DB实例数据文件大小,单位GB - - **DataSet** (list) - 见 **UDBSlaveInstanceSet** 模型定义 - - **DiskSpace** (int) - 磁盘空间(GB), 默认根据配置机型 - - **DiskUsedSize** (float) - DB实例磁盘已使用空间,单位GB - - **ExpiredTime** (int) - DB实例过期时间,采用UTC计时时间戳 - - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: “Normal”: 普通版UDB实例 “HA”: 高可用版UDB实例 - - **InstanceType** (str) - UDB数据库机型 - - **InstanceTypeId** (int) - UDB数据库机型ID - - **LogFileSize** (float) - DB实例日志文件大小,单位GB - - **MemoryLimit** (int) - 内存限制(MB),默认根据配置机型 - - **ModifyTime** (int) - DB实例修改时间,采用UTC计时时间戳 - - **Name** (str) - 实例名称,至少6位 - - **ParamGroupId** (int) - DB实例使用的配置参数组id - - **Port** (int) - 端口号,mysql默认3306,mongodb默认27017 - - **Role** (str) - DB实例角色,mysql区分master/slave,mongodb多种角色 - - **SSDType** (str) - SSD类型,SATA/PCI-E - - **SrcDBId** (str) - 对mysql的slave而言是master的DBId,对master则为空, 对mongodb则是副本集id - - **State** (str) - DB状态标记 Init:初始化中,Fail:安装失败,Starting:启动中,Running:运行,Shutdown:关闭中,Shutoff:已关闭,Delete:已删除,Upgrading:升级中,Promoting:提升为独库进行中,Recovering:恢复中,Recover fail:恢复失败 - - **SubnetId** (str) - 子网ID - - **SystemFileSize** (float) - DB实例系统文件大小,单位GB - - **Tag** (str) - 获取资源其他信息 - - **UseSSD** (bool) - 是否使用SSD - - **VPCId** (str) - VPC的ID - - **VirtualIP** (str) - DB实例虚ip - - **VirtualIPMac** (str) - DB实例虚ip的mac地址 - - **Zone** (str) - DB实例所在可用区 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstance", d, **kwargs) - return apis.DescribeUDBInstanceResponseSchema().loads(resp) - - def describe_udb_instance_backup_state(self, req=None, **kwargs): - """ DescribeUDBInstanceBackupState - 获取UDB实例备份状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) 备份记录ID - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **BackupZone** (str) - 跨可用区高可用备库所在可用区,参见[可用区列表] - - **Response** - - - **BackupEndTime** (int) - - - **BackupSize** (int) - - - **State** (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceBackupStateRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstanceBackupState", d, **kwargs) - return apis.DescribeUDBInstanceBackupStateResponseSchema().loads(resp) - - def describe_udb_instance_backup_url(self, req=None, **kwargs): - """ DescribeUDBInstanceBackupURL - 获取UDB备份下载地址 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) DB实例备份ID,该值可以通过DescribeUDBBackup获取 - - **DBId** (str) - (Required) DB实例Id,该值可通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **BackupPath** (str) - DB实例备份文件公网的地址 - - **InnerBackupPath** (str) - DB实例备份文件内网的地址 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceBackupURLRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstanceBackupURL", d, **kwargs) - return apis.DescribeUDBInstanceBackupURLResponseSchema().loads(resp) - - def describe_udb_instance_binlog(self, req=None, **kwargs): - """ DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BeginTime** (int) - (Required) 过滤条件:起始时间(时间戳) - - **DBId** (str) - (Required) DB实例Id - - **EndTime** (int) - (Required) 过滤条件:结束时间(时间戳) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDBInstanceBinlogSet** 模型定义 - - **Response Model** - - **UDBInstanceBinlogSet** - - - **BeginTime** (int) - Binlog文件生成时间(时间戳) - - **EndTime** (int) - Binlog文件结束时间(时间戳) - - **Name** (str) - Binlog文件名 - - **Size** (int) - Binlog文件大小 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceBinlogRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstanceBinlog", d, **kwargs) - return apis.DescribeUDBInstanceBinlogResponseSchema().loads(resp) - - def describe_udb_instance_binlog_backup_state(self, req=None, **kwargs): - """ DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) 备份记录ID - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **BackupZone** (str) - 跨可用区高可用备库所在可用区 - - **Response** - - - **BackupSize** (int) - 备份文件大小(字节) - - **State** (str) - 备份状态 0 Backuping // 备份中 1 Success // 备份成功 2 Failed // 备份失败 3 Expired // 备份过期 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceBinlogBackupStateRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstanceBinlogBackupState", d, **kwargs) - return apis.DescribeUDBInstanceBinlogBackupStateResponseSchema().loads( - resp - ) - - def describe_udb_instance_price(self, req=None, **kwargs): - """ DescribeUDBInstancePrice - 获取UDB实例价格信息 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBTypeId** (str) - (Required) UDB实例的DB版本字符串 - - **DiskSpace** (int) - (Required) 磁盘空间(GB),暂时支持20(GB) - 3000(GB), 输入不带单位 - - **MemoryLimit** (int) - (Required) 内存限制(MB),单位为MB.目前支持:1000-96000 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year,按年付费; Month,按月付费 Dynamic,按需付费(需开启权限) Trial,试用(需开启权限)默认为月付 - - **Count** (int) - 购买DB实例数量,最大数量为10台, 默认为1台 - - **InstanceMode** (str) - 实例的部署类型。可选值为:Normal: 普通单点实例,Slave: 从库实例,HA: 高可用部署实例,默认是Normal - - **Quantity** (int) - DB购买多少个"计费时间单位",默认值为1。比如:买2个月,Quantity就是2。如果计费单位是“按月”,并且Quantity为0,表示“购买到月底” - - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必填 - - **UseSSD** (str) - 是否使用SSD,只能填true或false,默认为false - - **Response** - - - **DataSet** (list) - 见 **UDBInstancePriceSet** 模型定义 - - **Response Model** - - **UDBInstancePriceSet** - - - **ChargeType** (str) - Year, Month, Dynamic,Trial - - **Price** (int) - 价格,单位为分 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstancePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstancePrice", d, **kwargs) - return apis.DescribeUDBInstancePriceResponseSchema().loads(resp) - - def describe_udb_instance_state(self, req=None, **kwargs): - """ DescribeUDBInstanceState - 获取UDB实例状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **State** (str) - DB状态标记 Init:初始化中;Fail:安装失败; Starting:启动中; Running : 运行 ;Shutdown:关闭中; Shutoff :已关闭; Delete:已删除; Upgrading:升级中; Promoting: 提升为独库进行中; Recovering: 恢复中; Recover fail:恢复失败。 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceStateRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstanceState", d, **kwargs) - return apis.DescribeUDBInstanceStateResponseSchema().loads(resp) - - def describe_udb_instance_upgrade_price(self, req=None, **kwargs): - """ DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id - - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G - 500G - - **MemoryLimit** (int) - (Required) 内存限制(MB) - - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 - - **UseSSD** (bool) - 是否使用SSD,默认为false - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Price** (int) - 价格,单位为分 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBInstanceUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBInstanceUpgradePrice", d, **kwargs) - return apis.DescribeUDBInstanceUpgradePriceResponseSchema().loads(resp) - - def describe_udb_log_backup_url(self, req=None, **kwargs): - """ DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (int) - (Required) DB实例备份ID - - **DBId** (str) - (Required) DB实例Id - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **BackupPath** (str) - 备份外网URL - - **UsernetPath** (str) - 备份用户网URL - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBLogBackupURLRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBLogBackupURL", d, **kwargs) - return apis.DescribeUDBLogBackupURLResponseSchema().loads(resp) - - def describe_udb_log_package(self, req=None, **kwargs): - """ DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 - - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 - - **BeginTime** (int) - 过滤条件:起始时间(时间戳) - - **DBId** (str) - DB实例Id,如果指定,则只获取该db的备份信息 - - **EndTime** (int) - 过滤条件:结束时间(时间戳) - - **Type** (int) - 需要列出的备份文件类型,每种文件的值如下 2 : BINLOG\\_BACKUP 3 : SLOW\\_QUERY\\_BACKUP 4 : ERRORLOG\\_BACKUP - - **Types** (list) - Types作为Type的补充,支持多值传入,可以获取多个类型的日志记录,如:Types.0=2&Types.1=3 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **LogPackageDataSet** 模型定义 - - **TotalCount** (int) - 备份总数,如果指定dbid,则是该db备份总数 - - **Response Model** - - **LogPackageDataSet** - - - **BackupId** (int) - 备份id - - **BackupName** (str) - 备份名称 - - **BackupSize** (int) - 备份文件大小 - - **BackupTime** (int) - 备份时间 - - **BackupType** (int) - 备份类型,包括2-binlog备份,3-slowlog备份 - - **BackupZone** (str) - 跨可用区高可用备库所在可用区 - - **DBId** (str) - dbid - - **DBName** (str) - 对应的db名称 - - **State** (str) - 备份状态 Backuping // 备份中 Success // 备份成功 Failed // 备份失败 Expired // 备份过期 - - **Zone** (str) - 所在可用区 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBLogPackageRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBLogPackage", d, **kwargs) - return apis.DescribeUDBLogPackageResponseSchema().loads(resp) - - def describe_udb_param_group(self, req=None, **kwargs): - """ DescribeUDBParamGroup - 获取参数组详细参数信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - (Required) 分页显示的条目数,列表操作则指定 - - **Offset** (int) - (Required) 分页显示的起始偏移,列表操作则指定 - - **ClassType** (str) - 如果未指定GroupId,则可选是否选取特定DB类型的配置(sql, nosql, postgresql, sqlserver) - - **GroupId** (int) - 参数组id,如果指定则获取描述,否则是列表操作,需要 指定Offset/Limit - - **IsInUDBC** (bool) - 是否选取专区中配置 - - **RegionFlag** (bool) - 当请求没有填写Zone时,如果指定为true,表示只拉取跨可用区的相关配置文件,否则,拉取所有机房的配置文件(包括每个单可用区和跨可用区) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDBParamGroupSet** 模型定义 - - **TotalCount** (int) - 参数组总数,列表操作时才会有该参数 - - **Response Model** - - **UDBParamMemberSet** - - - **AllowedVal** (str) - 允许的值(根据参数类型,用分隔符表示) - - **ApplyType** (int) - 参数值应用类型,取值范围为{0,10,20},各值代表 意义为0-unknown、10-static、20-dynamic - - **FormatType** (int) - 允许值的格式类型,取值范围为{0,10,20},意义分 别为PVFT_UNKOWN=0,PVFT_RANGE=10, PVFT_ENUM=20 - - **Key** (str) - 参数名称 - - **Modifiable** (bool) - 是否可更改,默认为false - - **Value** (str) - 参数值 - - **ValueType** (int) - 参数值应用类型,取值范围为{0,10,20,30},各值 代表意义为 0-unknown、10-int、20-string、 30-bool - - **UDBParamGroupSet** - - - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id 目前id的取值范围为[1,7],数值对应的版本如下 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6 7:percona-5.6 - - **Description** (str) - 参数组描述 - - **GroupId** (int) - 参数组id - - **GroupName** (str) - 参数组名称 - - **Modifiable** (bool) - 参数组是否可修改 - - **ParamMember** (list) - 见 **UDBParamMemberSet** 模型定义 - - **RegionFlag** (bool) - - - **Zone** (str) - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBParamGroupRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBParamGroup", d, **kwargs) - return apis.DescribeUDBParamGroupResponseSchema().loads(resp) - - def describe_udb_type(self, req=None, **kwargs): - """ DescribeUDBType - 获取UDB支持的类型信息 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **BackupZone** (str) - 跨可用区高可用DB的备库所在区域,仅当该可用区支持跨可用区高可用时填入。参见 `可用区列表 `_ - - **DBClusterType** (str) - DB实例类型,如mysql,sqlserver,mongo,postgresql - - **DiskType** (str) - 返回支持某种磁盘类型的DB类型。如果没传,则表示任何磁盘类型均可。 - - **InstanceMode** (str) - 返回支持某种实例类型的DB类型。如果没传,则表示任何实例类型均可。normal:单点,ha:高可用,sharded_cluster:分片集群 - - **Response** - - - **Action** (str) - 操作名称 - - **DataSet** (list) - 见 **UDBTypeSet** 模型定义 - - **RetCode** (int) - 返回码 - - **Response Model** - - **UDBTypeSet** - - - **DBTypeId** (str) - DB类型id,mysql/mongodb按版本细分各有一个id, 目前id的取值范围为[1,7],数值对应的版本如下: 1:mysql-5.5,2:mysql-5.1,3:percona-5.5 4:mongodb-2.4,5:mongodb-2.6,6:mysql-5.6, 7:percona-5.6 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDBTypeRequestSchema().dumps(d) - resp = self.invoke("DescribeUDBType", d, **kwargs) - return apis.DescribeUDBTypeResponseSchema().loads(resp) - - def edit_udb_backup_blacklist(self, req=None, **kwargs): - """ EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Blacklist** (str) - (Required) 黑名单,规范示例,指定库mysql.%;test.%; 指定表city.address; - - **DBId** (str) - (Required) DB实例Id,该值可以通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.EditUDBBackupBlacklistRequestSchema().dumps(d) - resp = self.invoke("EditUDBBackupBlacklist", d, **kwargs) - return apis.EditUDBBackupBlacklistResponseSchema().loads(resp) - - def fetch_udb_instance_earliest_recover_time(self, req=None, **kwargs): - """ FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) DB实例Id - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **EarliestTime** (int) - 获取最早可回档时间点 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.FetchUDBInstanceEarliestRecoverTimeRequestSchema().dumps(d) - resp = self.invoke("FetchUDBInstanceEarliestRecoverTime", d, **kwargs) - return apis.FetchUDBInstanceEarliestRecoverTimeResponseSchema().loads( - resp - ) - - def modify_udb_instance_name(self, req=None, **kwargs): - """ ModifyUDBInstanceName - 重命名UDB实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **Name** (str) - (Required) 实例的新名字, 长度要求为6~63位 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUDBInstanceNameRequestSchema().dumps(d) - resp = self.invoke("ModifyUDBInstanceName", d, **kwargs) - return apis.ModifyUDBInstanceNameResponseSchema().loads(resp) - - def modify_udb_instance_password(self, req=None, **kwargs): - """ ModifyUDBInstancePassword - 修改DB实例的管理员密码 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的ID,该值可以通过DescribeUDBInstance获取 - - **Password** (str) - (Required) 实例的新密码 - - **AccountName** (str) - sqlserver帐号,仅在sqlserver的情况下填该参数 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUDBInstancePasswordRequestSchema().dumps(d) - resp = self.invoke("ModifyUDBInstancePassword", d, **kwargs) - return apis.ModifyUDBInstancePasswordResponseSchema().loads(resp) - - def promote_udb_instance_to_ha(self, req=None, **kwargs): - """ PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.PromoteUDBInstanceToHARequestSchema().dumps(d) - resp = self.invoke("PromoteUDBInstanceToHA", d, **kwargs) - return apis.PromoteUDBInstanceToHAResponseSchema().loads(resp) - - def promote_udb_slave(self, req=None, **kwargs): - """ PromoteUDBSlave - 从库提升为独立库 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **IsForce** (bool) - 是否强制(如果从库落后可能会禁止提升),默认false 如果落后情况下,强制提升丢失数据 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.PromoteUDBSlaveRequestSchema().dumps(d) - resp = self.invoke("PromoteUDBSlave", d, **kwargs) - return apis.PromoteUDBSlaveResponseSchema().loads(resp) - - def resize_udb_instance(self, req=None, **kwargs): - """ ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id - - **DiskSpace** (int) - (Required) 磁盘空间(GB), 暂时支持20G-3000G - - **MemoryLimit** (int) - (Required) 内存限制(MB),目前支持以下几档 1000M/2000M/4000M/ 6000M/8000M/ 12000M/16000M/ 24000M/32000M/ 48000M/64000M/96000M。 - - **CouponId** (str) - 使用的代金券id - - **InstanceMode** (str) - UDB实例模式类型, 可选值如下: "Normal": 普通版UDB实例 "HA": 高可用版UDB实例 默认是"Normal" - - **InstanceType** (str) - UDB数据库机型: "Normal": "标准机型" , "SATA_SSD": "SSD机型" , "PCIE_SSD": "SSD高性能机型" , "Normal_Volume": "标准大容量机型", "SATA_SSD_Volume": "SSD大容量机型" , "PCIE_SSD_Volume": "SSD高性能大容量机型" - - **SSDType** (str) - SSD类型,可选值为"SATA"、"PCI-E",如果UseSSD为true ,则必选 - - **StartAfterUpgrade** (bool) - DB关闭状态下升降级,升降级后是否启动DB,默认为false - - **UDBCId** (str) - 专区的ID,如果有值表示专区中的DB配置升降级 - - **UseSSD** (bool) - 是否使用SSD,默认为false - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("ResizeUDBInstance", d, **kwargs) - return apis.ResizeUDBInstanceResponseSchema().loads(resp) - - def restart_udb_instance(self, req=None, **kwargs): - """ RestartUDBInstance - 重启UDB实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RestartUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("RestartUDBInstance", d, **kwargs) - return apis.RestartUDBInstanceResponseSchema().loads(resp) - - def start_udb_instance(self, req=None, **kwargs): - """ StartUDBInstance - 启动UDB实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.StartUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("StartUDBInstance", d, **kwargs) - return apis.StartUDBInstanceResponseSchema().loads(resp) - - def stop_udb_instance(self, req=None, **kwargs): - """ StopUDBInstance - 关闭UDB实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **ForceToKill** (bool) - 是否使用强制手段关闭DB,默认是false - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.StopUDBInstanceRequestSchema().dumps(d) - resp = self.invoke("StopUDBInstance", d, **kwargs) - return apis.StopUDBInstanceResponseSchema().loads(resp) - - def switch_udb_instance_to_ha(self, req=None, **kwargs): - """ SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 实例的Id,该值可以通过DescribeUDBInstance获取 - - **ChargeType** (str) - Year, Month, Dynamic,Trial,不填则按现在单点计费执行 - - **Quantity** (str) - 购买时长,需要和 ChargeType 搭配使用,否则使用单点计费策略的值 - - **Tag** (str) - 业务组 - - **Response** - - - **DBId** (str) - 切换后高可用db实例的Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.SwitchUDBInstanceToHARequestSchema().dumps(d) - resp = self.invoke("SwitchUDBInstanceToHA", d, **kwargs) - return apis.SwitchUDBInstanceToHAResponseSchema().loads(resp) - - def update_udb_instance_backup_strategy(self, req=None, **kwargs): - """ UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DBId** (str) - (Required) 主节点的Id - - **BackupDate** (str) - 备份时期标记位。共7位,每一位为一周中一天的备份情况,0表示关闭当天备份,1表示打开当天备份。最右边的一位为星期天的备份开关,其余从右到左依次为星期一到星期六的备份配置开关,每周必须至少设置两天备份。例如:1100000表示打开星期六和星期五的备份功能 - - **BackupMethod** (str) - 选择默认的备份方式,可选 snapshot 表示使用快照/物理备份,填 logic 表示使用逻辑备份。需要同时设置BackupDate字段。(注意现在只有SSD 版本的 MySQL实例支持物理备份) - - **BackupTime** (int) - 备份的整点时间,范围[0,23] - - **ForceDump** (bool) - 当导出某些数据遇到问题后,是否强制导出其他剩余数据默认是false需要同时设置BackupDate字段 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateUDBInstanceBackupStrategyRequestSchema().dumps(d) - resp = self.invoke("UpdateUDBInstanceBackupStrategy", d, **kwargs) - return apis.UpdateUDBInstanceBackupStrategyResponseSchema().loads(resp) - - def update_udb_instance_slave_backup_switch(self, req=None, **kwargs): - """ UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupSwitch** (int) - (Required) 从库的备份开关,范围[0,1],0表示从库备份功能关闭,1 表示从库备份开关打开。 - - **MasterDBId** (str) - (Required) 主库的Id - - **SlaveDBId** (str) - 从库的Id,如果从库备份开关设定为打开,则必须赋值。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateUDBInstanceSlaveBackupSwitchRequestSchema().dumps(d) - resp = self.invoke("UpdateUDBInstanceSlaveBackupSwitch", d, **kwargs) - return apis.UpdateUDBInstanceSlaveBackupSwitchResponseSchema().loads( - resp - ) - - def update_udb_param_group(self, req=None, **kwargs): - """ UpdateUDBParamGroup - 更新UDB配置参数项 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (int) - (Required) 配置参数组id,使用DescribeUDBParamGroup获得 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Description** (str) - 配置文件的描述,不传时认为不修改 - - **Key** (str) - 参数名称(与Value配合使用) - - **Name** (str) - 配置文件的名字,不传时认为不修改名字,传了则不能为空 - - **RegionFlag** (bool) - 该配置文件是否是地域级别配置文件,默认是false - - **Value** (str) - 参数值(与Key配合使用) - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateUDBParamGroupRequestSchema().dumps(d) - resp = self.invoke("UpdateUDBParamGroup", d, **kwargs) - return apis.UpdateUDBParamGroupResponseSchema().loads(resp) - - def upload_udb_param_group(self, req=None, **kwargs): - """ UploadUDBParamGroup - 导入UDB配置 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Content** (str) - (Required) 配置内容,导入的配置内容采用base64编码 - - **DBTypeId** (str) - (Required) DB类型id,DB类型id,mysql/mongodb/postgesql按版本细分 1:mysql-5.1,2:mysql-5.5,3:percona-5.5,4:mysql-5.6,5:percona-5.6,6:mysql-5.7,7:percona-5.7,8:mariadb-10.0,9:mongodb-2.4,10:mongodb-2.6,11:mongodb-3.0,12:mongodb-3.2,13:postgresql-9.4,14:postgresql-9.6 - - **Description** (str) - (Required) 参数组描述 - - **GroupName** (str) - (Required) 配置参数组名称 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ParamGroupTypeId** (int) - 配置文件子类型 0-未知, 1-Shardsvr-MMAPv1, 2-Shardsvr-WiredTiger, 3-Configsvr-MMAPv1, 4-Configsvr-WiredTiger, 5-Mongos - - **RegionFlag** (bool) - 该配置文件是否是地域级别配置文件,默认是false - - **Response** - - - **GroupId** (int) - 配置参数组id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UploadUDBParamGroupRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("UploadUDBParamGroup", d, **kwargs) - return apis.UploadUDBParamGroupResponseSchema().loads(resp) diff --git a/ucloud/services/udb/schemas/__init__.py b/ucloud/services/udb/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/udb/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/udb/schemas/apis.py b/ucloud/services/udb/schemas/apis.py deleted file mode 100644 index 77989f9..0000000 --- a/ucloud/services/udb/schemas/apis.py +++ /dev/null @@ -1,1452 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.udb.schemas import models - -""" UDB API Schema -""" -""" -API: BackupUDBInstance - -备份UDB实例 -""" - - -class BackupUDBInstanceRequestSchema(schema.RequestSchema): - """ BackupUDBInstance - 备份UDB实例 - """ - - fields = { - "BackupMethod": fields.Str(required=False, dump_to="BackupMethod"), - "BackupName": fields.Str(required=True, dump_to="BackupName"), - "Blacklist": fields.Str(required=False, dump_to="Blacklist"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ForceBackup": fields.Bool(required=False, dump_to="ForceBackup"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UseBlacklist": fields.Bool(required=False, dump_to="UseBlacklist"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class BackupUDBInstanceResponseSchema(schema.ResponseSchema): - """ BackupUDBInstance - 备份UDB实例 - """ - - fields = {} - - -""" -API: BackupUDBInstanceBinlog - -备份UDB指定时间段的binlog列表 -""" - - -class BackupUDBInstanceBinlogRequestSchema(schema.RequestSchema): - """ BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表 - """ - - fields = { - "BackupFile": fields.Str(required=True, dump_to="BackupFile"), - "BackupName": fields.Str(required=False, dump_to="BackupName"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class BackupUDBInstanceBinlogResponseSchema(schema.ResponseSchema): - """ BackupUDBInstanceBinlog - 备份UDB指定时间段的binlog列表 - """ - - fields = {} - - -""" -API: BackupUDBInstanceErrorLog - -备份UDB指定时间段的errorlog -""" - - -class BackupUDBInstanceErrorLogRequestSchema(schema.RequestSchema): - """ BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog - """ - - fields = { - "BackupName": fields.Str(required=True, dump_to="BackupName"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class BackupUDBInstanceErrorLogResponseSchema(schema.ResponseSchema): - """ BackupUDBInstanceErrorLog - 备份UDB指定时间段的errorlog - """ - - fields = {} - - -""" -API: BackupUDBInstanceSlowLog - -备份UDB指定时间段的slowlog分析结果 -""" - - -class BackupUDBInstanceSlowLogRequestSchema(schema.RequestSchema): - """ BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果 - """ - - fields = { - "BackupName": fields.Str(required=True, dump_to="BackupName"), - "BeginTime": fields.Int(required=True, dump_to="BeginTime"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "EndTime": fields.Int(required=True, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class BackupUDBInstanceSlowLogResponseSchema(schema.ResponseSchema): - """ BackupUDBInstanceSlowLog - 备份UDB指定时间段的slowlog分析结果 - """ - - fields = {} - - -""" -API: CheckRecoverUDBInstance - -核查db是否可以使用回档功能 -""" - - -class CheckRecoverUDBInstanceRequestSchema(schema.RequestSchema): - """ CheckRecoverUDBInstance - 核查db是否可以使用回档功能 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SrcDBId": fields.Str(required=True, dump_to="SrcDBId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CheckRecoverUDBInstanceResponseSchema(schema.ResponseSchema): - """ CheckRecoverUDBInstance - 核查db是否可以使用回档功能 - """ - - fields = { - "LastestTime": fields.Int(required=False, load_from="LastestTime") - } - - -""" -API: CheckUDBInstanceToHAAllowance - -核查db是否可以升级为高可用 -""" - - -class CheckUDBInstanceToHAAllowanceRequestSchema(schema.RequestSchema): - """ CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class CheckUDBInstanceToHAAllowanceResponseSchema(schema.ResponseSchema): - """ CheckUDBInstanceToHAAllowance - 核查db是否可以升级为高可用 - """ - - fields = {"Allowance": fields.Str(required=False, load_from="Allowance")} - - -""" -API: ClearUDBLog - -清除UDB实例的log -""" - - -class ClearUDBLogRequestSchema(schema.RequestSchema): - """ ClearUDBLog - 清除UDB实例的log - """ - - fields = { - "BeforeTime": fields.Int(required=False, dump_to="BeforeTime"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "LogType": fields.Int(required=True, dump_to="LogType"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ClearUDBLogResponseSchema(schema.ResponseSchema): - """ ClearUDBLog - 清除UDB实例的log - """ - - fields = {} - - -""" -API: CreateUDBInstance - -创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例) -""" - - -class CreateUDBInstanceRequestSchema(schema.RequestSchema): - """ CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例) - """ - - fields = { - "AdminPassword": fields.Str(required=True, dump_to="AdminPassword"), - "AdminUser": fields.Str(required=False, dump_to="AdminUser"), - "BackupCount": fields.Int(required=False, dump_to="BackupCount"), - "BackupDuration": fields.Int(required=False, dump_to="BackupDuration"), - "BackupId": fields.Int(required=False, dump_to="BackupId"), - "BackupTime": fields.Int(required=False, dump_to="BackupTime"), - "BackupZone": fields.Str(required=False, dump_to="BackupZone"), - "CPU": fields.Int(required=False, dump_to="CPU"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ClusterRole": fields.Str(required=False, dump_to="ClusterRole"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "DBTypeId": fields.Str(required=True, dump_to="DBTypeId"), - "DisableSemisync": fields.Bool( - required=False, dump_to="DisableSemisync" - ), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "HAArch": fields.Str(required=False, dump_to="HAArch"), - "InstanceMode": fields.Str(required=False, dump_to="InstanceMode"), - "InstanceType": fields.Str(required=False, dump_to="InstanceType"), - "MemoryLimit": fields.Int(required=True, dump_to="MemoryLimit"), - "Name": fields.Str(required=True, dump_to="Name"), - "ParamGroupId": fields.Int(required=True, dump_to="ParamGroupId"), - "Port": fields.Int(required=True, dump_to="Port"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSDType": fields.Str(required=False, dump_to="SSDType"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "UDBCId": fields.Str(required=False, dump_to="UDBCId"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateUDBInstanceResponseSchema(schema.ResponseSchema): - """ CreateUDBInstance - 创建UDB实例(包括创建mysql master节点、mongodb primary/configsvr节点和从备份恢复实例) - """ - - fields = {"DBId": fields.Str(required=False, load_from="DBId")} - - -""" -API: CreateUDBInstanceByRecovery - -创建db,将新创建的db恢复到指定db某个指定时间点 -""" - - -class CreateUDBInstanceByRecoveryRequestSchema(schema.RequestSchema): - """ CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "RecoveryTime": fields.Int(required=True, dump_to="RecoveryTime"), - "Region": fields.Str(required=True, dump_to="Region"), - "SrcDBId": fields.Str(required=True, dump_to="SrcDBId"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "UDBCId": fields.Str(required=False, dump_to="UDBCId"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUDBInstanceByRecoveryResponseSchema(schema.ResponseSchema): - """ CreateUDBInstanceByRecovery - 创建db,将新创建的db恢复到指定db某个指定时间点 - """ - - fields = {"DBId": fields.Str(required=False, load_from="DBId")} - - -""" -API: CreateUDBParamGroup - -从已有配置文件创建新配置文件 -""" - - -class CreateUDBParamGroupRequestSchema(schema.RequestSchema): - """ CreateUDBParamGroup - 从已有配置文件创建新配置文件 - """ - - fields = { - "DBTypeId": fields.Str(required=True, dump_to="DBTypeId"), - "Description": fields.Str(required=True, dump_to="Description"), - "GroupName": fields.Str(required=True, dump_to="GroupName"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "SrcGroupId": fields.Int(required=True, dump_to="SrcGroupId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateUDBParamGroupResponseSchema(schema.ResponseSchema): - """ CreateUDBParamGroup - 从已有配置文件创建新配置文件 - """ - - fields = {"GroupId": fields.Int(required=False, load_from="GroupId")} - - -""" -API: CreateUDBReplicationInstance - -创建MongoDB的副本节点(包括仲裁) -""" - - -class CreateUDBReplicationInstanceRequestSchema(schema.RequestSchema): - """ CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁) - """ - - fields = { - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "IsArbiter": fields.Bool(required=False, dump_to="IsArbiter"), - "Name": fields.Str(required=True, dump_to="Name"), - "Port": fields.Int(required=False, dump_to="Port"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SrcId": fields.Str(required=True, dump_to="SrcId"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUDBReplicationInstanceResponseSchema(schema.ResponseSchema): - """ CreateUDBReplicationInstance - 创建MongoDB的副本节点(包括仲裁) - """ - - fields = {"DBId": fields.Str(required=False, load_from="DBId")} - - -""" -API: CreateUDBRouteInstance - -创建mongos实例 -""" - - -class CreateUDBRouteInstanceRequestSchema(schema.RequestSchema): - """ CreateUDBRouteInstance - 创建mongos实例 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ConfigsvrId": fields.List(fields.Str()), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "DBTypeId": fields.Str(required=True, dump_to="DBTypeId"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "MemoryLimit": fields.Int(required=True, dump_to="MemoryLimit"), - "Name": fields.Str(required=True, dump_to="Name"), - "ParamGroupId": fields.Int(required=True, dump_to="ParamGroupId"), - "Port": fields.Int(required=True, dump_to="Port"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUDBRouteInstanceResponseSchema(schema.ResponseSchema): - """ CreateUDBRouteInstance - 创建mongos实例 - """ - - fields = {"DBId": fields.Str(required=False, load_from="DBId")} - - -""" -API: CreateUDBSlave - -创建UDB实例的slave -""" - - -class CreateUDBSlaveRequestSchema(schema.RequestSchema): - """ CreateUDBSlave - 创建UDB实例的slave - """ - - fields = { - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "DiskSpace": fields.Int(required=False, dump_to="DiskSpace"), - "InstanceMode": fields.Str(required=False, dump_to="InstanceMode"), - "InstanceType": fields.Str(required=False, dump_to="InstanceType"), - "IsLock": fields.Bool(required=False, dump_to="IsLock"), - "MemoryLimit": fields.Int(required=False, dump_to="MemoryLimit"), - "Name": fields.Str(required=True, dump_to="Name"), - "Port": fields.Int(required=False, dump_to="Port"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSDType": fields.Str(required=False, dump_to="SSDType"), - "SrcId": fields.Str(required=True, dump_to="SrcId"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUDBSlaveResponseSchema(schema.ResponseSchema): - """ CreateUDBSlave - 创建UDB实例的slave - """ - - fields = {"DBId": fields.Str(required=False, load_from="DBId")} - - -""" -API: DeleteUDBBackup - -删除UDB实例备份 -""" - - -class DeleteUDBBackupRequestSchema(schema.RequestSchema): - """ DeleteUDBBackup - 删除UDB实例备份 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "BackupZone": fields.Str(required=False, dump_to="BackupZone"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteUDBBackupResponseSchema(schema.ResponseSchema): - """ DeleteUDBBackup - 删除UDB实例备份 - """ - - fields = {} - - -""" -API: DeleteUDBInstance - -删除UDB实例 -""" - - -class DeleteUDBInstanceRequestSchema(schema.RequestSchema): - """ DeleteUDBInstance - 删除UDB实例 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDBCId": fields.Str(required=False, dump_to="UDBCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DeleteUDBInstanceResponseSchema(schema.ResponseSchema): - """ DeleteUDBInstance - 删除UDB实例 - """ - - fields = {} - - -""" -API: DeleteUDBLogPackage - -删除UDB日志包 -""" - - -class DeleteUDBLogPackageRequestSchema(schema.RequestSchema): - """ DeleteUDBLogPackage - 删除UDB日志包 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "BackupZone": fields.Str(required=False, dump_to="BackupZone"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteUDBLogPackageResponseSchema(schema.ResponseSchema): - """ DeleteUDBLogPackage - 删除UDB日志包 - """ - - fields = {} - - -""" -API: DeleteUDBParamGroup - -删除配置参数组 -""" - - -class DeleteUDBParamGroupRequestSchema(schema.RequestSchema): - """ DeleteUDBParamGroup - 删除配置参数组 - """ - - fields = { - "GroupId": fields.Int(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteUDBParamGroupResponseSchema(schema.ResponseSchema): - """ DeleteUDBParamGroup - 删除配置参数组 - """ - - fields = {} - - -""" -API: DescribeUDBBackup - -列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区 -""" - - -class DescribeUDBBackupRequestSchema(schema.RequestSchema): - """ DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区 - """ - - fields = { - "BackupId": fields.Int(required=False, dump_to="BackupId"), - "BackupType": fields.Int(required=False, dump_to="BackupType"), - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "ClassType": fields.Str(required=False, dump_to="ClassType"), - "DBId": fields.Str(required=False, dump_to="DBId"), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "Limit": fields.Int(required=True, dump_to="Limit"), - "Offset": fields.Int(required=True, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBBackupResponseSchema(schema.ResponseSchema): - """ DescribeUDBBackup - 列表UDB实例备份信息.Zone不填表示多可用区,填代表单可用区 - """ - - fields = { - "DataSet": fields.List( - models.UDBBackupSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUDBBackupBlacklist - -获取UDB实例的备份黑名单 -""" - - -class DescribeUDBBackupBlacklistRequestSchema(schema.RequestSchema): - """ DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBBackupBlacklistResponseSchema(schema.ResponseSchema): - """ DescribeUDBBackupBlacklist - 获取UDB实例的备份黑名单 - """ - - fields = {"Blacklist": fields.Str(required=False, load_from="Blacklist")} - - -""" -API: DescribeUDBBinlogBackupURL - -获取UDB的Binlog备份地址 -""" - - -class DescribeUDBBinlogBackupURLRequestSchema(schema.RequestSchema): - """ DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBBinlogBackupURLResponseSchema(schema.ResponseSchema): - """ DescribeUDBBinlogBackupURL - 获取UDB的Binlog备份地址 - """ - - fields = { - "BackupPath": fields.Str(required=False, load_from="BackupPath"), - "InnerBackupPath": fields.Str( - required=False, load_from="InnerBackupPath" - ), - } - - -""" -API: DescribeUDBInstance - -获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。 -""" - - -class DescribeUDBInstanceRequestSchema(schema.RequestSchema): - """ DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。 - """ - - fields = { - "ClassType": fields.Str(required=False, dump_to="ClassType"), - "DBId": fields.Str(required=False, dump_to="DBId"), - "IncludeSlaves": fields.Bool(required=False, dump_to="IncludeSlaves"), - "IsInUDBC": fields.Bool(required=False, dump_to="IsInUDBC"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDBCId": fields.Str(required=False, dump_to="UDBCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBInstanceResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstance - 获取UDB实例信息,支持两类操作:(1)指定DBId用于获取该db的信息;(2)指定ClassType、Offset、Limit用于列表操作,查询某一个类型db。 - """ - - fields = { - "DataSet": fields.List( - models.UDBInstanceSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUDBInstanceBackupState - -获取UDB实例备份状态 -""" - - -class DescribeUDBInstanceBackupStateRequestSchema(schema.RequestSchema): - """ DescribeUDBInstanceBackupState - 获取UDB实例备份状态 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "BackupZone": fields.Str(required=False, dump_to="BackupZone"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUDBInstanceBackupStateResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstanceBackupState - 获取UDB实例备份状态 - """ - - fields = { - "BackupEndTime": fields.Int(required=False, load_from="BackupEndTime"), - "BackupSize": fields.Int(required=False, load_from="BackupSize"), - "State": fields.Str(required=False, load_from="State"), - } - - -""" -API: DescribeUDBInstanceBackupURL - -获取UDB备份下载地址 -""" - - -class DescribeUDBInstanceBackupURLRequestSchema(schema.RequestSchema): - """ DescribeUDBInstanceBackupURL - 获取UDB备份下载地址 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBInstanceBackupURLResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstanceBackupURL - 获取UDB备份下载地址 - """ - - fields = { - "BackupPath": fields.Str(required=False, load_from="BackupPath"), - "InnerBackupPath": fields.Str( - required=False, load_from="InnerBackupPath" - ), - } - - -""" -API: DescribeUDBInstanceBinlog - -获取UDB指定时间段的binlog列表 -""" - - -class DescribeUDBInstanceBinlogRequestSchema(schema.RequestSchema): - """ DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表 - """ - - fields = { - "BeginTime": fields.Int(required=True, dump_to="BeginTime"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "EndTime": fields.Int(required=True, dump_to="EndTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBInstanceBinlogResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstanceBinlog - 获取UDB指定时间段的binlog列表 - """ - - fields = { - "DataSet": fields.List( - models.UDBInstanceBinlogSetSchema(), - required=False, - load_from="DataSet", - ) - } - - -""" -API: DescribeUDBInstanceBinlogBackupState - -获取udb实例备份状态 -""" - - -class DescribeUDBInstanceBinlogBackupStateRequestSchema(schema.RequestSchema): - """ DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "BackupZone": fields.Str(required=False, dump_to="BackupZone"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUDBInstanceBinlogBackupStateResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstanceBinlogBackupState - 获取udb实例备份状态 - """ - - fields = { - "BackupSize": fields.Int(required=False, load_from="BackupSize"), - "State": fields.Str(required=False, load_from="State"), - } - - -""" -API: DescribeUDBInstancePrice - -获取UDB实例价格信息 -""" - - -class DescribeUDBInstancePriceRequestSchema(schema.RequestSchema): - """ DescribeUDBInstancePrice - 获取UDB实例价格信息 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Count": fields.Int(required=False, dump_to="Count"), - "DBTypeId": fields.Str(required=True, dump_to="DBTypeId"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "InstanceMode": fields.Str(required=False, dump_to="InstanceMode"), - "MemoryLimit": fields.Int(required=True, dump_to="MemoryLimit"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSDType": fields.Str(required=False, dump_to="SSDType"), - "UseSSD": fields.Str(required=False, dump_to="UseSSD"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUDBInstancePriceResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstancePrice - 获取UDB实例价格信息 - """ - - fields = { - "DataSet": fields.List( - models.UDBInstancePriceSetSchema(), - required=False, - load_from="DataSet", - ) - } - - -""" -API: DescribeUDBInstanceState - -获取UDB实例状态 -""" - - -class DescribeUDBInstanceStateRequestSchema(schema.RequestSchema): - """ DescribeUDBInstanceState - 获取UDB实例状态 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBInstanceStateResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstanceState - 获取UDB实例状态 - """ - - fields = {"State": fields.Str(required=False, load_from="State")} - - -""" -API: DescribeUDBInstanceUpgradePrice - -获取UDB实例升降级价格信息 -""" - - -class DescribeUDBInstanceUpgradePriceRequestSchema(schema.RequestSchema): - """ DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "MemoryLimit": fields.Int(required=True, dump_to="MemoryLimit"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSDType": fields.Str(required=False, dump_to="SSDType"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBInstanceUpgradePriceResponseSchema(schema.ResponseSchema): - """ DescribeUDBInstanceUpgradePrice - 获取UDB实例升降级价格信息 - """ - - fields = {"Price": fields.Int(required=False, load_from="Price")} - - -""" -API: DescribeUDBLogBackupURL - -获取UDB的slowlog备份地址 -""" - - -class DescribeUDBLogBackupURLRequestSchema(schema.RequestSchema): - """ DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址 - """ - - fields = { - "BackupId": fields.Int(required=True, dump_to="BackupId"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBLogBackupURLResponseSchema(schema.ResponseSchema): - """ DescribeUDBLogBackupURL - 获取UDB的slowlog备份地址 - """ - - fields = { - "BackupPath": fields.Str(required=False, load_from="BackupPath"), - "UsernetPath": fields.Str(required=False, load_from="UsernetPath"), - } - - -""" -API: DescribeUDBLogPackage - -列表UDB实例binlog或slowlog或errorlog备份信息 -""" - - -class DescribeUDBLogPackageRequestSchema(schema.RequestSchema): - """ DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息 - """ - - fields = { - "BeginTime": fields.Int(required=False, dump_to="BeginTime"), - "DBId": fields.Str(required=False, dump_to="DBId"), - "EndTime": fields.Int(required=False, dump_to="EndTime"), - "Limit": fields.Int(required=True, dump_to="Limit"), - "Offset": fields.Int(required=True, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Type": fields.Int(required=False, dump_to="Type"), - "Types": fields.List(fields.Int()), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBLogPackageResponseSchema(schema.ResponseSchema): - """ DescribeUDBLogPackage - 列表UDB实例binlog或slowlog或errorlog备份信息 - """ - - fields = { - "DataSet": fields.List( - models.LogPackageDataSetSchema(), - required=False, - load_from="DataSet", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUDBParamGroup - -获取参数组详细参数信息 -""" - - -class DescribeUDBParamGroupRequestSchema(schema.RequestSchema): - """ DescribeUDBParamGroup - 获取参数组详细参数信息 - """ - - fields = { - "ClassType": fields.Str(required=False, dump_to="ClassType"), - "GroupId": fields.Int(required=False, dump_to="GroupId"), - "IsInUDBC": fields.Bool(required=False, dump_to="IsInUDBC"), - "Limit": fields.Int(required=True, dump_to="Limit"), - "Offset": fields.Int(required=True, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDBParamGroupResponseSchema(schema.ResponseSchema): - """ DescribeUDBParamGroup - 获取参数组详细参数信息 - """ - - fields = { - "DataSet": fields.List( - models.UDBParamGroupSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUDBType - -获取UDB支持的类型信息 -""" - - -class DescribeUDBTypeRequestSchema(schema.RequestSchema): - """ DescribeUDBType - 获取UDB支持的类型信息 - """ - - fields = { - "BackupZone": fields.Str(required=False, dump_to="BackupZone"), - "DBClusterType": fields.Str(required=False, dump_to="DBClusterType"), - "DiskType": fields.Str(required=False, dump_to="DiskType"), - "InstanceMode": fields.Str(required=False, dump_to="InstanceMode"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUDBTypeResponseSchema(schema.ResponseSchema): - """ DescribeUDBType - 获取UDB支持的类型信息 - """ - - fields = { - "Action": fields.Str(required=True, load_from="Action"), - "DataSet": fields.List( - models.UDBTypeSetSchema(), required=False, load_from="DataSet" - ), - "RetCode": fields.Int(required=True, load_from="RetCode"), - } - - -""" -API: EditUDBBackupBlacklist - -编辑UDB实例的备份黑名单 -""" - - -class EditUDBBackupBlacklistRequestSchema(schema.RequestSchema): - """ EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单 - """ - - fields = { - "Blacklist": fields.Str(required=True, dump_to="Blacklist"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class EditUDBBackupBlacklistResponseSchema(schema.ResponseSchema): - """ EditUDBBackupBlacklist - 编辑UDB实例的备份黑名单 - """ - - fields = {} - - -""" -API: FetchUDBInstanceEarliestRecoverTime - -获取UDB最早可回档的时间点 -""" - - -class FetchUDBInstanceEarliestRecoverTimeRequestSchema(schema.RequestSchema): - """ FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class FetchUDBInstanceEarliestRecoverTimeResponseSchema(schema.ResponseSchema): - """ FetchUDBInstanceEarliestRecoverTime - 获取UDB最早可回档的时间点 - """ - - fields = { - "EarliestTime": fields.Int(required=False, load_from="EarliestTime") - } - - -""" -API: ModifyUDBInstanceName - -重命名UDB实例 -""" - - -class ModifyUDBInstanceNameRequestSchema(schema.RequestSchema): - """ ModifyUDBInstanceName - 重命名UDB实例 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyUDBInstanceNameResponseSchema(schema.ResponseSchema): - """ ModifyUDBInstanceName - 重命名UDB实例 - """ - - fields = {} - - -""" -API: ModifyUDBInstancePassword - -修改DB实例的管理员密码 -""" - - -class ModifyUDBInstancePasswordRequestSchema(schema.RequestSchema): - """ ModifyUDBInstancePassword - 修改DB实例的管理员密码 - """ - - fields = { - "AccountName": fields.Str(required=False, dump_to="AccountName"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "Password": fields.Str(required=True, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyUDBInstancePasswordResponseSchema(schema.ResponseSchema): - """ ModifyUDBInstancePassword - 修改DB实例的管理员密码 - """ - - fields = {} - - -""" -API: PromoteUDBInstanceToHA - -普通db升级为高可用(只针对mysql5.5及以上版本) -""" - - -class PromoteUDBInstanceToHARequestSchema(schema.RequestSchema): - """ PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本) - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class PromoteUDBInstanceToHAResponseSchema(schema.ResponseSchema): - """ PromoteUDBInstanceToHA - 普通db升级为高可用(只针对mysql5.5及以上版本) - """ - - fields = {} - - -""" -API: PromoteUDBSlave - -从库提升为独立库 -""" - - -class PromoteUDBSlaveRequestSchema(schema.RequestSchema): - """ PromoteUDBSlave - 从库提升为独立库 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "IsForce": fields.Bool(required=False, dump_to="IsForce"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class PromoteUDBSlaveResponseSchema(schema.ResponseSchema): - """ PromoteUDBSlave - 从库提升为独立库 - """ - - fields = {} - - -""" -API: ResizeUDBInstance - -修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高 -""" - - -class ResizeUDBInstanceRequestSchema(schema.RequestSchema): - """ ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高 - """ - - fields = { - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "InstanceMode": fields.Str(required=False, dump_to="InstanceMode"), - "InstanceType": fields.Str(required=False, dump_to="InstanceType"), - "MemoryLimit": fields.Int(required=True, dump_to="MemoryLimit"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSDType": fields.Str(required=False, dump_to="SSDType"), - "StartAfterUpgrade": fields.Bool( - required=False, dump_to="StartAfterUpgrade" - ), - "UDBCId": fields.Str(required=False, dump_to="UDBCId"), - "UseSSD": fields.Bool(required=False, dump_to="UseSSD"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ResizeUDBInstanceResponseSchema(schema.ResponseSchema): - """ ResizeUDBInstance - 修改(升级和降级)UDB实例的配置,包括内存和磁盘的配置,对于内存升级无需关闭实例,其他场景需要事先关闭实例。两套参数可以配置升降机:1.配置UseSSD和SSDType 2.配置InstanceType,不需要配置InstanceMode。这两套第二套参数的优先级更高 - """ - - fields = {} - - -""" -API: RestartUDBInstance - -重启UDB实例 -""" - - -class RestartUDBInstanceRequestSchema(schema.RequestSchema): - """ RestartUDBInstance - 重启UDB实例 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class RestartUDBInstanceResponseSchema(schema.ResponseSchema): - """ RestartUDBInstance - 重启UDB实例 - """ - - fields = {} - - -""" -API: StartUDBInstance - -启动UDB实例 -""" - - -class StartUDBInstanceRequestSchema(schema.RequestSchema): - """ StartUDBInstance - 启动UDB实例 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class StartUDBInstanceResponseSchema(schema.ResponseSchema): - """ StartUDBInstance - 启动UDB实例 - """ - - fields = {} - - -""" -API: StopUDBInstance - -关闭UDB实例 -""" - - -class StopUDBInstanceRequestSchema(schema.RequestSchema): - """ StopUDBInstance - 关闭UDB实例 - """ - - fields = { - "DBId": fields.Str(required=True, dump_to="DBId"), - "ForceToKill": fields.Bool(required=False, dump_to="ForceToKill"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class StopUDBInstanceResponseSchema(schema.ResponseSchema): - """ StopUDBInstance - 关闭UDB实例 - """ - - fields = {} - - -""" -API: SwitchUDBInstanceToHA - -普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api -""" - - -class SwitchUDBInstanceToHARequestSchema(schema.RequestSchema): - """ SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Str(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class SwitchUDBInstanceToHAResponseSchema(schema.ResponseSchema): - """ SwitchUDBInstanceToHA - 普通UDB切换为高可用,原db状态为WaitForSwitch时,调用该api - """ - - fields = {"DBId": fields.Str(required=False, load_from="DBId")} - - -""" -API: UpdateUDBInstanceBackupStrategy - -修改UDB自动备份策略 -""" - - -class UpdateUDBInstanceBackupStrategyRequestSchema(schema.RequestSchema): - """ UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略 - """ - - fields = { - "BackupDate": fields.Str(required=False, dump_to="BackupDate"), - "BackupMethod": fields.Str(required=False, dump_to="BackupMethod"), - "BackupTime": fields.Int(required=False, dump_to="BackupTime"), - "DBId": fields.Str(required=True, dump_to="DBId"), - "ForceDump": fields.Bool(required=False, dump_to="ForceDump"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class UpdateUDBInstanceBackupStrategyResponseSchema(schema.ResponseSchema): - """ UpdateUDBInstanceBackupStrategy - 修改UDB自动备份策略 - """ - - fields = {} - - -""" -API: UpdateUDBInstanceSlaveBackupSwitch - -开启或者关闭UDB从库备份 -""" - - -class UpdateUDBInstanceSlaveBackupSwitchRequestSchema(schema.RequestSchema): - """ UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份 - """ - - fields = { - "BackupSwitch": fields.Int(required=True, dump_to="BackupSwitch"), - "MasterDBId": fields.Str(required=True, dump_to="MasterDBId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SlaveDBId": fields.Str(required=False, dump_to="SlaveDBId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class UpdateUDBInstanceSlaveBackupSwitchResponseSchema(schema.ResponseSchema): - """ UpdateUDBInstanceSlaveBackupSwitch - 开启或者关闭UDB从库备份 - """ - - fields = {} - - -""" -API: UpdateUDBParamGroup - -更新UDB配置参数项 -""" - - -class UpdateUDBParamGroupRequestSchema(schema.RequestSchema): - """ UpdateUDBParamGroup - 更新UDB配置参数项 - """ - - fields = { - "Description": fields.Str(required=False, dump_to="Description"), - "GroupId": fields.Int(required=True, dump_to="GroupId"), - "Key": fields.Str(required=False, dump_to="Key"), - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Value": fields.Str(required=False, dump_to="Value"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpdateUDBParamGroupResponseSchema(schema.ResponseSchema): - """ UpdateUDBParamGroup - 更新UDB配置参数项 - """ - - fields = {} - - -""" -API: UploadUDBParamGroup - -导入UDB配置 -""" - - -class UploadUDBParamGroupRequestSchema(schema.RequestSchema): - """ UploadUDBParamGroup - 导入UDB配置 - """ - - fields = { - "Content": fields.Str(required=True, dump_to="Content"), - "DBTypeId": fields.Str(required=True, dump_to="DBTypeId"), - "Description": fields.Str(required=True, dump_to="Description"), - "GroupName": fields.Str(required=True, dump_to="GroupName"), - "ParamGroupTypeId": fields.Int( - required=False, dump_to="ParamGroupTypeId" - ), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UploadUDBParamGroupResponseSchema(schema.ResponseSchema): - """ UploadUDBParamGroup - 导入UDB配置 - """ - - fields = {"GroupId": fields.Int(required=False, load_from="GroupId")} diff --git a/ucloud/services/udb/schemas/models.py b/ucloud/services/udb/schemas/models.py deleted file mode 100644 index 9bdea0b..0000000 --- a/ucloud/services/udb/schemas/models.py +++ /dev/null @@ -1,212 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UDBBackupSetSchema(schema.ResponseSchema): - """ UDBBackupSet - DescribeUDBBackup - """ - - fields = { - "BackupEndTime": fields.Int(required=False, load_from="BackupEndTime"), - "BackupId": fields.Int(required=False, load_from="BackupId"), - "BackupName": fields.Str(required=False, load_from="BackupName"), - "BackupSize": fields.Int(required=False, load_from="BackupSize"), - "BackupTime": fields.Int(required=False, load_from="BackupTime"), - "BackupType": fields.Int(required=False, load_from="BackupType"), - "BackupZone": fields.Str(required=False, load_from="BackupZone"), - "DBId": fields.Str(required=False, load_from="DBId"), - "DBName": fields.Str(required=False, load_from="DBName"), - "ErrorInfo": fields.Str(required=False, load_from="ErrorInfo"), - "State": fields.Str(required=False, load_from="State"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UDBSlaveInstanceSetSchema(schema.ResponseSchema): - """ UDBSlaveInstanceSet - DescribeUDBSlaveInstance - """ - - fields = { - "AdminUser": fields.Str(required=False, load_from="AdminUser"), - "BackupBeginTime": fields.Int( - required=False, load_from="BackupBeginTime" - ), - "BackupBlacklist": fields.Str( - required=False, load_from="BackupBlacklist" - ), - "BackupCount": fields.Int(required=False, load_from="BackupCount"), - "BackupDate": fields.Str(required=False, load_from="BackupDate"), - "BackupDuration": fields.Int( - required=False, load_from="BackupDuration" - ), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "ClusterRole": fields.Str(required=False, load_from="ClusterRole"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DBId": fields.Str(required=False, load_from="DBId"), - "DBTypeId": fields.Str(required=False, load_from="DBTypeId"), - "DataFileSize": fields.Float(required=False, load_from="DataFileSize"), - "DiskSpace": fields.Int(required=False, load_from="DiskSpace"), - "DiskUsedSize": fields.Float(required=False, load_from="DiskUsedSize"), - "ExpiredTime": fields.Int(required=False, load_from="ExpiredTime"), - "InstanceMode": fields.Str(required=False, load_from="InstanceMode"), - "InstanceType": fields.Str(required=False, load_from="InstanceType"), - "InstanceTypeId": fields.Int( - required=False, load_from="InstanceTypeId" - ), - "LogFileSize": fields.Float(required=False, load_from="LogFileSize"), - "MemoryLimit": fields.Int(required=False, load_from="MemoryLimit"), - "ModifyTime": fields.Int(required=False, load_from="ModifyTime"), - "Name": fields.Str(required=False, load_from="Name"), - "ParamGroupId": fields.Int(required=False, load_from="ParamGroupId"), - "Port": fields.Int(required=False, load_from="Port"), - "Role": fields.Str(required=False, load_from="Role"), - "SSDType": fields.Str(required=False, load_from="SSDType"), - "SrcDBId": fields.Str(required=False, load_from="SrcDBId"), - "State": fields.Str(required=False, load_from="State"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "SystemFileSize": fields.Float( - required=False, load_from="SystemFileSize" - ), - "Tag": fields.Str(required=False, load_from="Tag"), - "UseSSD": fields.Bool(required=False, load_from="UseSSD"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "VirtualIP": fields.Str(required=False, load_from="VirtualIP"), - "VirtualIPMac": fields.Str(required=False, load_from="VirtualIPMac"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UDBInstanceSetSchema(schema.ResponseSchema): - """ UDBInstanceSet - DescribeUDBInstance - """ - - fields = { - "AdminUser": fields.Str(required=False, load_from="AdminUser"), - "BackupBeginTime": fields.Int( - required=False, load_from="BackupBeginTime" - ), - "BackupBlacklist": fields.Str( - required=False, load_from="BackupBlacklist" - ), - "BackupCount": fields.Int(required=False, load_from="BackupCount"), - "BackupDate": fields.Str(required=False, load_from="BackupDate"), - "BackupDuration": fields.Int( - required=False, load_from="BackupDuration" - ), - "BackupZone": fields.Str(required=False, load_from="BackupZone"), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CluserRole": fields.Str(required=False, load_from="CluserRole"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DBId": fields.Str(required=False, load_from="DBId"), - "DBTypeId": fields.Str(required=False, load_from="DBTypeId"), - "DataFileSize": fields.Float(required=False, load_from="DataFileSize"), - "DataSet": fields.List(UDBSlaveInstanceSetSchema()), - "DiskSpace": fields.Int(required=False, load_from="DiskSpace"), - "DiskUsedSize": fields.Float(required=False, load_from="DiskUsedSize"), - "ExpiredTime": fields.Int(required=False, load_from="ExpiredTime"), - "InstanceMode": fields.Str(required=False, load_from="InstanceMode"), - "InstanceType": fields.Str(required=False, load_from="InstanceType"), - "InstanceTypeId": fields.Int( - required=False, load_from="InstanceTypeId" - ), - "LogFileSize": fields.Float(required=False, load_from="LogFileSize"), - "MemoryLimit": fields.Int(required=False, load_from="MemoryLimit"), - "ModifyTime": fields.Int(required=False, load_from="ModifyTime"), - "Name": fields.Str(required=False, load_from="Name"), - "ParamGroupId": fields.Int(required=False, load_from="ParamGroupId"), - "Port": fields.Int(required=False, load_from="Port"), - "Role": fields.Str(required=False, load_from="Role"), - "SSDType": fields.Str(required=False, load_from="SSDType"), - "SrcDBId": fields.Str(required=False, load_from="SrcDBId"), - "State": fields.Str(required=False, load_from="State"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "SystemFileSize": fields.Float( - required=False, load_from="SystemFileSize" - ), - "Tag": fields.Str(required=False, load_from="Tag"), - "UseSSD": fields.Bool(required=False, load_from="UseSSD"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "VirtualIP": fields.Str(required=False, load_from="VirtualIP"), - "VirtualIPMac": fields.Str(required=False, load_from="VirtualIPMac"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UDBInstanceBinlogSetSchema(schema.ResponseSchema): - """ UDBInstanceBinlogSet - DescribeUDBInstanceBinlog - """ - - fields = { - "BeginTime": fields.Int(required=False, load_from="BeginTime"), - "EndTime": fields.Int(required=False, load_from="EndTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Size": fields.Int(required=False, load_from="Size"), - } - - -class UDBInstancePriceSetSchema(schema.ResponseSchema): - """ UDBInstancePriceSet - DescribeUDBInstancePrice - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "Price": fields.Int(required=False, load_from="Price"), - } - - -class LogPackageDataSetSchema(schema.ResponseSchema): - """ LogPackageDataSet - DescribeUDBLogPackage - """ - - fields = { - "BackupId": fields.Int(required=False, load_from="BackupId"), - "BackupName": fields.Str(required=False, load_from="BackupName"), - "BackupSize": fields.Int(required=False, load_from="BackupSize"), - "BackupTime": fields.Int(required=False, load_from="BackupTime"), - "BackupType": fields.Int(required=False, load_from="BackupType"), - "BackupZone": fields.Str(required=False, load_from="BackupZone"), - "DBId": fields.Str(required=False, load_from="DBId"), - "DBName": fields.Str(required=False, load_from="DBName"), - "State": fields.Str(required=False, load_from="State"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UDBParamMemberSetSchema(schema.ResponseSchema): - """ UDBParamMemberSet - DescribeUDBParamGroup - """ - - fields = { - "AllowedVal": fields.Str(required=False, load_from="AllowedVal"), - "ApplyType": fields.Int(required=False, load_from="ApplyType"), - "FormatType": fields.Int(required=False, load_from="FormatType"), - "Key": fields.Str(required=False, load_from="Key"), - "Modifiable": fields.Bool(required=False, load_from="Modifiable"), - "Value": fields.Str(required=False, load_from="Value"), - "ValueType": fields.Int(required=False, load_from="ValueType"), - } - - -class UDBParamGroupSetSchema(schema.ResponseSchema): - """ UDBParamGroupSet - DescribeUDBParamGroup - """ - - fields = { - "DBTypeId": fields.Str(required=False, load_from="DBTypeId"), - "Description": fields.Str(required=False, load_from="Description"), - "GroupId": fields.Int(required=False, load_from="GroupId"), - "GroupName": fields.Str(required=False, load_from="GroupName"), - "Modifiable": fields.Bool(required=False, load_from="Modifiable"), - "ParamMember": fields.List(UDBParamMemberSetSchema()), - "RegionFlag": fields.Bool(required=False, load_from="RegionFlag"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UDBTypeSetSchema(schema.ResponseSchema): - """ UDBTypeSet - DescribeUDBType - """ - - fields = {"DBTypeId": fields.Str(required=False, load_from="DBTypeId")} diff --git a/ucloud/services/udisk/__init__.py b/ucloud/services/udisk/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/udisk/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/udisk/client.py b/ucloud/services/udisk/client.py deleted file mode 100644 index 8b836d4..0000000 --- a/ucloud/services/udisk/client.py +++ /dev/null @@ -1,465 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.udisk.schemas import apis - - -class UDiskClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UDiskClient, self).__init__(config, transport, middleware, logger) - - def attach_udisk(self, req=None, **kwargs): - """ AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDiskId** (str) - (Required) 需要挂载的UDisk实例ID. - - **UHostId** (str) - (Required) UHost实例ID - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **MultiAttach** (str) - 是否允许多点挂载(Yes: 允许多点挂载, No: 不允许多点挂载, 不填默认Yes ) - - **Response** - - - **UDiskId** (str) - 挂载的UDisk实例ID - - **UHostId** (str) - 挂载的UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AttachUDiskRequestSchema().dumps(d) - resp = self.invoke("AttachUDisk", d, **kwargs) - return apis.AttachUDiskResponseSchema().loads(resp) - - def clone_udisk(self, req=None, **kwargs): - """ CloneUDisk - 从UDisk创建UDisk克隆 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 实例名称 - - **SourceId** (str) - (Required) 克隆父Disk的Id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year , Month, Dynamic,Postpay 默认: Dynamic - - **Comment** (str) - Disk注释 - - **CouponId** (str) - 使用的代金券id - - **Quantity** (int) - 购买时长 默认: 1 - - **UDataArkMode** (str) - 方舟是否开启,"Yes":开启,"No":关闭;默认为"No" - - **Response** - - - **UDiskId** (list) - 创建UDisk Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CloneUDiskRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CloneUDisk", d, **kwargs) - return apis.CloneUDiskResponseSchema().loads(resp) - - def clone_udisk_snapshot(self, req=None, **kwargs): - """ CloneUDiskSnapshot - 从快照创建UDisk克隆 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 实例名称 - - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。 - - **SourceId** (str) - (Required) 克隆父Snapshot的Id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year , Month, Dynamic,Postpay 默认: Dynamic - - **Comment** (str) - Disk注释 - - **CouponId** (str) - 使用的代金券id - - **Quantity** (int) - 购买时长 默认: 1 - - **UDataArkMode** (str) - 是否开启数据方舟 默认:No - - **Response** - - - **UDiskId** (list) - 创建UDisk Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CloneUDiskSnapshotRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CloneUDiskSnapshot", d, **kwargs) - return apis.CloneUDiskSnapshotResponseSchema().loads(resp) - - def create_udisk(self, req=None, **kwargs): - """ CreateUDisk - 创建UDisk磁盘 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 实例名称 - - **Size** (int) - (Required) 购买UDisk大小,单位:GB,普通盘: 范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限;SSD盘: 范围[1~4000]。 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year , Month, Dynamic, Postpay, Trial 默认: Dynamic - - **CmkId** (str) - 加密需要的cmk id,UKmsMode为Yes时,必填 - - **CouponId** (str) - 使用的代金券id - - **DiskType** (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk) - - **Quantity** (int) - 购买时长 默认: 1 - - **Tag** (str) - 业务组 默认:Default - - **UDataArkMode** (str) - 是否开启数据方舟 - - **UKmsMode** (str) - 是否加密。Yes:加密,No:不加密,默认值(No) - - **Response** - - - **UDiskId** (list) - UDisk实例Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDiskRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDisk", d, **kwargs) - return apis.CreateUDiskResponseSchema().loads(resp) - - def create_udisk_snapshot(self, req=None, **kwargs): - """ CreateUDiskSnapshot - 创建snapshot快照 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 快照名称 - - **UDiskId** (str) - (Required) 快照的UDisk的Id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year , Month, Dynamic 默认: Dynamic - - **Comment** (str) - 快照描述 - - **Quantity** (int) - 购买时长 默认: 1 - - **Response** - - - **SnapshotId** (list) - 快照Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUDiskSnapshotRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUDiskSnapshot", d, **kwargs) - return apis.CreateUDiskSnapshotResponseSchema().loads(resp) - - def delete_udisk(self, req=None, **kwargs): - """ DeleteUDisk - 删除UDisk - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDiskId** (str) - (Required) 要删除的UDisk的Id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUDiskRequestSchema().dumps(d) - resp = self.invoke("DeleteUDisk", d, **kwargs) - return apis.DeleteUDiskResponseSchema().loads(resp) - - def delete_udisk_snapshot(self, req=None, **kwargs): - """ DeleteUDiskSnapshot - 删除Snapshot - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **SnapshotId** (str) - 快照Id(填写后不能填写UDisk Id) - - **UDiskId** (str) - UDisk Id,删除该盘所创建出来的所有快照(填写后不能填写SnapshotId) - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUDiskSnapshotRequestSchema().dumps(d) - resp = self.invoke("DeleteUDiskSnapshot", d, **kwargs) - return apis.DeleteUDiskSnapshotResponseSchema().loads(resp) - - def describe_udisk(self, req=None, **kwargs): - """ DescribeUDisk - 获取UDisk实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DiskType** (str) - ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:"CLOUD_NORMAL",IsBoot:"False"; 普通系统盘:DiskType:"CLOUD_NORMAL",IsBoot:"True";SSD数据盘:DiskType:"CLOUD_SSD",IsBoot:"False";SSD系统盘:DiskType:"CLOUD_SSD",IsBoot:"True";RSSD数据盘:DiskType:"CLOUD_RSSD",IsBoot:"False";为空拉取所有。ProtocolVersion字段为0或没有该字段时,可设为以下几个值:普通数据盘:DataDisk;普通系统盘;SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk;为空拉取所有。 - - **IsBoot** (str) - ProtocolVersion字段为1且DiskType不为空时,必须设置,设置规则请参照DiskType;ProtocolVersion字段为1且DiskType为空时,该字段无效。ProtocolVersion字段为0或没有该字段时,该字段无效。 - - **Limit** (int) - 返回数据长度, 默认为20 - - **Offset** (int) - 数据偏移量, 默认为0 - - **ProtocolVersion** (int) - 请求协议版本,建议升级为1,为1时DiskType与UHost磁盘类型定义一致;默认为0 - - **UDiskId** (str) - UDisk Id(留空返回全部) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDiskDataSet** 模型定义 - - **TotalCount** (int) - 根据过滤条件得到的总数 - - **Response Model** - - **UDiskDataSet** - - - **ArkSwitchEnable** (int) - 是否支持开启方舟,1支持 ,0不支持 - - **ChargeType** (str) - Year,Month,Dynamic,Trial,Postpay - - **CloneEnable** (int) - 是否支持克隆,1支持 ,0不支持 - - **CmkId** (str) - 该盘的cmk id - - **CmkIdAlias** (str) - cmk id 别名 - - **CmkIdStatus** (str) - 该盘cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘) - - **CreateTime** (int) - 创建时间 - - **DataKey** (str) - 该盘的密文密钥 - - **DeviceName** (str) - 挂载的设备名称 - - **DiskType** (str) - 请求中的ProtocolVersion字段为1时,需结合IsBoot确定具体磁盘类型:普通数据盘:DiskType:"CLOUD_NORMAL",IsBoot:"False"; 普通系统盘:DiskType:"CLOUD_NORMAL",IsBoot:"True";SSD数据盘:DiskType:"CLOUD_SSD",IsBoot:"False";SSD系统盘:DiskType:"CLOUD_SSD",IsBoot:"True";RSSD数据盘:DiskType:"CLOUD_RSSD",IsBoot:"False"。请求中的ProtocolVersion字段为0或没有该字段时,云硬盘类型参照如下:普通数据盘:DataDisk;普通系统盘:SystemDisk;SSD数据盘:SSDDataDisk;SSD系统盘:SSDSystemDisk;RSSD数据盘:RSSDDataDisk。 - - **ExpiredTime** (int) - 过期时间 - - **IsBoot** (str) - 是否是系统盘,是:"True", 否:"False" - - **IsExpire** (str) - 资源是否过期,过期:"Yes", 未过期:"No" - - **Name** (str) - 实例名称 - - **Size** (int) - 容量单位GB - - **SnapEnable** (int) - 是否支持快照,1支持 ,0不支持 - - **SnapshotCount** (int) - 该盘快照个数 - - **SnapshotLimit** (int) - 该盘快照上限 - - **Status** (str) - 状态:Available(可用),Attaching(挂载中), InUse(已挂载), Detaching(卸载中), Initializating(分配中), Failed(创建失败),Cloning(克隆中),Restoring(恢复中),RestoreFailed(恢复失败), - - **Tag** (str) - 业务组名称 - - **UDataArkMode** (str) - 是否开启数据方舟,开启:"Yes", 不支持:"No" - - **UDiskId** (str) - UDisk实例Id - - **UHostIP** (str) - 挂载的UHost的IP - - **UHostId** (str) - 挂载的UHost的Id - - **UHostName** (str) - 挂载的UHost的Name - - **UKmsMode** (str) - 是否是加密盘,是:"Yes", 否:"No" - - **Version** (str) - 是否支持数据方舟,支持:"2.0", 不支持:"1.0" - - **Zone** (str) - 可用区 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDiskRequestSchema().dumps(d) - resp = self.invoke("DescribeUDisk", d, **kwargs) - return apis.DescribeUDiskResponseSchema().loads(resp) - - def describe_udisk_price(self, req=None, **kwargs): - """ DescribeUDiskPrice - 获取UDisk实例价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~1000] - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year, Month, Dynamic,Trial,默认: Dynamic - - **DiskType** (str) - UDisk 类型: DataDisk(普通数据盘),SSDDataDisk(SSD数据盘),SystemDisk(普通系统盘),SSDSystemDisk(SSD系统盘),RSSDDataDisk(RSSD数据盘),默认值(DataDisk) - - **Quantity** (int) - 购买UDisk的时长,默认值为1 - - **UDataArkMode** (str) - 是否打开数据方舟, 打开"Yes",关闭"No", 默认关闭 - - **Response** - - - **DataSet** (list) - 见 **UDiskPriceDataSet** 模型定义 - - **Response Model** - - **UDiskPriceDataSet** - - - **ChargeName** (str) - "UDataArk","UDisk" - - **ChargeType** (str) - Year, Month, Dynamic,Trial - - **OriginalPrice** (int) - 用户折后价 - - **Price** (int) - 价格 (单位: 分) - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDiskPriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUDiskPrice", d, **kwargs) - return apis.DescribeUDiskPriceResponseSchema().loads(resp) - - def describe_udisk_snapshot(self, req=None, **kwargs): - """ DescribeUDiskSnapshot - 获取UDisk快照 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 返回数据长度, 默认为20 - - **Offset** (int) - 数据偏移量, 默认为0 - - **SnapshotId** (str) - 快照id,SnapshotId , UDiskId 同时传SnapshotId优先 - - **UDiskId** (str) - UDiskId,返回该盘所做快照.(必须同时传Zone) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDiskSnapshotSet** 模型定义 - - **TotalCount** (int) - 根据过滤条件得到的总数 - - **Response Model** - - **UDiskSnapshotSet** - - - **CmkId** (str) - 该快照的cmk id - - **CmkIdAlias** (str) - cmk id 别名 - - **CmkIdStatus** (str) - 该快照cmk的状态, Enabled(正常),Disabled(失效),Deleted(删除),NoCmkId(非加密盘) - - **Comment** (str) - 快照描述 - - **CreateTime** (int) - 创建时间 - - **DataKey** (str) - 该快照的密文密钥 - - **DiskType** (int) - 磁盘类型,0:数据盘,1:系统盘 - - **ExpiredTime** (int) - 过期时间 - - **IsUDiskAvailable** (bool) - 对应磁盘是否处于可用状态 - - **Name** (str) - 快照名称 - - **Size** (int) - 容量单位GB - - **SnapshotId** (str) - 快照Id - - **Status** (str) - 快照状态,Normal:正常,Failed:失败,Creating:制作中 - - **UDiskId** (str) - 快照的源UDisk的Id - - **UDiskName** (str) - 快照的源UDisk的Name - - **UHostId** (str) - 对应磁盘制作快照时所挂载的主机 - - **UKmsMode** (str) - 是否是加密盘快照,是:"Yes", 否:"No" - - **Version** (str) - 快照版本 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDiskSnapshotRequestSchema().dumps(d) - resp = self.invoke("DescribeUDiskSnapshot", d, **kwargs) - return apis.DescribeUDiskSnapshotResponseSchema().loads(resp) - - def describe_udisk_upgrade_price(self, req=None, **kwargs): - """ DescribeUDiskUpgradePrice - 获取UDisk升级价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 购买UDisk大小,单位:GB,范围[1~2000], 权限位控制可达8T,若需要请申请开通相关权限。 - - **SourceId** (str) - (Required) 升级目标UDisk ID - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **DiskType** (str) - 磁盘类型,SSDDataDisk:ssd数据盘,DataDisk:普通数据盘,SystemDisk:普通系统盘,SSDSystemDisk:ssd系统盘。默认为DataDisk - - **UDataArkMode** (str) - 是否打开数据方舟, 打开"Yes",关闭"No", 默认关闭 - - **Response** - - - **OriginalPrice** (int) - 用户折后价 - - **Price** (int) - 价格 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDiskUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUDiskUpgradePrice", d, **kwargs) - return apis.DescribeUDiskUpgradePriceResponseSchema().loads(resp) - - def detach_udisk(self, req=None, **kwargs): - """ DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDiskId** (str) - (Required) 需要卸载的UDisk实例ID - - **UHostId** (str) - (Required) UHost实例ID - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Response** - - - **UDiskId** (str) - 卸载的UDisk实例ID - - **UHostId** (str) - 卸载的UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DetachUDiskRequestSchema().dumps(d) - resp = self.invoke("DetachUDisk", d, **kwargs) - return apis.DetachUDiskResponseSchema().loads(resp) - - def rename_udisk(self, req=None, **kwargs): - """ RenameUDisk - 重命名UDisk - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDiskId** (str) - (Required) 重命名的UDisk的Id - - **UDiskName** (str) - (Required) 重命名UDisk的name - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RenameUDiskRequestSchema().dumps(d) - resp = self.invoke("RenameUDisk", d, **kwargs) - return apis.RenameUDiskResponseSchema().loads(resp) - - def resize_udisk(self, req=None, **kwargs): - """ ResizeUDisk - 调整UDisk容量 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 调整后大小, 单位:GB, 范围[1~2000],权限位控制可达8000,若需要请申请开通相关权限。 - - **UDiskId** (str) - (Required) UDisk Id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **CouponId** (str) - 使用的代金券id - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeUDiskRequestSchema().dumps(d) - resp = self.invoke("ResizeUDisk", d, **kwargs) - return apis.ResizeUDiskResponseSchema().loads(resp) - - def restore_udisk(self, req=None, **kwargs): - """ RestoreUDisk - 从备份恢复数据至UDisk - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDiskId** (str) - (Required) 需要恢复的盘id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **SnapshotId** (str) - 从指定的快照恢复 - - **SnapshotTime** (int) - 指定从方舟恢复的备份时间点 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RestoreUDiskRequestSchema().dumps(d) - resp = self.invoke("RestoreUDisk", d, **kwargs) - return apis.RestoreUDiskResponseSchema().loads(resp) - - def set_udisk__udataark_mode(self, req=None, **kwargs): - """ SetUDiskUDataArkMode - 设置UDisk数据方舟的状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDataArkMode** (str) - (Required) 是否开启数据方舟,开启:"Yes", 不支持:"No" - - **UDiskId** (str) - (Required) 需要设置数据方舟的UDisk的Id - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.SetUDiskUDataArkModeRequestSchema().dumps(d) - resp = self.invoke("SetUDiskUDataArkMode", d, **kwargs) - return apis.SetUDiskUDataArkModeResponseSchema().loads(resp) diff --git a/ucloud/services/udisk/schemas/__init__.py b/ucloud/services/udisk/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/udisk/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/udisk/schemas/apis.py b/ucloud/services/udisk/schemas/apis.py deleted file mode 100644 index 522eb6a..0000000 --- a/ucloud/services/udisk/schemas/apis.py +++ /dev/null @@ -1,516 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.udisk.schemas import models - -""" UDisk API Schema -""" -""" -API: AttachUDisk - -将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作 -""" - - -class AttachUDiskRequestSchema(schema.RequestSchema): - """ AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作 - """ - - fields = { - "MultiAttach": fields.Str(required=False, dump_to="MultiAttach"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class AttachUDiskResponseSchema(schema.ResponseSchema): - """ AttachUDisk - 将一个可用的UDisk挂载到某台主机上,当UDisk挂载成功后,还需要在主机内部进行文件系统操作 - """ - - fields = { - "UDiskId": fields.Str(required=False, load_from="UDiskId"), - "UHostId": fields.Str(required=False, load_from="UHostId"), - } - - -""" -API: CloneUDisk - -从UDisk创建UDisk克隆 -""" - - -class CloneUDiskRequestSchema(schema.RequestSchema): - """ CloneUDisk - 从UDisk创建UDisk克隆 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Comment": fields.Str(required=False, dump_to="Comment"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "SourceId": fields.Str(required=True, dump_to="SourceId"), - "UDataArkMode": fields.Str(required=False, dump_to="UDataArkMode"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CloneUDiskResponseSchema(schema.ResponseSchema): - """ CloneUDisk - 从UDisk创建UDisk克隆 - """ - - fields = { - "UDiskId": fields.List( - fields.Str(), required=False, load_from="UDiskId" - ) - } - - -""" -API: CloneUDiskSnapshot - -从快照创建UDisk克隆 -""" - - -class CloneUDiskSnapshotRequestSchema(schema.RequestSchema): - """ CloneUDiskSnapshot - 从快照创建UDisk克隆 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Comment": fields.Str(required=False, dump_to="Comment"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "SourceId": fields.Str(required=True, dump_to="SourceId"), - "UDataArkMode": fields.Str(required=False, dump_to="UDataArkMode"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CloneUDiskSnapshotResponseSchema(schema.ResponseSchema): - """ CloneUDiskSnapshot - 从快照创建UDisk克隆 - """ - - fields = { - "UDiskId": fields.List( - fields.Str(), required=False, load_from="UDiskId" - ) - } - - -""" -API: CreateUDisk - -创建UDisk磁盘 -""" - - -class CreateUDiskRequestSchema(schema.RequestSchema): - """ CreateUDisk - 创建UDisk磁盘 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CmkId": fields.Str(required=False, dump_to="CmkId"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "DiskType": fields.Str(required=False, dump_to="DiskType"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "UDataArkMode": fields.Str(required=False, dump_to="UDataArkMode"), - "UKmsMode": fields.Str(required=False, dump_to="UKmsMode"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateUDiskResponseSchema(schema.ResponseSchema): - """ CreateUDisk - 创建UDisk磁盘 - """ - - fields = { - "UDiskId": fields.List( - fields.Str(), required=False, load_from="UDiskId" - ) - } - - -""" -API: CreateUDiskSnapshot - -创建snapshot快照 -""" - - -class CreateUDiskSnapshotRequestSchema(schema.RequestSchema): - """ CreateUDiskSnapshot - 创建snapshot快照 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Comment": fields.Str(required=False, dump_to="Comment"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateUDiskSnapshotResponseSchema(schema.ResponseSchema): - """ CreateUDiskSnapshot - 创建snapshot快照 - """ - - fields = { - "SnapshotId": fields.List( - fields.Str(), required=True, load_from="SnapshotId" - ) - } - - -""" -API: DeleteUDisk - -删除UDisk -""" - - -class DeleteUDiskRequestSchema(schema.RequestSchema): - """ DeleteUDisk - 删除UDisk - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteUDiskResponseSchema(schema.ResponseSchema): - """ DeleteUDisk - 删除UDisk - """ - - fields = {} - - -""" -API: DeleteUDiskSnapshot - -删除Snapshot -""" - - -class DeleteUDiskSnapshotRequestSchema(schema.RequestSchema): - """ DeleteUDiskSnapshot - 删除Snapshot - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SnapshotId": fields.Str(required=False, dump_to="SnapshotId"), - "UDiskId": fields.Str(required=False, dump_to="UDiskId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DeleteUDiskSnapshotResponseSchema(schema.ResponseSchema): - """ DeleteUDiskSnapshot - 删除Snapshot - """ - - fields = {} - - -""" -API: DescribeUDisk - -获取UDisk实例 -""" - - -class DescribeUDiskRequestSchema(schema.RequestSchema): - """ DescribeUDisk - 获取UDisk实例 - """ - - fields = { - "DiskType": fields.Str(required=False, dump_to="DiskType"), - "IsBoot": fields.Str(required=False, dump_to="IsBoot"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "ProtocolVersion": fields.Int( - required=False, dump_to="ProtocolVersion" - ), - "Region": fields.Str(required=True, dump_to="Region"), - "UDiskId": fields.Str(required=False, dump_to="UDiskId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDiskResponseSchema(schema.ResponseSchema): - """ DescribeUDisk - 获取UDisk实例 - """ - - fields = { - "DataSet": fields.List( - models.UDiskDataSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUDiskPrice - -获取UDisk实例价格信息 -""" - - -class DescribeUDiskPriceRequestSchema(schema.RequestSchema): - """ DescribeUDiskPrice - 获取UDisk实例价格信息 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "DiskType": fields.Str(required=False, dump_to="DiskType"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "UDataArkMode": fields.Str(required=False, dump_to="UDataArkMode"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUDiskPriceResponseSchema(schema.ResponseSchema): - """ DescribeUDiskPrice - 获取UDisk实例价格信息 - """ - - fields = { - "DataSet": fields.List( - models.UDiskPriceDataSetSchema(), - required=False, - load_from="DataSet", - ) - } - - -""" -API: DescribeUDiskSnapshot - -获取UDisk快照 -""" - - -class DescribeUDiskSnapshotRequestSchema(schema.RequestSchema): - """ DescribeUDiskSnapshot - 获取UDisk快照 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SnapshotId": fields.Str(required=False, dump_to="SnapshotId"), - "UDiskId": fields.Str(required=False, dump_to="UDiskId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUDiskSnapshotResponseSchema(schema.ResponseSchema): - """ DescribeUDiskSnapshot - 获取UDisk快照 - """ - - fields = { - "DataSet": fields.List( - models.UDiskSnapshotSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUDiskUpgradePrice - -获取UDisk升级价格信息 -""" - - -class DescribeUDiskUpgradePriceRequestSchema(schema.RequestSchema): - """ DescribeUDiskUpgradePrice - 获取UDisk升级价格信息 - """ - - fields = { - "DiskType": fields.Str(required=False, dump_to="DiskType"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "SourceId": fields.Str(required=True, dump_to="SourceId"), - "UDataArkMode": fields.Str(required=False, dump_to="UDataArkMode"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUDiskUpgradePriceResponseSchema(schema.ResponseSchema): - """ DescribeUDiskUpgradePrice - 获取UDisk升级价格信息 - """ - - fields = { - "OriginalPrice": fields.Int(required=False, load_from="OriginalPrice"), - "Price": fields.Int(required=False, load_from="Price"), - } - - -""" -API: DetachUDisk - -卸载某个已经挂载在指定UHost实例上的UDisk -""" - - -class DetachUDiskRequestSchema(schema.RequestSchema): - """ DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DetachUDiskResponseSchema(schema.ResponseSchema): - """ DetachUDisk - 卸载某个已经挂载在指定UHost实例上的UDisk - """ - - fields = { - "UDiskId": fields.Str(required=False, load_from="UDiskId"), - "UHostId": fields.Str(required=False, load_from="UHostId"), - } - - -""" -API: RenameUDisk - -重命名UDisk -""" - - -class RenameUDiskRequestSchema(schema.RequestSchema): - """ RenameUDisk - 重命名UDisk - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "UDiskName": fields.Str(required=True, dump_to="UDiskName"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class RenameUDiskResponseSchema(schema.ResponseSchema): - """ RenameUDisk - 重命名UDisk - """ - - fields = {} - - -""" -API: ResizeUDisk - -调整UDisk容量 -""" - - -class ResizeUDiskRequestSchema(schema.RequestSchema): - """ ResizeUDisk - 调整UDisk容量 - """ - - fields = { - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ResizeUDiskResponseSchema(schema.ResponseSchema): - """ ResizeUDisk - 调整UDisk容量 - """ - - fields = {} - - -""" -API: RestoreUDisk - -从备份恢复数据至UDisk -""" - - -class RestoreUDiskRequestSchema(schema.RequestSchema): - """ RestoreUDisk - 从备份恢复数据至UDisk - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SnapshotId": fields.Str(required=False, dump_to="SnapshotId"), - "SnapshotTime": fields.Int(required=False, dump_to="SnapshotTime"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class RestoreUDiskResponseSchema(schema.ResponseSchema): - """ RestoreUDisk - 从备份恢复数据至UDisk - """ - - fields = {} - - -""" -API: SetUDiskUDataArkMode - -设置UDisk数据方舟的状态 -""" - - -class SetUDiskUDataArkModeRequestSchema(schema.RequestSchema): - """ SetUDiskUDataArkMode - 设置UDisk数据方舟的状态 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UDataArkMode": fields.Str(required=True, dump_to="UDataArkMode"), - "UDiskId": fields.Str(required=True, dump_to="UDiskId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class SetUDiskUDataArkModeResponseSchema(schema.ResponseSchema): - """ SetUDiskUDataArkMode - 设置UDisk数据方舟的状态 - """ - - fields = {} diff --git a/ucloud/services/udisk/schemas/models.py b/ucloud/services/udisk/schemas/models.py deleted file mode 100644 index d0675af..0000000 --- a/ucloud/services/udisk/schemas/models.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UDiskDataSetSchema(schema.ResponseSchema): - """ UDiskDataSet - DescribeUDisk - """ - - fields = { - "ArkSwitchEnable": fields.Int( - required=False, load_from="ArkSwitchEnable" - ), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CloneEnable": fields.Int(required=False, load_from="CloneEnable"), - "CmkId": fields.Str(required=False, load_from="CmkId"), - "CmkIdAlias": fields.Str(required=False, load_from="CmkIdAlias"), - "CmkIdStatus": fields.Str(required=False, load_from="CmkIdStatus"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DataKey": fields.Str(required=False, load_from="DataKey"), - "DeviceName": fields.Str(required=False, load_from="DeviceName"), - "DiskType": fields.Str(required=False, load_from="DiskType"), - "ExpiredTime": fields.Int(required=False, load_from="ExpiredTime"), - "IsBoot": fields.Str(required=False, load_from="IsBoot"), - "IsExpire": fields.Str(required=False, load_from="IsExpire"), - "Name": fields.Str(required=False, load_from="Name"), - "Size": fields.Int(required=False, load_from="Size"), - "SnapEnable": fields.Int(required=False, load_from="SnapEnable"), - "SnapshotCount": fields.Int(required=False, load_from="SnapshotCount"), - "SnapshotLimit": fields.Int(required=False, load_from="SnapshotLimit"), - "Status": fields.Str(required=False, load_from="Status"), - "Tag": fields.Str(required=False, load_from="Tag"), - "UDataArkMode": fields.Str(required=False, load_from="UDataArkMode"), - "UDiskId": fields.Str(required=False, load_from="UDiskId"), - "UHostIP": fields.Str(required=False, load_from="UHostIP"), - "UHostId": fields.Str(required=False, load_from="UHostId"), - "UHostName": fields.Str(required=False, load_from="UHostName"), - "UKmsMode": fields.Str(required=False, load_from="UKmsMode"), - "Version": fields.Str(required=False, load_from="Version"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UDiskPriceDataSetSchema(schema.ResponseSchema): - """ UDiskPriceDataSet - DescribeUDiskPrice - """ - - fields = { - "ChargeName": fields.Str(required=False, load_from="ChargeName"), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "OriginalPrice": fields.Int(required=False, load_from="OriginalPrice"), - "Price": fields.Int(required=False, load_from="Price"), - } - - -class UDiskSnapshotSetSchema(schema.ResponseSchema): - """ UDiskSnapshotSet - DescribeUDiskSnapshot - """ - - fields = { - "CmkId": fields.Str(required=False, load_from="CmkId"), - "CmkIdAlias": fields.Str(required=False, load_from="CmkIdAlias"), - "CmkIdStatus": fields.Str(required=False, load_from="CmkIdStatus"), - "Comment": fields.Str(required=False, load_from="Comment"), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "DataKey": fields.Str(required=False, load_from="DataKey"), - "DiskType": fields.Int(required=True, load_from="DiskType"), - "ExpiredTime": fields.Int(required=False, load_from="ExpiredTime"), - "IsUDiskAvailable": fields.Bool( - required=False, load_from="IsUDiskAvailable" - ), - "Name": fields.Str(required=True, load_from="Name"), - "Size": fields.Int(required=True, load_from="Size"), - "SnapshotId": fields.Str(required=True, load_from="SnapshotId"), - "Status": fields.Str(required=True, load_from="Status"), - "UDiskId": fields.Str(required=True, load_from="UDiskId"), - "UDiskName": fields.Str(required=True, load_from="UDiskName"), - "UHostId": fields.Str(required=False, load_from="UHostId"), - "UKmsMode": fields.Str(required=False, load_from="UKmsMode"), - "Version": fields.Str(required=False, load_from="Version"), - } diff --git a/ucloud/services/udpn/__init__.py b/ucloud/services/udpn/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/udpn/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/udpn/client.py b/ucloud/services/udpn/client.py deleted file mode 100644 index 769c40b..0000000 --- a/ucloud/services/udpn/client.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.udpn.schemas import apis - - -class UDPNClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UDPNClient, self).__init__(config, transport, middleware, logger) - - def allocate_udpn(self, req=None, **kwargs): - """ AllocateUDPN - 分配一条 UDPN 专线 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 带宽 - - **Peer1** (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky - - **Peer2** (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky - - **ChargeType** (str) - 计费类型,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费 - - **CouponId** (str) - 代金劵 - - **Quantity** (int) - 计费时长,默认 1 - - **Response** - - - **UDPNId** (str) - 资源名称 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AllocateUDPNRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("AllocateUDPN", d, **kwargs) - return apis.AllocateUDPNResponseSchema().loads(resp) - - def describe_udpn(self, req=None, **kwargs): - """ DescribeUDPN - 描述 UDPN - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 返回数据长度,默认为 20 - - **Offset** (int) - 列表起始位置偏移量,默认为 0 - - **UDPNId** (str) - 申请到的 UDPN 资源 ID。若为空,则查询该用户在机房所有的专线信息。非默认项目资源,需填写ProjectId - - **Response** - - - **DataSet** (list) - 见 **UDPNData** 模型定义 - - **TotalCount** (int) - 查询到的总数量 - - **Response Model** - - **UDPNData** - - - **Bandwidth** (int) - 带宽 - - **ChargeType** (str) - 计费类型 - - **CreateTime** (int) - unix 时间戳 创建时间 - - **ExpireTime** (int) - unix 时间戳 到期时间 - - **Peer1** (str) - 可用区域 1 - - **Peer2** (str) - 可用区域 2 - - **UDPNId** (str) - UDPN 资源短 ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUDPNRequestSchema().dumps(d) - resp = self.invoke("DescribeUDPN", d, **kwargs) - return apis.DescribeUDPNResponseSchema().loads(resp) - - def get_udpn_line_list(self, req=None, **kwargs): - """ GetUDPNLineList - 获取当前支持的专线线路列表 - - **Request** - - - **ProjectId** (str) - (Config) - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UDPNLineSet** 模型定义 - - **TotalCount** (int) - DataSet中的元素个数 - - **Response Model** - - **UDPNLineSet** - - - **BandwidthUpperLimit** (int) - 线路带宽上限,单位 M - - **LocalRegion** (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky - - **RemoteRegion** (str) - 支持UDPN的地域之一,北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 华盛顿:us-ws, 洛杉矶:us-la, 东京:jpn-tky - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUDPNLineListRequestSchema().dumps(d) - resp = self.invoke("GetUDPNLineList", d, **kwargs) - return apis.GetUDPNLineListResponseSchema().loads(resp) - - def get_udpn_price(self, req=None, **kwargs): - """ GetUDPNPrice - 获取 UDPN 价格 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 带宽信息 - - **Peer1** (str) - (Required) 专线可用区1,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky - - **Peer2** (str) - (Required) 专线可用区2,支持地域:北京二:cn-bj2, 上海二:cn-sh2, 广东:cn-gd, 亚太: hk, 上海一:cn-sh1, 法兰克福:ge-fra, 新加坡:sg, 洛杉矶:us-la, 华盛顿:us-ws, 东京:jpn-tky - - **ChargeType** (str) - 计费类型 - - **Quantity** (int) - 购买时长 - - **Response** - - - **Price** (float) - 专线价格 - - **PurchaseValue** (int) - 资源有效期 unix 时间戳 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.GetUDPNPriceRequestSchema().dumps(d) - resp = self.invoke("GetUDPNPrice", d, **kwargs) - return apis.GetUDPNPriceResponseSchema().loads(resp) - - def get_udpn_upgrade_price(self, req=None, **kwargs): - """ GetUDPNUpgradePrice - 获取专线升级价格 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 带宽 - - **UDPNId** (str) - (Required) 专线带宽资源 Id - - **Response** - - - **Price** (float) - 升级后的价格 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUDPNUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("GetUDPNUpgradePrice", d, **kwargs) - return apis.GetUDPNUpgradePriceResponseSchema().loads(resp) - - def modify_udpn_bandwidth(self, req=None, **kwargs): - """ ModifyUDPNBandwidth - 修改带宽值 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 调整后专线带宽, 单位为Mbps,取值范围为大于等于2且小于等于1000([2-1000])的整数 - - **UDPNId** (str) - (Required) UDPN Id - - **CouponId** (str) - 代金劵 ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUDPNBandwidthRequestSchema().dumps(d) - resp = self.invoke("ModifyUDPNBandwidth", d, **kwargs) - return apis.ModifyUDPNBandwidthResponseSchema().loads(resp) - - def release_udpn(self, req=None, **kwargs): - """ ReleaseUDPN - 释放 UDPN - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UDPNId** (str) - (Required) UDPN 资源 Id - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReleaseUDPNRequestSchema().dumps(d) - resp = self.invoke("ReleaseUDPN", d, **kwargs) - return apis.ReleaseUDPNResponseSchema().loads(resp) diff --git a/ucloud/services/udpn/schemas/__init__.py b/ucloud/services/udpn/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/udpn/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/udpn/schemas/apis.py b/ucloud/services/udpn/schemas/apis.py deleted file mode 100644 index 5c5332e..0000000 --- a/ucloud/services/udpn/schemas/apis.py +++ /dev/null @@ -1,206 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.udpn.schemas import models - -""" UDPN API Schema -""" -""" -API: AllocateUDPN - -分配一条 UDPN 专线 -""" - - -class AllocateUDPNRequestSchema(schema.RequestSchema): - """ AllocateUDPN - 分配一条 UDPN 专线 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Peer1": fields.Str(required=True, dump_to="Peer1"), - "Peer2": fields.Str(required=True, dump_to="Peer2"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=False, dump_to="Region"), - } - - -class AllocateUDPNResponseSchema(schema.ResponseSchema): - """ AllocateUDPN - 分配一条 UDPN 专线 - """ - - fields = {"UDPNId": fields.Str(required=True, load_from="UDPNId")} - - -""" -API: DescribeUDPN - -描述 UDPN -""" - - -class DescribeUDPNRequestSchema(schema.RequestSchema): - """ DescribeUDPN - 描述 UDPN - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "UDPNId": fields.Str(required=False, dump_to="UDPNId"), - } - - -class DescribeUDPNResponseSchema(schema.ResponseSchema): - """ DescribeUDPN - 描述 UDPN - """ - - fields = { - "DataSet": fields.List( - models.UDPNDataSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: GetUDPNLineList - -获取当前支持的专线线路列表 -""" - - -class GetUDPNLineListRequestSchema(schema.RequestSchema): - """ GetUDPNLineList - 获取当前支持的专线线路列表 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - } - - -class GetUDPNLineListResponseSchema(schema.ResponseSchema): - """ GetUDPNLineList - 获取当前支持的专线线路列表 - """ - - fields = { - "DataSet": fields.List( - models.UDPNLineSetSchema(), required=True, load_from="DataSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: GetUDPNPrice - -获取 UDPN 价格 -""" - - -class GetUDPNPriceRequestSchema(schema.RequestSchema): - """ GetUDPNPrice - 获取 UDPN 价格 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Peer1": fields.Str(required=True, dump_to="Peer1"), - "Peer2": fields.Str(required=True, dump_to="Peer2"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=False, dump_to="Region"), - } - - -class GetUDPNPriceResponseSchema(schema.ResponseSchema): - """ GetUDPNPrice - 获取 UDPN 价格 - """ - - fields = { - "Price": fields.Float(required=True, load_from="Price"), - "PurchaseValue": fields.Int(required=True, load_from="PurchaseValue"), - } - - -""" -API: GetUDPNUpgradePrice - -获取专线升级价格 -""" - - -class GetUDPNUpgradePriceRequestSchema(schema.RequestSchema): - """ GetUDPNUpgradePrice - 获取专线升级价格 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "UDPNId": fields.Str(required=True, dump_to="UDPNId"), - } - - -class GetUDPNUpgradePriceResponseSchema(schema.ResponseSchema): - """ GetUDPNUpgradePrice - 获取专线升级价格 - """ - - fields = {"Price": fields.Float(required=True, load_from="Price")} - - -""" -API: ModifyUDPNBandwidth - -修改带宽值 -""" - - -class ModifyUDPNBandwidthRequestSchema(schema.RequestSchema): - """ ModifyUDPNBandwidth - 修改带宽值 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "UDPNId": fields.Str(required=True, dump_to="UDPNId"), - } - - -class ModifyUDPNBandwidthResponseSchema(schema.ResponseSchema): - """ ModifyUDPNBandwidth - 修改带宽值 - """ - - fields = {} - - -""" -API: ReleaseUDPN - -释放 UDPN -""" - - -class ReleaseUDPNRequestSchema(schema.RequestSchema): - """ ReleaseUDPN - 释放 UDPN - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "UDPNId": fields.Str(required=True, dump_to="UDPNId"), - } - - -class ReleaseUDPNResponseSchema(schema.ResponseSchema): - """ ReleaseUDPN - 释放 UDPN - """ - - fields = {} diff --git a/ucloud/services/udpn/schemas/models.py b/ucloud/services/udpn/schemas/models.py deleted file mode 100644 index 5d3a9d7..0000000 --- a/ucloud/services/udpn/schemas/models.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UDPNDataSchema(schema.ResponseSchema): - """ UDPNData - UDPN 详细信息 - """ - - fields = { - "Bandwidth": fields.Int(required=True, load_from="Bandwidth"), - "ChargeType": fields.Str(required=True, load_from="ChargeType"), - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "ExpireTime": fields.Int(required=True, load_from="ExpireTime"), - "Peer1": fields.Str(required=True, load_from="Peer1"), - "Peer2": fields.Str(required=True, load_from="Peer2"), - "UDPNId": fields.Str(required=True, load_from="UDPNId"), - } - - -class UDPNLineSetSchema(schema.ResponseSchema): - """ UDPNLineSet - GetUDPNLineList - """ - - fields = { - "BandwidthUpperLimit": fields.Int( - required=True, load_from="BandwidthUpperLimit" - ), - "LocalRegion": fields.Str(required=True, load_from="LocalRegion"), - "RemoteRegion": fields.Str(required=True, load_from="RemoteRegion"), - } diff --git a/ucloud/services/ufs/__init__.py b/ucloud/services/ufs/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ufs/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ufs/client.py b/ucloud/services/ufs/client.py deleted file mode 100644 index 03529de..0000000 --- a/ucloud/services/ufs/client.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.ufs.schemas import apis - - -class UFSClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UFSClient, self).__init__(config, transport, middleware, logger) - - def create_ufs_volume(self, req=None, **kwargs): - """ CreateUFSVolume - 创建文件系统 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ProtocolType** (str) - (Required) 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议 - - **Size** (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB - - **StorageType** (str) - (Required) 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型 - - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限) 默认为Dynamic - - **CouponId** (str) - 使用的代金券id - - **Quantity** (int) - 购买时长 默认: 1 - - **Remark** (str) - 备注 - - **Tag** (str) - 文件系统所属业务组 - - **VolumeName** (str) - 文件系统名称 - - **Response** - - - **VolumeId** (str) - 文件系统ID - - **VolumeName** (str) - 文件系统名称 - - **VolumeStatus** (str) - 文件系统挂载点状态 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUFSVolumeRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUFSVolume", d, **kwargs) - return apis.CreateUFSVolumeResponseSchema().loads(resp) - - def describe_ufs_volume_2(self, req=None, **kwargs): - """ DescribeUFSVolume2 - 获取文件系统列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 文件列表长度 - - **Offset** (int) - 文件列表起始 - - **VolumeId** (str) - 文件系统ID - - **Response** - - - **DataSet** (list) - 见 **UFSVolumeInfo2** 模型定义 - - **TotalCount** (int) - 文件系统总数 - - **Response Model** - - **UFSVolumeInfo2** - - - **CreateTime** (int) - 文件系统创建时间(unix时间戳) - - **ExpiredTime** (int) - 文件系统过期时间(unix时间戳) - - **IsExpired** (str) - 是否过期 - - **MaxMountPointNum** (int) - 文件系统允许创建的最大挂载点数目 - - **ProtocolType** (str) - 文件系统协议,枚举值,NFSv3表示NFS V3协议,NFSv4表示NFS V4协议 - - **Remark** (str) - 文件系统备注信息 - - **Size** (int) - 文件系统大小,单位GB - - **StorageType** (str) - 文件系统存储类型,枚举值,Basic表示容量型,Advanced表示性能型 - - **Tag** (str) - 文件系统所属业务组 - - **TotalMountPointNum** (int) - 当前文件系统已创建的挂载点数目 - - **UsedSize** (int) - 文件系统当前使用容量,单位GB - - **VolumeId** (str) - 文件系统ID - - **VolumeName** (str) - 文件系统名称 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUFSVolume2RequestSchema().dumps(d) - resp = self.invoke("DescribeUFSVolume2", d, **kwargs) - return apis.DescribeUFSVolume2ResponseSchema().loads(resp) - - def extend_ufs_volume(self, req=None, **kwargs): - """ ExtendUFSVolume - 文件系统扩容 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 文件系统大小,单位为GB,最大不超过20T,香港容量型必须为100的整数倍,Size最小为500GB,北京,上海,广州的容量型必须为1024的整数倍,Size最小为1024GB。性能型文件系统Size最小为100GB - - **VolumeId** (str) - (Required) 文件系统ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ExtendUFSVolumeRequestSchema().dumps(d) - resp = self.invoke("ExtendUFSVolume", d, **kwargs) - return apis.ExtendUFSVolumeResponseSchema().loads(resp) - - def remove_ufs_volume(self, req=None, **kwargs): - """ RemoveUFSVolume - 删除UFS文件系统 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **VolumeId** (str) - (Required) 文件系统ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RemoveUFSVolumeRequestSchema().dumps(d) - resp = self.invoke("RemoveUFSVolume", d, **kwargs) - return apis.RemoveUFSVolumeResponseSchema().loads(resp) diff --git a/ucloud/services/ufs/schemas/__init__.py b/ucloud/services/ufs/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ufs/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ufs/schemas/apis.py b/ucloud/services/ufs/schemas/apis.py deleted file mode 100644 index 99be471..0000000 --- a/ucloud/services/ufs/schemas/apis.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.ufs.schemas import models - -""" UFS API Schema -""" -""" -API: CreateUFSVolume - -创建文件系统 -""" - - -class CreateUFSVolumeRequestSchema(schema.RequestSchema): - """ CreateUFSVolume - 创建文件系统 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "ProtocolType": fields.Str(required=True, dump_to="ProtocolType"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Size": fields.Int(required=True, dump_to="Size"), - "StorageType": fields.Str(required=True, dump_to="StorageType"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VolumeName": fields.Str(required=False, dump_to="VolumeName"), - } - - -class CreateUFSVolumeResponseSchema(schema.ResponseSchema): - """ CreateUFSVolume - 创建文件系统 - """ - - fields = { - "VolumeId": fields.Str(required=True, load_from="VolumeId"), - "VolumeName": fields.Str(required=True, load_from="VolumeName"), - "VolumeStatus": fields.Str(required=True, load_from="VolumeStatus"), - } - - -""" -API: DescribeUFSVolume2 - -获取文件系统列表 -""" - - -class DescribeUFSVolume2RequestSchema(schema.RequestSchema): - """ DescribeUFSVolume2 - 获取文件系统列表 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VolumeId": fields.Str(required=False, dump_to="VolumeId"), - } - - -class DescribeUFSVolume2ResponseSchema(schema.ResponseSchema): - """ DescribeUFSVolume2 - 获取文件系统列表 - """ - - fields = { - "DataSet": fields.List( - models.UFSVolumeInfo2Schema(), required=True, load_from="DataSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: ExtendUFSVolume - -文件系统扩容 -""" - - -class ExtendUFSVolumeRequestSchema(schema.RequestSchema): - """ ExtendUFSVolume - 文件系统扩容 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "VolumeId": fields.Str(required=True, dump_to="VolumeId"), - } - - -class ExtendUFSVolumeResponseSchema(schema.ResponseSchema): - """ ExtendUFSVolume - 文件系统扩容 - """ - - fields = {} - - -""" -API: RemoveUFSVolume - -删除UFS文件系统 -""" - - -class RemoveUFSVolumeRequestSchema(schema.RequestSchema): - """ RemoveUFSVolume - 删除UFS文件系统 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VolumeId": fields.Str(required=True, dump_to="VolumeId"), - } - - -class RemoveUFSVolumeResponseSchema(schema.ResponseSchema): - """ RemoveUFSVolume - 删除UFS文件系统 - """ - - fields = {} diff --git a/ucloud/services/ufs/schemas/models.py b/ucloud/services/ufs/schemas/models.py deleted file mode 100644 index 39ea2ab..0000000 --- a/ucloud/services/ufs/schemas/models.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UFSVolumeInfo2Schema(schema.ResponseSchema): - """ UFSVolumeInfo2 - 文件系统信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "ExpiredTime": fields.Int(required=False, load_from="ExpiredTime"), - "IsExpired": fields.Str(required=False, load_from="IsExpired"), - "MaxMountPointNum": fields.Int( - required=True, load_from="MaxMountPointNum" - ), - "ProtocolType": fields.Str(required=True, load_from="ProtocolType"), - "Remark": fields.Str(required=False, load_from="Remark"), - "Size": fields.Int(required=False, load_from="Size"), - "StorageType": fields.Str(required=True, load_from="StorageType"), - "Tag": fields.Str(required=False, load_from="Tag"), - "TotalMountPointNum": fields.Int( - required=True, load_from="TotalMountPointNum" - ), - "UsedSize": fields.Int(required=False, load_from="UsedSize"), - "VolumeId": fields.Str(required=True, load_from="VolumeId"), - "VolumeName": fields.Str(required=True, load_from="VolumeName"), - } diff --git a/ucloud/services/uhost/__init__.py b/ucloud/services/uhost/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uhost/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uhost/client.py b/ucloud/services/uhost/client.py deleted file mode 100644 index a4edbd7..0000000 --- a/ucloud/services/uhost/client.py +++ /dev/null @@ -1,843 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.uhost.schemas import apis - - -class UHostClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UHostClient, self).__init__(config, transport, middleware, logger) - - def copy_custom_image(self, req=None, **kwargs): - """ CopyCustomImage - 复制自制镜像 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SourceImageId** (str) - (Required) 源镜像Id, 参见 DescribeImage - - **TargetProjectId** (str) - (Required) 目标项目Id, 参见 GetProjectList - - **TargetImageDescription** (str) - 目标镜像描述 - - **TargetImageName** (str) - 目标镜像名称 - - **TargetRegion** (str) - 目标地域,不跨地域不用填 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **TargetImageId** (str) - 目标镜像Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CopyCustomImageRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CopyCustomImage", d, **kwargs) - return apis.CopyCustomImageResponseSchema().loads(resp) - - def create_custom_image(self, req=None, **kwargs): - """ CreateCustomImage - 从指定UHost实例,生成自定义镜像。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ImageName** (str) - (Required) 镜像名称 - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **ImageDescription** (str) - 镜像描述 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **ImageId** (str) - 镜像Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateCustomImageRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateCustomImage", d, **kwargs) - return apis.CreateCustomImageResponseSchema().loads(resp) - - def create_uhost_instance(self, req=None, **kwargs): - """ CreateUHostInstance - 创建UHost实例。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ImageId** (str) - (Required) 镜像ID。 请通过 `DescribeImage `_ 获取 - - **LoginMode** (str) - (Required) 主机登陆模式。密码(默认选项): Password。 - - **Password** (str) - (Required) UHost密码。请遵照 `字段规范 `_ 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **AlarmTemplateId** (int) - 告警模板id,如果传了告警模板id,且告警模板id正确,则绑定告警模板。绑定告警模板失败只会在后台有日志,不会影响创建主机流程,也不会在前端报错。 - - **BootDiskSpace** (int) - 【待废弃,不建议调用】系统盘大小。 单位:GB, 范围[20,100], 步长:10 - - **CPU** (int) - 虚拟CPU核数。可选参数:1-64(具体机型与CPU的对应关系参照控制台)。默认值: 4。 - - **ChargeType** (str) - 计费模式。枚举值为: \\ > Year,按年付费; \\ > Month,按月付费;\\ > Dynamic,按小时预付费 \\ > Postpay,按小时后付费(支持关机不收费,目前仅部分可用区支持,请联系您的客户经理) \\ 默认为月付 - - **CouponId** (str) - 主机代金券ID。请通过DescribeCoupon接口查询,或登录用户中心查看 - - **DiskPassword** (str) - 【待废弃,不建议调用】加密盘的密码。若输入此字段,自动选择加密盘。加密盘需要权限位。 - - **DiskSpace** (int) - 【待废弃,不建议调用】数据盘大小。 单位:GB, 范围[0,8000], 步长:10, 默认值:20,云盘支持0-8000;本地普通盘支持0-2000;本地SSD盘(包括所有GPU机型)支持100-1000 - - **Disks** (list) - 见 **CreateUHostInstanceParamDisks** 模型定义 - - **GPU** (int) - GPU卡核心数。仅GPU机型支持此字段(可选范围与MachineType+GpuType相关) - - **GpuType** (str) - GPU类型,枚举值["K80", "P40", "V100"],MachineType为G时必填 - - **HostIp** (str) - 指定宿主机创建,此时SetId为必填 - - **HostType** (str) - 【已废弃】宿主机类型,N2,N1 - - **HotplugFeature** (bool) - 热升级特性。True为开启,False为未开启,默认False。 - - **InstallAgent** (str) - 【暂不支持】是否安装UGA。'yes': 安装;其他或者不填:不安装。 - - **IsolationGroup** (str) - 硬件隔离组id。可通过DescribeIsolationGroup获取。 - - **KeyPair** (str) - 【暂不支持】Keypair公钥,LoginMode为KeyPair时此项必须 - - **MachineType** (str) - 云主机机型(V2.0),在本字段和字段UHostType中,仅需要其中1个字段即可;当填写了MachineType时,必须填写MinimalCpuPlatform字段。枚举值["N", "C", "G", "O"]。参考 `云主机机型说明 `_ 。 - - **MaxCount** (int) - 本次最大创建主机数量,取值范围是[1,100],默认值为1。 - - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值:8192 - - **MinimalCpuPlatform** (str) - 最低cpu平台,枚举值["Intel/Auto", "Intel/IvyBridge", "Intel/Haswell", "Intel/Broadwell", "Intel/Skylake", "Intel/Cascadelake"。 - - **Name** (str) - UHost实例名称。默认:UHost。请遵照 `字段规范 `_ 设定实例名称。 - - **NetCapability** (str) - 网络增强特性。枚举值:Normal(默认),不开启; Super,开启网络增强1.0; Ultra,开启网络增强2.0(仅支持部分可用区,请参考控制台) - - **NetworkId** (str) - 【已废弃】网络ID(VPC2.0情况下无需填写)。VPC1.0情况下,若不填写,代表优先选择基础网络; 若填写,代表选择子网。参见DescribeSubnet。 - - **NetworkInterface** (list) - 见 **CreateUHostInstanceParamNetworkInterface** 模型定义 - - **PrivateIp** (list) - 【数组】创建云主机时指定内网IP。若不传值,则随机分配当前子网下的IP。调用方式举例:PrivateIp.0=x.x.x.x。当前只支持一个内网IP。 - - **PrivateMac** (str) - 【批量创建该参数无效】【内部字段】创建云主机时指定Mac。调用方式举例:PrivateMac="xx:xx:xx:xx:xx:xx"。 - - **Quantity** (int) - 购买时长。默认:值 1。按小时购买(Dynamic/Postpay)时无需此参数。 月付时,此参数传0,代表购买至月末。 - - **ResourceType** (int) - 【内部参数】资源类型 - - **SecurityGroupId** (str) - 防火墙ID,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 `DescribeFirewall `_ 。 - - **SetId** (int) - 指定set创建 - - **StorageType** (str) - 【待废弃,不建议调用】磁盘类型,同时设定系统盘和数据盘的磁盘类型。枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘;默认为LocalDisk。仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。 - - **SubnetId** (str) - 子网 ID。默认为当前地域的默认子网。 - - **Tag** (str) - 业务组。默认:Default(Default即为未分组)。请遵照 `字段规范 `_ 设定业务组。 - - **TimemachineFeature** (str) - 【待废弃,不建议调用】是否开启方舟特性。Yes为开启方舟,No为关闭方舟。目前仅选择普通本地盘+普通本地盘 或 SSD云盘+普通云盘的组合支持开启方舟。 - - **UHostType** (str) - 【建议后续不再使用】云主机机型(V1.0),在本字段和字段MachineType中,仅需要其中1个字段即可。参考 `云主机机型说明 `_ 。 - - **UserData** (str) - 【即将支持】用户自定义数据。当镜像支持Cloud-init Feature时可填写此字段。注意:1、总数据量大小不超多16K;2、使用base64编码 - - **UserDataScript** (str) - 【暂不支持】cloudinit方式下,用户初始化脚本 - - **VPCId** (str) - VPC ID。默认为当前地域的默认VPC。 - - **Response** - - - **IPs** (list) - 【批量创建不会返回】IP信息 - - **UHostIds** (list) - UHost实例Id集合 - - **Request Model** - - **CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH** - - - **Area** (str) - 填写支持SSH访问IP的地区名称,如“洛杉矶”,“新加坡”,“香港”,“东京”,“华盛顿”,“法兰克福”。Area和AreaCode两者必填其中之一。 - - **AreaCode** (str) - GlobalSSH的地区编码,格式为区域航空港国际通用代码。Area和AreaCode两者必填其中之一。 - - **Port** (int) - SSH端口,1-65535且不能使用80,443端口 - - **CreateUHostInstanceParamNetworkInterfaceEIP** - - - **Bandwidth** (int) - 【若绑定EIP,此参数必填】弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-300],带宽计费[1-800] - - **CouponId** (str) - 当前EIP代金券id。请通过DescribeCoupon接口查询,或登录用户中心查看。 - - **GlobalSSH** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH** 模型定义 - - **OperatorName** (str) - 【若绑定EIP,此参数必填】弹性IP的线路。枚举值: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International - - **PayMode** (str) - 弹性IP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; "ShareBandwidth",共享带宽模式. "Free":免费带宽模式.默认为 "Bandwidth". - - **ShareBandwidthId** (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效 - - **CreateUHostInstanceParamNetworkInterfaceIPv6** - - - **Adress** (str) - 第N个网卡对应的IPv6地址,默认不分配IPv6,“Auto”自动分配,不为空的其他字符串为实际要分配的IPv6地址 - - **ShareBandwidthId** (str) - 第N块网卡中IPv6对应的共享带宽id,默认不带外网 - - **CreateUHostInstanceParamDisks** - - - **BackupType** (str) - 磁盘备份方案。枚举值:\\ > NONE,无备份 \\ > DATAARK,数据方舟 \\ 当前磁盘支持的备份模式参考 `磁盘类型 `_ - - **CouponId** (str) - 云盘代金券id。不适用于系统盘/本地盘。请通过DescribeCoupon接口查询,或登录用户中心查看 - - **Encrypted** (bool) - 【功能仅部分可用区开放,详询技术支持】磁盘是否加密。加密:true, 不加密: false加密必须传入对应的的KmsKeyId - - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 - - **KmsKeyId** (str) - 【功能仅部分可用区开放,详询技术支持】kms key id。选择加密盘时必填。 - - **Size** (int) - 磁盘大小,单位GB,必须是10GB的整数倍。请参考 `磁盘类型 `_ 。 - - **Type** (str) - 磁盘类型。请参考 `磁盘类型 `_ 。 - - **CreateUHostInstanceParamNetworkInterface** - - - **EIP** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceEIP** 模型定义 - - **IPv6** (dict) - 见 **CreateUHostInstanceParamNetworkInterfaceIPv6** 模型定义 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUHostInstanceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUHostInstance", d, **kwargs) - return apis.CreateUHostInstanceResponseSchema().loads(resp) - - def describe_image(self, req=None, **kwargs): - """ DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ImageId** (str) - 镜像Id - - **ImageType** (str) - 镜像类型。标准镜像:Base,镜像市场:Business, 自定义镜像:Custom,默认返回所有类型 - - **Limit** (int) - 返回数据长度,默认为20 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **OsType** (str) - 操作系统类型:Linux, Windows 默认返回所有类型 - - **PriceSet** (int) - 是否返回价格:1返回,0不返回;默认不返回 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **ImageSet** (list) - 见 **UHostImageSet** 模型定义 - - **TotalCount** (int) - 满足条件的镜像总数 - - **Response Model** - - **UHostImageSet** - - - **CreateTime** (int) - 创建时间,格式为Unix时间戳 - - **Features** (list) - 特殊状态标识, 目前包含NetEnhnced(网络增强1.0), NetEnhanced_Ultra](网络增强2.0),HotPlug(热升级),CloudInit - - **FuncType** (str) - 行业镜像类型(仅行业镜像将返回这个值) - - **ImageDescription** (str) - 镜像描述 - - **ImageId** (str) - 镜像ID - - **ImageName** (str) - 镜像名称 - - **ImageSize** (int) - 镜像大小 - - **ImageType** (str) - 镜像类型 标准镜像:Base, 行业镜像:Business,自定义镜像:Custom - - **IntegratedSoftware** (str) - 集成软件名称(仅行业镜像将返回这个值) - - **Links** (str) - 介绍链接(仅行业镜像将返回这个值) - - **MinimalCPU** (str) - 默认值为空'''。当CentOS 7.3/7.4/7.5等镜像会标记为“Broadwell” - - **OsName** (str) - 操作系统名称 - - **OsType** (str) - 操作系统类型:Liunx,Windows - - **State** (str) - 镜像状态, 可用:Available,制作中:Making, 不可用:Unavailable - - **Vendor** (str) - 供应商(仅行业镜像将返回这个值) - - **Zone** (str) - 可用区,参见 `可用区列表 `_ - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeImageRequestSchema().dumps(d) - resp = self.invoke("DescribeImage", d, **kwargs) - return apis.DescribeImageResponseSchema().loads(resp) - - def describe_isolation_group(self, req=None, **kwargs): - """ DescribeIsolationGroup - 查询硬件隔离组列表。 - - **Request** - - - **ProjectId** (str) - (Config) 项目id - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - 待查的硬件隔离组id - - **Limit** (int) - 返回数据长度,默认为20,最大100 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **Response** - - - **IsolationGroupSet** (list) - 见 **IsolationGroup** 模型定义 - - **Response Model** - - **SpreadInfo** - - - **UHostCount** (int) - 可用区中硬件隔离组中云主机的数量,不超过7。 - - **Zone** (str) - 可用区信息 - - **IsolationGroup** - - - **GroupId** (str) - 硬件隔离组id - - **GroupName** (str) - 硬件隔离组名称 - - **Remark** (str) - 备注 - - **SpreadInfoSet** (list) - 见 **SpreadInfo** 模型定义 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeIsolationGroupRequestSchema().dumps(d) - resp = self.invoke("DescribeIsolationGroup", d, **kwargs) - return apis.DescribeIsolationGroupResponseSchema().loads(resp) - - def describe_uhost_instance(self, req=None, **kwargs): - """ DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **IsolationGroup** (str) - 硬件隔离组id。通过硬件隔离组筛选主机。 - - **LifeCycle** (int) - 1:普通云主机;2:抢占型云主机;如不传此参数,默认全部获取 - - **Limit** (int) - 返回数据长度,默认为20,最大100 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **SubnetId** (str) - 子网id。通过子网筛选主机。北京一地域无效。 - - **Tag** (str) - 要查询的业务组名称 - - **UHostIds** (list) - 【数组】UHost主机的资源ID,例如UHostIds.0代表希望获取信息 的主机1,UHostIds.1代表主机2。 如果不传入,则返回当前Region 所有符合条件的UHost实例。 - - **VPCId** (str) - vpc id。通过VPC筛选主机。北京一地域无效。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Action** (str) - 操作名称 - - **RetCode** (int) - 返回码 - - **TotalCount** (int) - UHostInstance总数 - - **UHostSet** (list) - 见 **UHostInstanceSet** 模型定义 - - **Response Model** - - **UHostDiskSet** - - - **BackupType** (str) - 备份方案。若开通了数据方舟,则为DataArk - - **DiskId** (str) - 磁盘ID - - **DiskType** (str) - 磁盘类型。请参考 `磁盘类型 `_ 。 - - **Drive** (str) - 磁盘盘符 - - **Encrypted** (bool) - true: 加密盘 false:非加密盘 - - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 - - **Name** (str) - UDisk名字(仅当磁盘是UDisk时返回) - - **Size** (int) - 磁盘大小,单位: GB - - **Type** (str) - 【建议不再使用】磁盘类型。系统盘: Boot,数据盘: Data,网络盘:Udisk - - **UHostIPSet** - - - **Bandwidth** (int) - IP对应的带宽, 单位: Mb (内网IP不显示带宽信息) - - **Default** (str) - 【暂未支持】是否为默认网卡。True: 是默认网卡;其他值:不是。 - - **IP** (str) - IP地址 - - **IPId** (str) - 外网IP资源ID 。(内网IP无对应的资源ID) - - **Mac** (str) - 当前网卡的Mac。 - - **SubnetId** (str) - IP地址对应的子网 ID。(北京一不支持,字段返回为空) - - **Type** (str) - 国际: Internation,BGP: Bgp,内网: Private - - **VPCId** (str) - IP地址对应的VPC ID。(北京一不支持,字段返回为空) - - **Weight** (int) - 当前EIP的权重。权重最大的为当前的出口IP。 - - **UHostInstanceSet** - - - **AutoRenew** (str) - 是否自动续费,自动续费:“Yes”,不自动续费:“No” - - **BasicImageId** (str) - 基础镜像ID(指当前自定义镜像的来源镜像) - - **BasicImageName** (str) - 基础镜像名称(指当前自定义镜像的来源镜像) - - **BootDiskState** (str) - 系统盘状态 Normal表示初始化完成;Initializing表示在初始化。仍在初始化的系统盘无法制作镜像。 - - **CPU** (int) - 虚拟CPU核数,单位: 个 - - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); - - **CreateTime** (int) - 创建时间,格式为Unix时间戳 - - **DiskSet** (list) - 见 **UHostDiskSet** 模型定义 - - **ExpireTime** (int) - 到期时间,格式为Unix时间戳 - - **GPU** (int) - GPU个数 - - **HostType** (str) - 【建议不再使用】主机系列:N2,表示系列2;N1,表示系列1 - - **HotplugFeature** (bool) - true: 开启热升级; false,未开启热升级 - - **IPSet** (list) - 见 **UHostIPSet** 模型定义 - - **ImageId** (str) - 【建议不再使用】主机的系统盘ID。 - - **IsolationGroup** (str) - 隔离组id,不在隔离组则返回"" - - **LifeCycle** (str) - 主机的生命周期类型。目前仅支持Normal:普通; - - **MachineType** (str) - 云主机机型(新)。参考 `云主机机型说明 `_ 。 - - **Memory** (int) - 内存大小,单位: MB - - **Name** (str) - UHost实例名称 - - **NetCapability** (str) - 网络增强。Normal: 无;Super: 网络增强1.0; Ultra: 网络增强2.0 - - **NetworkState** (str) - 【建议不再使用】网络状态。 连接:Connected, 断开:NotConnected - - **OsName** (str) - 创建主机的最初来源镜像的操作系统名称(若直接通过基础镜像创建,此处返回和BasicImageName一致) - - **OsType** (str) - 操作系统类别。返回"Linux"或者"Windows" - - **Remark** (str) - 备注 - - **State** (str) - 实例状态,枚举值:\\ >初始化: Initializing; \\ >启动中: Starting; \\> 运行中: Running; \\> 关机中: Stopping; \\ >关机: Stopped \\ >安装失败: Install Fail; \\ >重启中: Rebooting - - **StorageType** (str) - 【建议不再使用】主机磁盘类型。 枚举值为:\\ > LocalDisk,本地磁盘; \\ > UDisk 云盘。\\只要有一块磁盘为本地盘,即返回LocalDisk。 - - **SubnetType** (str) - 【建议不再使用】仅北京A的云主机会返回此字段。基础网络模式:Default;子网模式:Private - - **Tag** (str) - 业务组名称 - - **TimemachineFeature** (str) - 【建议不再使用】数据方舟模式。枚举值:\\ > Yes: 开启方舟; \\ > no,未开启方舟 - - **TotalDiskSpace** (int) - 总的数据盘存储空间。 - - **UHostId** (str) - UHost实例ID - - **UHostType** (str) - 【建议不再使用】云主机机型(旧)。参考 `云主机机型说明 `_ 。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("DescribeUHostInstance", d, **kwargs) - return apis.DescribeUHostInstanceResponseSchema().loads(resp) - - def describe_uhost_instance_snapshot(self, req=None, **kwargs): - """ DescribeUHostInstanceSnapshot - 获取已经存在的UHost实例的存储快照列表。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **SnapshotSet** (list) - 见 **UHostSnapshotSet** 模型定义 - - **UhostId** (str) - UHost实例ID - - **Response Model** - - **UHostSnapshotSet** - - - **SnapshotName** (str) - 快照名称 - - **SnapshotState** (str) - 快照状态, 制作中:Capturing 制作成功:Success 制作失败:Fail - - **SnapshotTime** (str) - 快照制作时间 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUHostInstanceSnapshotRequestSchema().dumps(d) - resp = self.invoke("DescribeUHostInstanceSnapshot", d, **kwargs) - return apis.DescribeUHostInstanceSnapshotResponseSchema().loads(resp) - - def describe_uhost_tags(self, req=None, **kwargs): - """ DescribeUHostTags - 获取指定数据中心的业务组列表。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **TagSet** (list) - 见 **UHostTagSet** 模型定义 - - **TotalCount** (int) - 已有主机的业务组总个数 - - **Response Model** - - **UHostTagSet** - - - **Tag** (str) - 业务组名称 - - **TotalCount** (int) - 该业务组中包含的主机个数 - - **Zone** (str) - 可用区 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUHostTagsRequestSchema().dumps(d) - resp = self.invoke("DescribeUHostTags", d, **kwargs) - return apis.DescribeUHostTagsResponseSchema().loads(resp) - - def get_uhost_instance_price(self, req=None, **kwargs): - """ GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **CPU** (int) - (Required) CPU核数。可选参数:1-64。可选范围参照控制台。默认值: 4 - - **Count** (int) - (Required) 购买台数,范围[1,5] - - **ImageId** (str) - (Required) 镜像Id,可通过 `DescribeImage `_ 获取镜像ID - - **Memory** (int) - (Required) 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参照好控制台)。默认值:8192 - - **ChargeType** (str) - 计费模式。枚举值为: \\ > Year,按年付费; \\ > Month,按月付费;\\ > Dynamic,按小时付费 \\ 默认为月付。 - - **DiskSpace** (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10,默认值: 0 - - **Disks** (list) - 见 **GetUHostInstancePriceParamDisks** 模型定义 - - **GPU** (int) - GPU卡核心数。仅GPU机型支持此字段。 - - **GpuType** (str) - GPU类型,枚举值["K80", "P40", "V100"] - - **LifeCycle** (int) - 【未支持】1:普通云主机;2:抢占性云主机;默认普通 - - **MachineType** (str) - 云主机机型(V2版本概念)。枚举值["N", "C", "G", "O"]。参考 `云主机机型说明 `_ 。 - - **NetCapability** (str) - 网络增强。枚举值:Normal,不开启; Super,开启网络增强1.0。 默认值为Normal。 - - **Quantity** (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末。 - - **StorageType** (str) - 【待废弃】磁盘类型,同时设定系统盘和数据盘, 枚举值为:LocalDisk,本地磁盘; UDisk,云硬盘; 默认为LocalDisk 仅部分可用区支持云硬盘方式的主机存储方式,具体请查询控制台。 - - **TimemachineFeature** (str) - 【待废弃】方舟机型。No,Yes。默认是No。 - - **UHostType** (str) - 【待废弃】云主机机型(V1版本概念)。参考 `云主机机型说明 `_ 。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PriceSet** (list) - 见 **UHostPriceSet** 模型定义 - - **Request Model** - - **GetUHostInstancePriceParamDisks** - - - **BackupType** (str) - 磁盘备份方案。枚举值:\\ > NONE,无备份 \\ > DATAARK,数据方舟 \\ 当前磁盘支持的备份模式参考 `磁盘类型 `_ - - **IsBoot** (str) - 是否是系统盘。枚举值:\\ > True,是系统盘 \\ > False,是数据盘(默认)。Disks数组中有且只能有一块盘是系统盘。 - - **Size** (int) - 磁盘大小,单位GB。请参考 `磁盘类型 `_ 。 - - **Type** (str) - 磁盘类型。请参考 `磁盘类型 `_ 。 - - **Response Model** - - **UHostPriceSet** - - - **ChargeType** (str) - 计费类型。Year,Month,Dynamic - - **Price** (float) - 价格,单位: 元,保留小数点后两位有效数字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUHostInstancePriceRequestSchema().dumps(d) - resp = self.invoke("GetUHostInstancePrice", d, **kwargs) - return apis.GetUHostInstancePriceResponseSchema().loads(resp) - - def get_uhost_instance_vnc_info(self, req=None, **kwargs): - """ GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - **VncIP** (str) - Vnc登录IP - - **VncPassword** (str) - Vnc 登录密码 - - **VncPort** (int) - Vnc登录端口 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUHostInstanceVncInfoRequestSchema().dumps(d) - resp = self.invoke("GetUHostInstanceVncInfo", d, **kwargs) - return apis.GetUHostInstanceVncInfoResponseSchema().loads(resp) - - def get_uhost_upgrade_price(self, req=None, **kwargs): - """ GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考 `云主机机型说明 `_ 。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID。 参见 `DescribeUHostInstance `_ 。 - - **BootDiskSpace** (int) - 【待废弃】系统大小,单位: GB,范围[20,100],步长: 10。 - - **CPU** (int) - 虚拟CPU核数。可选参数:1-64(可选范围参考控制台)。默认值为当前实例的CPU核数。 - - **DiskSpace** (int) - 【待废弃】数据盘大小,单位: GB,范围[0,1000],步长: 10, 默认值是该主机当前数据盘大小。 - - **HostType** (str) - 【待废弃】主机系列,目前支持N1,N2 - - **Memory** (int) - 内存大小。单位:MB。范围 :[1024, 262144],取值为1024的倍数(可选范围参考控制台)。默认值为当前实例的内存大小。 - - **NetCapValue** (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变) - - **TimemachineFeature** (str) - 方舟机型。No,Yes。默认是No。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Price** (float) - 规格调整差价。精确到小数点后2位。 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUHostUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("GetUHostUpgradePrice", d, **kwargs) - return apis.GetUHostUpgradePriceResponseSchema().loads(resp) - - def import_custom_image(self, req=None, **kwargs): - """ ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Auth** (bool) - (Required) 是否授权。必须填true - - **Format** (str) - (Required) 镜像格式,可选RAW、VHD、VMDK、qcow2 - - **ImageName** (str) - (Required) 镜像名称 - - **OsName** (str) - (Required) 操作系统详细版本,请参考控制台的镜像版本;OsType为Other时,输入参数为Other - - **OsType** (str) - (Required) 操作系统平台,比如CentOS、Ubuntu、Windows、RedHat等,请参考控制台的镜像版本;若导入控制台上没有的操作系统,参数为Other - - **UFileUrl** (str) - (Required) UFile私有空间地址 - - **ImageDescription** (str) - 镜像描述 - - **Response** - - - **ImageId** (str) - 镜像Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ImportCustomImageRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("ImportCustomImage", d, **kwargs) - return apis.ImportCustomImageResponseSchema().loads(resp) - - def modify_uhost_instance_name(self, req=None, **kwargs): - """ ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Name** (str) - UHost实例名称 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUHostInstanceNameRequestSchema().dumps(d) - resp = self.invoke("ModifyUHostInstanceName", d, **kwargs) - return apis.ModifyUHostInstanceNameResponseSchema().loads(resp) - - def modify_uhost_instance_remark(self, req=None, **kwargs): - """ ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Remark** (str) - 备注 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUHostInstanceRemarkRequestSchema().dumps(d) - resp = self.invoke("ModifyUHostInstanceRemark", d, **kwargs) - return apis.ModifyUHostInstanceRemarkResponseSchema().loads(resp) - - def modify_uhost_instance_tag(self, req=None, **kwargs): - """ ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Tag** (str) - 业务组名称 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUHostInstanceTagRequestSchema().dumps(d) - resp = self.invoke("ModifyUHostInstanceTag", d, **kwargs) - return apis.ModifyUHostInstanceTagResponseSchema().loads(resp) - - def poweroff_uhost_instance(self, req=None, **kwargs): - """ PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.PoweroffUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("PoweroffUHostInstance", d, **kwargs) - return apis.PoweroffUHostInstanceResponseSchema().loads(resp) - - def reboot_uhost_instance(self, req=None, **kwargs): - """ RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **DiskPassword** (str) - 加密盘密码 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RebootUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("RebootUHostInstance", d, **kwargs) - return apis.RebootUHostInstanceResponseSchema().loads(resp) - - def reinstall_uhost_instance(self, req=None, **kwargs): - """ ReinstallUHostInstance - 重新安装指定UHost实例的操作系统 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例资源ID 参见 `DescribeUHostInstance `_ - - **DNSServers** (list) - 针对非私有子网主机,可自定义DNS。n可为0-2 - - **ImageId** (str) - 镜像Id,默认使用原镜像 参见 `DescribeImage `_ - - **Password** (str) - 如果创建UHost实例时LoginMode为Password,则必须填写,如果LoginMode为KeyPair,不需要填写 (密码格式使用BASE64编码;LoginMode不可变更) - - **ReserveDisk** (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes - - **ResourceType** (int) - 云灾备指明191 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReinstallUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("ReinstallUHostInstance", d, **kwargs) - return apis.ReinstallUHostInstanceResponseSchema().loads(resp) - - def reset_uhost_instance_password(self, req=None, **kwargs): - """ ResetUHostInstancePassword - 重置UHost实例的管理员密码。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Password** (str) - (Required) UHost新密码(密码格式使用BASE64编码) - - **UHostId** (str) - (Required) UHost实例ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResetUHostInstancePasswordRequestSchema().dumps(d) - resp = self.invoke("ResetUHostInstancePassword", d, **kwargs) - return apis.ResetUHostInstancePasswordResponseSchema().loads(resp) - - def resize_attached_disk(self, req=None, **kwargs): - """ ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **DiskId** (str) - (Required) 磁盘ID。参见 `DescribeUHostInstance `_ 返回值中的DiskSet。 - - **DiskSpace** (int) - (Required) 磁盘大小,单位GB,步长为10。取值范围需大于当前磁盘大小,最大值请参考 `磁盘类型 `_ 。 - - **UHostId** (str) - (Required) UHost实例ID。 参见 `DescribeUHostInstance `_ 。 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **Response** - - - **DiskId** (str) - 改配成功的磁盘id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeAttachedDiskRequestSchema().dumps(d) - resp = self.invoke("ResizeAttachedDisk", d, **kwargs) - return apis.ResizeAttachedDiskResponseSchema().loads(resp) - - def resize_uhost_instance(self, req=None, **kwargs): - """ ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,磁盘空间大小,网络增强等。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **BootDiskSpace** (int) - 系统盘大小,单位:GB,范围[20,100],步长:10,系统盘不支持缩容,因此不允许输入比当前实例系统盘小的值 - - **CPU** (int) - 虚拟CPU核数,单位:个,范围:[1,16],最小值为1,其他值是2的倍数,默认值为当前实例的CPU核数(*windows CPU>=2) - - **DiskSpace** (int) - 数据盘大小,单位:GB,范围[10,1000]; SSD机型,单位:GB,范围[100,500];步长:10,默认值为当前实例的数据盘大小,数据盘不支持缩容,因此不允许输入比当前实例数据盘大小的值 - - **Memory** (int) - 内存大小,单位:MB,范围[2048,65536],步长:2048,默认值为当前实例的内存大小(BGP-C数据中心最小支持1024,限Linux系统) - - **NetCapValue** (int) - 网卡升降级(1,表示升级,2表示降级,0表示不变) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("ResizeUHostInstance", d, **kwargs) - return apis.ResizeUHostInstanceResponseSchema().loads(resp) - - def start_uhost_instance(self, req=None, **kwargs): - """ StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **DiskPassword** (str) - 加密盘密码 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.StartUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("StartUHostInstance", d, **kwargs) - return apis.StartUHostInstanceResponseSchema().loads(resp) - - def stop_uhost_instance(self, req=None, **kwargs): - """ StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost实例ID 参见 `DescribeUHostInstance `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **UhostId** (str) - UHost实例ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.StopUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("StopUHostInstance", d, **kwargs) - return apis.StopUHostInstanceResponseSchema().loads(resp) - - def terminate_custom_image(self, req=None, **kwargs): - """ TerminateCustomImage - 删除用户自定义镜像 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ImageId** (str) - (Required) 自制镜像ID 参见 `DescribeImage `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **ImageId** (str) - 自制镜像Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.TerminateCustomImageRequestSchema().dumps(d) - resp = self.invoke("TerminateCustomImage", d, **kwargs) - return apis.TerminateCustomImageResponseSchema().loads(resp) - - def terminate_uhost_instance(self, req=None, **kwargs): - """ TerminateUHostInstance - 删除指定数据中心的UHost实例。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostId** (str) - (Required) UHost资源Id 参见 `DescribeUHostInstance `_ - - **Destroy** (int) - 是否直接删除,0表示按照原来的逻辑(有回收站权限,则进入回收站),1表示直接删除 - - **ReleaseEIP** (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。 - - **ReleaseUDisk** (bool) - 是否删除挂载的数据盘。true删除,其他不删除。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **InRecycle** (str) - 放入回收站:"Yes", 彻底删除:“No” - - **UHostId** (str) - UHost 实例 Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.TerminateUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("TerminateUHostInstance", d, **kwargs) - return apis.TerminateUHostInstanceResponseSchema().loads(resp) - - def upgrade_to_ark_uhost_instance(self, req=None, **kwargs): - """ UpgradeToArkUHostInstance - 普通升级为方舟机型 - - **Request** - - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **UHostIds** (list) - (Required) UHost主机的资源ID,例如UHostIds.0代表希望升级的主机1,UHostIds.1代表主机2。 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **CouponId** (str) - 代金券ID 请参考DescribeCoupon接口 - - **Response** - - - **UHostSet** (list) - UHost主机的资源ID数组 - - """ - d = {"Region": self.config.region} - req and d.update(req) - d = apis.UpgradeToArkUHostInstanceRequestSchema().dumps(d) - resp = self.invoke("UpgradeToArkUHostInstance", d, **kwargs) - return apis.UpgradeToArkUHostInstanceResponseSchema().loads(resp) diff --git a/ucloud/services/uhost/schemas/__init__.py b/ucloud/services/uhost/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uhost/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uhost/schemas/apis.py b/ucloud/services/uhost/schemas/apis.py deleted file mode 100644 index d01adc7..0000000 --- a/ucloud/services/uhost/schemas/apis.py +++ /dev/null @@ -1,949 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.uhost.schemas import models - -""" UHost API Schema -""" -""" -API: CopyCustomImage - -复制自制镜像 -""" - - -class CopyCustomImageRequestSchema(schema.RequestSchema): - """ CopyCustomImage - 复制自制镜像 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SourceImageId": fields.Str(required=True, dump_to="SourceImageId"), - "TargetImageDescription": fields.Str( - required=False, dump_to="TargetImageDescription" - ), - "TargetImageName": fields.Str( - required=False, dump_to="TargetImageName" - ), - "TargetProjectId": fields.Str(required=True, dump_to="TargetProjectId"), - "TargetRegion": fields.Str(required=False, dump_to="TargetRegion"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CopyCustomImageResponseSchema(schema.ResponseSchema): - """ CopyCustomImage - 复制自制镜像 - """ - - fields = { - "TargetImageId": fields.Str(required=False, load_from="TargetImageId") - } - - -""" -API: CreateCustomImage - -从指定UHost实例,生成自定义镜像。 -""" - - -class CreateCustomImageRequestSchema(schema.RequestSchema): - """ CreateCustomImage - 从指定UHost实例,生成自定义镜像。 - """ - - fields = { - "ImageDescription": fields.Str( - required=False, dump_to="ImageDescription" - ), - "ImageName": fields.Str(required=True, dump_to="ImageName"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateCustomImageResponseSchema(schema.ResponseSchema): - """ CreateCustomImage - 从指定UHost实例,生成自定义镜像。 - """ - - fields = {"ImageId": fields.Str(required=False, load_from="ImageId")} - - -""" -API: CreateUHostInstance - -创建UHost实例。 -""" - - -class CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSHSchema( - schema.RequestSchema -): - """ CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSH - - """ - - fields = { - "Area": fields.Str(required=False, dump_to="Area"), - "AreaCode": fields.Str(required=False, dump_to="AreaCode"), - "Port": fields.Int(required=False, dump_to="Port"), - } - - -class CreateUHostInstanceParamNetworkInterfaceIPv6Schema(schema.RequestSchema): - """ CreateUHostInstanceParamNetworkInterfaceIPv6 - - """ - - fields = { - "Adress": fields.Str(required=False, dump_to="Adress"), - "ShareBandwidthId": fields.Str( - required=False, dump_to="ShareBandwidthId" - ), - } - - -class CreateUHostInstanceParamNetworkInterfaceEIPSchema(schema.RequestSchema): - """ CreateUHostInstanceParamNetworkInterfaceEIP - - """ - - fields = { - "Bandwidth": fields.Int(required=False, dump_to="Bandwidth"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "GlobalSSH": CreateUHostInstanceParamNetworkInterfaceEIPGlobalSSHSchema( - required=False, dump_to="GlobalSSH" - ), - "OperatorName": fields.Str(required=False, dump_to="OperatorName"), - "PayMode": fields.Str(required=False, dump_to="PayMode"), - "ShareBandwidthId": fields.Str( - required=False, dump_to="ShareBandwidthId" - ), - } - - -class CreateUHostInstanceParamNetworkInterfaceSchema(schema.RequestSchema): - """ CreateUHostInstanceParamNetworkInterface - - """ - - fields = { - "EIP": CreateUHostInstanceParamNetworkInterfaceEIPSchema( - required=False, dump_to="EIP" - ), - "IPv6": CreateUHostInstanceParamNetworkInterfaceIPv6Schema( - required=False, dump_to="IPv6" - ), - } - - -class CreateUHostInstanceParamDisksSchema(schema.RequestSchema): - """ CreateUHostInstanceParamDisks - - """ - - fields = { - "BackupType": fields.Str(required=False, dump_to="BackupType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Encrypted": fields.Bool(required=False, dump_to="Encrypted"), - "IsBoot": fields.Str(required=True, dump_to="IsBoot"), - "KmsKeyId": fields.Str(required=False, dump_to="KmsKeyId"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=True, dump_to="Type"), - } - - -class CreateUHostInstanceRequestSchema(schema.RequestSchema): - """ CreateUHostInstance - 创建UHost实例。 - """ - - fields = { - "AlarmTemplateId": fields.Int( - required=False, dump_to="AlarmTemplateId" - ), - "BootDiskSpace": fields.Int(required=False, dump_to="BootDiskSpace"), - "CPU": fields.Int(required=False, dump_to="CPU"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "DiskPassword": fields.Str(required=False, dump_to="DiskPassword"), - "DiskSpace": fields.Int(required=False, dump_to="DiskSpace"), - "Disks": fields.List(CreateUHostInstanceParamDisksSchema()), - "GPU": fields.Int(required=False, dump_to="GPU"), - "GpuType": fields.Str(required=False, dump_to="GpuType"), - "HostIp": fields.Str(required=False, dump_to="HostIp"), - "HostType": fields.Str(required=False, dump_to="HostType"), - "HotplugFeature": fields.Bool(required=False, dump_to="HotplugFeature"), - "ImageId": fields.Str(required=True, dump_to="ImageId"), - "InstallAgent": fields.Str(required=False, dump_to="InstallAgent"), - "IsolationGroup": fields.Str(required=False, dump_to="IsolationGroup"), - "KeyPair": fields.Str(required=False, dump_to="KeyPair"), - "LoginMode": fields.Str(required=True, dump_to="LoginMode"), - "MachineType": fields.Str(required=False, dump_to="MachineType"), - "MaxCount": fields.Int(required=False, dump_to="MaxCount"), - "Memory": fields.Int(required=False, dump_to="Memory"), - "MinimalCpuPlatform": fields.Str( - required=False, dump_to="MinimalCpuPlatform" - ), - "Name": fields.Str(required=False, dump_to="Name"), - "NetCapability": fields.Str(required=False, dump_to="NetCapability"), - "NetworkId": fields.Str(required=False, dump_to="NetworkId"), - "NetworkInterface": fields.List( - CreateUHostInstanceParamNetworkInterfaceSchema() - ), - "Password": fields.Base64(required=True, dump_to="Password"), - "PrivateIp": fields.List(fields.Str()), - "PrivateMac": fields.Str(required=False, dump_to="PrivateMac"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceType": fields.Int(required=False, dump_to="ResourceType"), - "SecurityGroupId": fields.Str( - required=False, dump_to="SecurityGroupId" - ), - "SetId": fields.Int(required=False, dump_to="SetId"), - "StorageType": fields.Str(required=False, dump_to="StorageType"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "TimemachineFeature": fields.Str( - required=False, dump_to="TimemachineFeature" - ), - "UHostType": fields.Str(required=False, dump_to="UHostType"), - "UserData": fields.Str(required=False, dump_to="UserData"), - "UserDataScript": fields.Str(required=False, dump_to="UserDataScript"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateUHostInstanceResponseSchema(schema.ResponseSchema): - """ CreateUHostInstance - 创建UHost实例。 - """ - - fields = { - "IPs": fields.List(fields.Str(), required=False, load_from="IPs"), - "UHostIds": fields.List( - fields.Str(), required=False, load_from="UHostIds" - ), - } - - -""" -API: DescribeImage - -获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。 -""" - - -class DescribeImageRequestSchema(schema.RequestSchema): - """ DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。 - """ - - fields = { - "ImageId": fields.Str(required=False, dump_to="ImageId"), - "ImageType": fields.Str(required=False, dump_to="ImageType"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "OsType": fields.Str(required=False, dump_to="OsType"), - "PriceSet": fields.Int(required=False, dump_to="PriceSet"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeImageResponseSchema(schema.ResponseSchema): - """ DescribeImage - 获取指定数据中心镜像列表,用户可通过指定操作系统类型,镜像Id进行过滤。 - """ - - fields = { - "ImageSet": fields.List( - models.UHostImageSetSchema(), required=False, load_from="ImageSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeIsolationGroup - -查询硬件隔离组列表。 -""" - - -class DescribeIsolationGroupRequestSchema(schema.RequestSchema): - """ DescribeIsolationGroup - 查询硬件隔离组列表。 - """ - - fields = { - "GroupId": fields.Str(required=False, dump_to="GroupId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DescribeIsolationGroupResponseSchema(schema.ResponseSchema): - """ DescribeIsolationGroup - 查询硬件隔离组列表。 - """ - - fields = { - "IsolationGroupSet": fields.List( - models.IsolationGroupSchema(), - required=False, - load_from="IsolationGroupSet", - ) - } - - -""" -API: DescribeUHostInstance - -获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。 -""" - - -class DescribeUHostInstanceRequestSchema(schema.RequestSchema): - """ DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。 - """ - - fields = { - "IsolationGroup": fields.Str(required=False, dump_to="IsolationGroup"), - "LifeCycle": fields.Int(required=False, dump_to="LifeCycle"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "UHostIds": fields.List(fields.Str()), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUHostInstanceResponseSchema(schema.ResponseSchema): - """ DescribeUHostInstance - 获取主机或主机列表信息,并可根据数据中心,主机ID等参数进行过滤。 - """ - - fields = { - "Action": fields.Str(required=True, load_from="Action"), - "RetCode": fields.Int(required=True, load_from="RetCode"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - "UHostSet": fields.List( - models.UHostInstanceSetSchema(), - required=False, - load_from="UHostSet", - ), - } - - -""" -API: DescribeUHostInstanceSnapshot - -获取已经存在的UHost实例的存储快照列表。 -""" - - -class DescribeUHostInstanceSnapshotRequestSchema(schema.RequestSchema): - """ DescribeUHostInstanceSnapshot - 获取已经存在的UHost实例的存储快照列表。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUHostInstanceSnapshotResponseSchema(schema.ResponseSchema): - """ DescribeUHostInstanceSnapshot - 获取已经存在的UHost实例的存储快照列表。 - """ - - fields = { - "SnapshotSet": fields.List( - models.UHostSnapshotSetSchema(), - required=False, - load_from="SnapshotSet", - ), - "UhostId": fields.Str(required=False, load_from="UhostId"), - } - - -""" -API: DescribeUHostTags - -获取指定数据中心的业务组列表。 -""" - - -class DescribeUHostTagsRequestSchema(schema.RequestSchema): - """ DescribeUHostTags - 获取指定数据中心的业务组列表。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUHostTagsResponseSchema(schema.ResponseSchema): - """ DescribeUHostTags - 获取指定数据中心的业务组列表。 - """ - - fields = { - "TagSet": fields.List( - models.UHostTagSetSchema(), required=False, load_from="TagSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: GetUHostInstancePrice - -根据UHost实例配置,获取UHost实例的价格。 -""" - - -class GetUHostInstancePriceParamDisksSchema(schema.RequestSchema): - """ GetUHostInstancePriceParamDisks - - """ - - fields = { - "BackupType": fields.Str(required=False, dump_to="BackupType"), - "IsBoot": fields.Str(required=True, dump_to="IsBoot"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=True, dump_to="Type"), - } - - -class GetUHostInstancePriceRequestSchema(schema.RequestSchema): - """ GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。 - """ - - fields = { - "CPU": fields.Int(required=True, dump_to="CPU"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Count": fields.Int(required=True, dump_to="Count"), - "DiskSpace": fields.Int(required=False, dump_to="DiskSpace"), - "Disks": fields.List(GetUHostInstancePriceParamDisksSchema()), - "GPU": fields.Int(required=False, dump_to="GPU"), - "GpuType": fields.Str(required=False, dump_to="GpuType"), - "ImageId": fields.Str(required=True, dump_to="ImageId"), - "LifeCycle": fields.Int(required=False, dump_to="LifeCycle"), - "MachineType": fields.Str(required=False, dump_to="MachineType"), - "Memory": fields.Int(required=True, dump_to="Memory"), - "NetCapability": fields.Str(required=False, dump_to="NetCapability"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "StorageType": fields.Str(required=False, dump_to="StorageType"), - "TimemachineFeature": fields.Str( - required=False, dump_to="TimemachineFeature" - ), - "UHostType": fields.Str(required=False, dump_to="UHostType"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class GetUHostInstancePriceResponseSchema(schema.ResponseSchema): - """ GetUHostInstancePrice - 根据UHost实例配置,获取UHost实例的价格。 - """ - - fields = { - "PriceSet": fields.List( - models.UHostPriceSetSchema(), required=False, load_from="PriceSet" - ) - } - - -""" -API: GetUHostInstanceVncInfo - -获取指定UHost实例的管理VNC配置详细信息。 -""" - - -class GetUHostInstanceVncInfoRequestSchema(schema.RequestSchema): - """ GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class GetUHostInstanceVncInfoResponseSchema(schema.ResponseSchema): - """ GetUHostInstanceVncInfo - 获取指定UHost实例的管理VNC配置详细信息。 - """ - - fields = { - "UhostId": fields.Str(required=False, load_from="UhostId"), - "VncIP": fields.Str(required=False, load_from="VncIP"), - "VncPassword": fields.Str(required=False, load_from="VncPassword"), - "VncPort": fields.Int(required=False, load_from="VncPort"), - } - - -""" -API: GetUHostUpgradePrice - -获取UHost实例升级配置的价格。可选配置范围请参考[[api:uhost-api:uhost_type|云主机机型说明]]。 -""" - - -class GetUHostUpgradePriceRequestSchema(schema.RequestSchema): - """ GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考[[api:uhost-api:uhost_type|云主机机型说明]]。 - """ - - fields = { - "BootDiskSpace": fields.Int(required=False, dump_to="BootDiskSpace"), - "CPU": fields.Int(required=False, dump_to="CPU"), - "DiskSpace": fields.Int(required=False, dump_to="DiskSpace"), - "HostType": fields.Str(required=False, dump_to="HostType"), - "Memory": fields.Int(required=False, dump_to="Memory"), - "NetCapValue": fields.Int(required=False, dump_to="NetCapValue"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "TimemachineFeature": fields.Str( - required=False, dump_to="TimemachineFeature" - ), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class GetUHostUpgradePriceResponseSchema(schema.ResponseSchema): - """ GetUHostUpgradePrice - 获取UHost实例升级配置的价格。可选配置范围请参考[[api:uhost-api:uhost_type|云主机机型说明]]。 - """ - - fields = {"Price": fields.Float(required=False, load_from="Price")} - - -""" -API: ImportCustomImage - -把UFile的镜像文件导入到UHost,生成自定义镜像 -""" - - -class ImportCustomImageRequestSchema(schema.RequestSchema): - """ ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像 - """ - - fields = { - "Auth": fields.Bool(required=True, dump_to="Auth"), - "Format": fields.Str(required=True, dump_to="Format"), - "ImageDescription": fields.Str( - required=False, dump_to="ImageDescription" - ), - "ImageName": fields.Str(required=True, dump_to="ImageName"), - "OsName": fields.Str(required=True, dump_to="OsName"), - "OsType": fields.Str(required=True, dump_to="OsType"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UFileUrl": fields.Str(required=True, dump_to="UFileUrl"), - } - - -class ImportCustomImageResponseSchema(schema.ResponseSchema): - """ ImportCustomImage - 把UFile的镜像文件导入到UHost,生成自定义镜像 - """ - - fields = {"ImageId": fields.Str(required=False, load_from="ImageId")} - - -""" -API: ModifyUHostInstanceName - -修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。 -""" - - -class ModifyUHostInstanceNameRequestSchema(schema.RequestSchema): - """ ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。 - """ - - fields = { - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyUHostInstanceNameResponseSchema(schema.ResponseSchema): - """ ModifyUHostInstanceName - 修改指定UHost实例名称,需要给出数据中心,UHostId,及新的实例名称。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: ModifyUHostInstanceRemark - -修改指定UHost实例备注信息。 -""" - - -class ModifyUHostInstanceRemarkRequestSchema(schema.RequestSchema): - """ ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyUHostInstanceRemarkResponseSchema(schema.ResponseSchema): - """ ModifyUHostInstanceRemark - 修改指定UHost实例备注信息。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: ModifyUHostInstanceTag - -修改指定UHost实例业务组标识。 -""" - - -class ModifyUHostInstanceTagRequestSchema(schema.RequestSchema): - """ ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyUHostInstanceTagResponseSchema(schema.ResponseSchema): - """ ModifyUHostInstanceTag - 修改指定UHost实例业务组标识。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: PoweroffUHostInstance - -直接关闭UHost实例电源,无需等待实例正常关闭。 -""" - - -class PoweroffUHostInstanceRequestSchema(schema.RequestSchema): - """ PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class PoweroffUHostInstanceResponseSchema(schema.ResponseSchema): - """ PoweroffUHostInstance - 直接关闭UHost实例电源,无需等待实例正常关闭。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: RebootUHostInstance - -重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。 -""" - - -class RebootUHostInstanceRequestSchema(schema.RequestSchema): - """ RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。 - """ - - fields = { - "DiskPassword": fields.Str(required=False, dump_to="DiskPassword"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class RebootUHostInstanceResponseSchema(schema.ResponseSchema): - """ RebootUHostInstance - 重新启动UHost实例,需要指定数据中心及UHostID两个参数的值。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: ReinstallUHostInstance - -重新安装指定UHost实例的操作系统 -""" - - -class ReinstallUHostInstanceRequestSchema(schema.RequestSchema): - """ ReinstallUHostInstance - 重新安装指定UHost实例的操作系统 - """ - - fields = { - "DNSServers": fields.List(fields.Str()), - "ImageId": fields.Str(required=False, dump_to="ImageId"), - "Password": fields.Base64(required=False, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ReserveDisk": fields.Str(required=False, dump_to="ReserveDisk"), - "ResourceType": fields.Int(required=False, dump_to="ResourceType"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ReinstallUHostInstanceResponseSchema(schema.ResponseSchema): - """ ReinstallUHostInstance - 重新安装指定UHost实例的操作系统 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: ResetUHostInstancePassword - -重置UHost实例的管理员密码。 -""" - - -class ResetUHostInstancePasswordRequestSchema(schema.RequestSchema): - """ ResetUHostInstancePassword - 重置UHost实例的管理员密码。 - """ - - fields = { - "Password": fields.Base64(required=True, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ResetUHostInstancePasswordResponseSchema(schema.ResponseSchema): - """ ResetUHostInstancePassword - 重置UHost实例的管理员密码。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: ResizeAttachedDisk - -修改挂载的磁盘大小,包含系统盘和数据盘 -""" - - -class ResizeAttachedDiskRequestSchema(schema.RequestSchema): - """ ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘 - """ - - fields = { - "DiskId": fields.Str(required=True, dump_to="DiskId"), - "DiskSpace": fields.Int(required=True, dump_to="DiskSpace"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ResizeAttachedDiskResponseSchema(schema.ResponseSchema): - """ ResizeAttachedDisk - 修改挂载的磁盘大小,包含系统盘和数据盘 - """ - - fields = {"DiskId": fields.Str(required=False, load_from="DiskId")} - - -""" -API: ResizeUHostInstance - -修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,磁盘空间大小,网络增强等。 -""" - - -class ResizeUHostInstanceRequestSchema(schema.RequestSchema): - """ ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,磁盘空间大小,网络增强等。 - """ - - fields = { - "BootDiskSpace": fields.Int(required=False, dump_to="BootDiskSpace"), - "CPU": fields.Int(required=False, dump_to="CPU"), - "DiskSpace": fields.Int(required=False, dump_to="DiskSpace"), - "Memory": fields.Int(required=False, dump_to="Memory"), - "NetCapValue": fields.Int(required=False, dump_to="NetCapValue"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ResizeUHostInstanceResponseSchema(schema.ResponseSchema): - """ ResizeUHostInstance - 修改指定UHost实例的资源配置,如CPU核心数,内存容量大小,磁盘空间大小,网络增强等。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: StartUHostInstance - -启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。 -""" - - -class StartUHostInstanceRequestSchema(schema.RequestSchema): - """ StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。 - """ - - fields = { - "DiskPassword": fields.Str(required=False, dump_to="DiskPassword"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class StartUHostInstanceResponseSchema(schema.ResponseSchema): - """ StartUHostInstance - 启动处于关闭状态的UHost实例,需要指定数据中心及UHostID两个参数的值。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: StopUHostInstance - -指停止处于运行状态的UHost实例,需指定数据中心及UhostID。 -""" - - -class StopUHostInstanceRequestSchema(schema.RequestSchema): - """ StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class StopUHostInstanceResponseSchema(schema.ResponseSchema): - """ StopUHostInstance - 指停止处于运行状态的UHost实例,需指定数据中心及UhostID。 - """ - - fields = {"UhostId": fields.Str(required=False, load_from="UhostId")} - - -""" -API: TerminateCustomImage - -删除用户自定义镜像 -""" - - -class TerminateCustomImageRequestSchema(schema.RequestSchema): - """ TerminateCustomImage - 删除用户自定义镜像 - """ - - fields = { - "ImageId": fields.Str(required=True, dump_to="ImageId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class TerminateCustomImageResponseSchema(schema.ResponseSchema): - """ TerminateCustomImage - 删除用户自定义镜像 - """ - - fields = {"ImageId": fields.Str(required=False, load_from="ImageId")} - - -""" -API: TerminateUHostInstance - -删除指定数据中心的UHost实例。 -""" - - -class TerminateUHostInstanceRequestSchema(schema.RequestSchema): - """ TerminateUHostInstance - 删除指定数据中心的UHost实例。 - """ - - fields = { - "Destroy": fields.Int(required=False, dump_to="Destroy"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ReleaseEIP": fields.Bool(required=False, dump_to="ReleaseEIP"), - "ReleaseUDisk": fields.Bool(required=False, dump_to="ReleaseUDisk"), - "UHostId": fields.Str(required=True, dump_to="UHostId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class TerminateUHostInstanceResponseSchema(schema.ResponseSchema): - """ TerminateUHostInstance - 删除指定数据中心的UHost实例。 - """ - - fields = { - "InRecycle": fields.Str(required=True, load_from="InRecycle"), - "UHostId": fields.Str(required=False, load_from="UHostId"), - } - - -""" -API: UpgradeToArkUHostInstance - -普通升级为方舟机型 -""" - - -class UpgradeToArkUHostInstanceRequestSchema(schema.RequestSchema): - """ UpgradeToArkUHostInstance - 普通升级为方舟机型 - """ - - fields = { - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Region": fields.Str(required=True, dump_to="Region"), - "UHostIds": fields.List(fields.Str()), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class UpgradeToArkUHostInstanceResponseSchema(schema.ResponseSchema): - """ UpgradeToArkUHostInstance - 普通升级为方舟机型 - """ - - fields = { - "UHostSet": fields.List( - fields.Str(), required=False, load_from="UHostSet" - ) - } diff --git a/ucloud/services/uhost/schemas/models.py b/ucloud/services/uhost/schemas/models.py deleted file mode 100644 index 342d45c..0000000 --- a/ucloud/services/uhost/schemas/models.py +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UHostImageSetSchema(schema.ResponseSchema): - """ UHostImageSet - DescribeImage - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Features": fields.List(fields.Str()), - "FuncType": fields.Str(required=False, load_from="FuncType"), - "ImageDescription": fields.Str( - required=False, load_from="ImageDescription" - ), - "ImageId": fields.Str(required=False, load_from="ImageId"), - "ImageName": fields.Str(required=False, load_from="ImageName"), - "ImageSize": fields.Int(required=False, load_from="ImageSize"), - "ImageType": fields.Str(required=False, load_from="ImageType"), - "IntegratedSoftware": fields.Str( - required=False, load_from="IntegratedSoftware" - ), - "Links": fields.Str(required=False, load_from="Links"), - "MinimalCPU": fields.Str(required=False, load_from="MinimalCPU"), - "OsName": fields.Str(required=False, load_from="OsName"), - "OsType": fields.Str(required=False, load_from="OsType"), - "State": fields.Str(required=False, load_from="State"), - "Vendor": fields.Str(required=False, load_from="Vendor"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class SpreadInfoSchema(schema.ResponseSchema): - """ SpreadInfo - 每个可用区中硬件隔离组信息 - """ - - fields = { - "UHostCount": fields.Int(required=False, load_from="UHostCount"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class IsolationGroupSchema(schema.ResponseSchema): - """ IsolationGroup - 硬件隔离组信息 - """ - - fields = { - "GroupId": fields.Str(required=False, load_from="GroupId"), - "GroupName": fields.Str(required=False, load_from="GroupName"), - "Remark": fields.Str(required=False, load_from="Remark"), - "SpreadInfoSet": fields.List(SpreadInfoSchema()), - } - - -class UHostDiskSetSchema(schema.ResponseSchema): - """ UHostDiskSet - DescribeUHostInstance - """ - - fields = { - "BackupType": fields.Str(required=False, load_from="BackupType"), - "DiskId": fields.Str(required=False, load_from="DiskId"), - "DiskType": fields.Str(required=True, load_from="DiskType"), - "Drive": fields.Str(required=False, load_from="Drive"), - "Encrypted": fields.Bool(required=False, load_from="Encrypted"), - "IsBoot": fields.Str(required=True, load_from="IsBoot"), - "Name": fields.Str(required=False, load_from="Name"), - "Size": fields.Int(required=False, load_from="Size"), - "Type": fields.Str(required=False, load_from="Type"), - } - - -class UHostIPSetSchema(schema.ResponseSchema): - """ UHostIPSet - DescribeUHostInstance - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "Default": fields.Str(required=True, load_from="Default"), - "IP": fields.Str(required=False, load_from="IP"), - "IPId": fields.Str(required=False, load_from="IPId"), - "Mac": fields.Str(required=True, load_from="Mac"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "Type": fields.Str(required=False, load_from="Type"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "Weight": fields.Int(required=True, load_from="Weight"), - } - - -class UHostInstanceSetSchema(schema.ResponseSchema): - """ UHostInstanceSet - DescribeUHostInstance - """ - - fields = { - "AutoRenew": fields.Str(required=False, load_from="AutoRenew"), - "BasicImageId": fields.Str(required=False, load_from="BasicImageId"), - "BasicImageName": fields.Str( - required=False, load_from="BasicImageName" - ), - "BootDiskState": fields.Str(required=False, load_from="BootDiskState"), - "CPU": fields.Int(required=False, load_from="CPU"), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DiskSet": fields.List(UHostDiskSetSchema()), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "GPU": fields.Int(required=False, load_from="GPU"), - "HostType": fields.Str(required=False, load_from="HostType"), - "HotplugFeature": fields.Bool( - required=False, load_from="HotplugFeature" - ), - "IPSet": fields.List(UHostIPSetSchema()), - "ImageId": fields.Str(required=False, load_from="ImageId"), - "IsolationGroup": fields.Str( - required=False, load_from="IsolationGroup" - ), - "LifeCycle": fields.Str(required=False, load_from="LifeCycle"), - "MachineType": fields.Str(required=False, load_from="MachineType"), - "Memory": fields.Int(required=False, load_from="Memory"), - "Name": fields.Str(required=False, load_from="Name"), - "NetCapability": fields.Str(required=False, load_from="NetCapability"), - "NetworkState": fields.Str(required=False, load_from="NetworkState"), - "OsName": fields.Str(required=False, load_from="OsName"), - "OsType": fields.Str(required=False, load_from="OsType"), - "Remark": fields.Str(required=False, load_from="Remark"), - "State": fields.Str(required=False, load_from="State"), - "StorageType": fields.Str(required=False, load_from="StorageType"), - "SubnetType": fields.Str(required=False, load_from="SubnetType"), - "Tag": fields.Str(required=False, load_from="Tag"), - "TimemachineFeature": fields.Str( - required=False, load_from="TimemachineFeature" - ), - "TotalDiskSpace": fields.Int( - required=False, load_from="TotalDiskSpace" - ), - "UHostId": fields.Str(required=False, load_from="UHostId"), - "UHostType": fields.Str(required=False, load_from="UHostType"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UHostSnapshotSetSchema(schema.ResponseSchema): - """ UHostSnapshotSet - DescribeUHostInstanceSnapshot - """ - - fields = { - "SnapshotName": fields.Str(required=False, load_from="SnapshotName"), - "SnapshotState": fields.Str(required=False, load_from="SnapshotState"), - "SnapshotTime": fields.Str(required=False, load_from="SnapshotTime"), - } - - -class UHostTagSetSchema(schema.ResponseSchema): - """ UHostTagSet - DescribeUHostTags - """ - - fields = { - "Tag": fields.Str(required=False, load_from="Tag"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class UHostPriceSetSchema(schema.ResponseSchema): - """ UHostPriceSet - 主机价格 - """ - - fields = { - "ChargeType": fields.Str(required=True, load_from="ChargeType"), - "Price": fields.Float(required=True, load_from="Price"), - } diff --git a/ucloud/services/uhub/__init__.py b/ucloud/services/uhub/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uhub/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uhub/client.py b/ucloud/services/uhub/client.py deleted file mode 100644 index 78aa3bd..0000000 --- a/ucloud/services/uhub/client.py +++ /dev/null @@ -1,188 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.uhub.schemas import apis - - -class UHubClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UHubClient, self).__init__(config, transport, middleware, logger) - - def create_repo(self, req=None, **kwargs): - """ CreateRepo - 创建镜像仓库 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **RepoName** (str) - (Required) 仓库名称,不可修改 - - **Description** (str) - 仓库备注 - - **IsShared** (bool) - 镜像仓库是否公开,公开为true、不公开为false;默认为false - - **Response** - - - **Message** (str) - 有错误时返回内容 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.CreateRepoRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateRepo", d, **kwargs) - return apis.CreateRepoResponseSchema().loads(resp) - - def delete_repo(self, req=None, **kwargs): - """ DeleteRepo - 删除镜像仓库 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **RepoName** (str) - (Required) 镜像仓库名称 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DeleteRepoRequestSchema().dumps(d) - resp = self.invoke("DeleteRepo", d, **kwargs) - return apis.DeleteRepoResponseSchema().loads(resp) - - def delete_repo_image(self, req=None, **kwargs): - """ DeleteRepoImage - 删除镜像 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **ImageName** (str) - (Required) 镜像名称 - - **RepoName** (str) - (Required) 镜像仓库名称 - - **TagName** (str) - 不指定tag则删除全部tag - - **Response** - - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DeleteRepoImageRequestSchema().dumps(d) - resp = self.invoke("DeleteRepoImage", d, **kwargs) - return apis.DeleteRepoImageResponseSchema().loads(resp) - - def get_image_tag(self, req=None, **kwargs): - """ GetImageTag - 获取镜像tag - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **ImageName** (str) - (Required) 镜像名称 - - **RepoName** (str) - (Required) 镜像仓库名称 - - **Limit** (int) - 每次获取数量,默认为20 - - **Offset** (int) - 偏移量,默认0 - - **TagName** (str) - 默认不写,如果填写,代表查询该tag,否则查全部tag - - **Response** - - - **TagSet** (list) - 见 **TagSet** 模型定义 - - **TotalCount** (int) - tag总数 - - **Response Model** - - **TagSet** - - - **TagName** (str) - Tag名称 - - **UpdateTime** (str) - 镜像更新时间 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetImageTagRequestSchema().dumps(d) - resp = self.invoke("GetImageTag", d, **kwargs) - return apis.GetImageTagResponseSchema().loads(resp) - - def get_repo(self, req=None, **kwargs): - """ GetRepo - 获取镜像仓库 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Limit** (int) - 数量,默认20 - - **Offset** (int) - 偏移量,默认0 - - **Type** (str) - private私有仓库,public公共仓库,默认public - - **Response** - - - **RepoSet** (list) - 见 **RepoSet** 模型定义 - - **TotalCount** (int) - 总的仓库数量 - - **Response Model** - - **RepoSet** - - - **CreateTime** (str) - 仓库创建时间 - - **Description** (str) - 镜像仓库描述 - - **IsOutSide** (str) - 镜像仓库是否外网可以访问,可以为ture,不可以为false - - **IsShared** (str) - 镜像仓库类型,false为私有;true为公有 - - **RepoName** (str) - 镜像仓库名称 - - **UpdateTime** (str) - 仓库更新时间 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetRepoRequestSchema().dumps(d) - resp = self.invoke("GetRepo", d, **kwargs) - return apis.GetRepoResponseSchema().loads(resp) - - def get_repo_image(self, req=None, **kwargs): - """ GetRepoImage - 获取镜像仓库下的镜像 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **RepoName** (str) - (Required) 镜像仓库名称 - - **Limit** (int) - 显示数量,默认为20 - - **Offset** (int) - 偏移量,默认0 - - **Response** - - - **ImageSet** (list) - 见 **ImageSet** 模型定义 - - **TotalCount** (int) - - - **Response Model** - - **ImageSet** - - - **CreateTime** (str) - 创建时间 - - **ImageName** (str) - 镜像名称 - - **LatestTag** (str) - 最新push的Tag - - **PullCount** (int) - 镜像被下载次数 - - **RepoName** (str) - 镜像仓库名称 - - **UpdateTime** (str) - 修改时间 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.GetRepoImageRequestSchema().dumps(d) - resp = self.invoke("GetRepoImage", d, **kwargs) - return apis.GetRepoImageResponseSchema().loads(resp) - - def update_repo(self, req=None, **kwargs): - """ UpdateRepo - 更新镜像仓库 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **RepoName** (str) - (Required) 镜像仓库名称,不可修改 - - **Description** (str) - 备注 - - **IsShared** (str) - false设置为私有;true设置为公有。默认false - - **Response** - - - **Message** (str) - 错误的时候返回 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.UpdateRepoRequestSchema().dumps(d) - resp = self.invoke("UpdateRepo", d, **kwargs) - return apis.UpdateRepoResponseSchema().loads(resp) diff --git a/ucloud/services/uhub/schemas/__init__.py b/ucloud/services/uhub/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uhub/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uhub/schemas/apis.py b/ucloud/services/uhub/schemas/apis.py deleted file mode 100644 index c77f1aa..0000000 --- a/ucloud/services/uhub/schemas/apis.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.uhub.schemas import models - -""" UHub API Schema -""" -""" -API: CreateRepo - -创建镜像仓库 -""" - - -class CreateRepoRequestSchema(schema.RequestSchema): - """ CreateRepo - 创建镜像仓库 - """ - - fields = { - "Description": fields.Str(required=False, dump_to="Description"), - "IsShared": fields.Bool(required=False, dump_to="IsShared"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "RepoName": fields.Str(required=True, dump_to="RepoName"), - } - - -class CreateRepoResponseSchema(schema.ResponseSchema): - """ CreateRepo - 创建镜像仓库 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} - - -""" -API: DeleteRepo - -删除镜像仓库 -""" - - -class DeleteRepoRequestSchema(schema.RequestSchema): - """ DeleteRepo - 删除镜像仓库 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "RepoName": fields.Str(required=True, dump_to="RepoName"), - } - - -class DeleteRepoResponseSchema(schema.ResponseSchema): - """ DeleteRepo - 删除镜像仓库 - """ - - fields = {} - - -""" -API: DeleteRepoImage - -删除镜像 -""" - - -class DeleteRepoImageRequestSchema(schema.RequestSchema): - """ DeleteRepoImage - 删除镜像 - """ - - fields = { - "ImageName": fields.Str(required=True, dump_to="ImageName"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "RepoName": fields.Str(required=True, dump_to="RepoName"), - "TagName": fields.Str(required=False, dump_to="TagName"), - } - - -class DeleteRepoImageResponseSchema(schema.ResponseSchema): - """ DeleteRepoImage - 删除镜像 - """ - - fields = {} - - -""" -API: GetImageTag - -获取镜像tag -""" - - -class GetImageTagRequestSchema(schema.RequestSchema): - """ GetImageTag - 获取镜像tag - """ - - fields = { - "ImageName": fields.Str(required=True, dump_to="ImageName"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "RepoName": fields.Str(required=True, dump_to="RepoName"), - "TagName": fields.Str(required=False, dump_to="TagName"), - } - - -class GetImageTagResponseSchema(schema.ResponseSchema): - """ GetImageTag - 获取镜像tag - """ - - fields = { - "TagSet": fields.List( - models.TagSetSchema(), required=True, load_from="TagSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: GetRepo - -获取镜像仓库 -""" - - -class GetRepoRequestSchema(schema.RequestSchema): - """ GetRepo - 获取镜像仓库 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Type": fields.Str(required=False, dump_to="Type"), - } - - -class GetRepoResponseSchema(schema.ResponseSchema): - """ GetRepo - 获取镜像仓库 - """ - - fields = { - "RepoSet": fields.List( - models.RepoSetSchema(), required=True, load_from="RepoSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: GetRepoImage - -获取镜像仓库下的镜像 -""" - - -class GetRepoImageRequestSchema(schema.RequestSchema): - """ GetRepoImage - 获取镜像仓库下的镜像 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "RepoName": fields.Str(required=True, dump_to="RepoName"), - } - - -class GetRepoImageResponseSchema(schema.ResponseSchema): - """ GetRepoImage - 获取镜像仓库下的镜像 - """ - - fields = { - "ImageSet": fields.List( - models.ImageSetSchema(), required=True, load_from="ImageSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: UpdateRepo - -更新镜像仓库 -""" - - -class UpdateRepoRequestSchema(schema.RequestSchema): - """ UpdateRepo - 更新镜像仓库 - """ - - fields = { - "Description": fields.Str(required=False, dump_to="Description"), - "IsShared": fields.Str(required=False, dump_to="IsShared"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "RepoName": fields.Str(required=True, dump_to="RepoName"), - } - - -class UpdateRepoResponseSchema(schema.ResponseSchema): - """ UpdateRepo - 更新镜像仓库 - """ - - fields = {"Message": fields.Str(required=False, load_from="Message")} diff --git a/ucloud/services/uhub/schemas/models.py b/ucloud/services/uhub/schemas/models.py deleted file mode 100644 index db49eea..0000000 --- a/ucloud/services/uhub/schemas/models.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class TagSetSchema(schema.ResponseSchema): - """ TagSet - Tag详细信息 - """ - - fields = { - "TagName": fields.Str(required=True, load_from="TagName"), - "UpdateTime": fields.Str(required=True, load_from="UpdateTime"), - } - - -class RepoSetSchema(schema.ResponseSchema): - """ RepoSet - 镜像仓库 - """ - - fields = { - "CreateTime": fields.Str(required=True, load_from="CreateTime"), - "Description": fields.Str(required=True, load_from="Description"), - "IsOutSide": fields.Str(required=True, load_from="IsOutSide"), - "IsShared": fields.Str(required=True, load_from="IsShared"), - "RepoName": fields.Str(required=True, load_from="RepoName"), - "UpdateTime": fields.Str(required=True, load_from="UpdateTime"), - } - - -class ImageSetSchema(schema.ResponseSchema): - """ ImageSet - 镜像信息 - """ - - fields = { - "CreateTime": fields.Str(required=True, load_from="CreateTime"), - "ImageName": fields.Str(required=True, load_from="ImageName"), - "LatestTag": fields.Str(required=True, load_from="LatestTag"), - "PullCount": fields.Int(required=True, load_from="PullCount"), - "RepoName": fields.Str(required=True, load_from="RepoName"), - "UpdateTime": fields.Str(required=True, load_from="UpdateTime"), - } diff --git a/ucloud/services/ulb/__init__.py b/ucloud/services/ulb/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ulb/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ulb/client.py b/ucloud/services/ulb/client.py deleted file mode 100644 index 9ff8d0f..0000000 --- a/ucloud/services/ulb/client.py +++ /dev/null @@ -1,655 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.ulb.schemas import apis - - -class ULBClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(ULBClient, self).__init__(config, transport, middleware, logger) - - def allocate_backend(self, req=None, **kwargs): - """ AllocateBackend - 添加ULB后端资源实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ResourceId** (str) - (Required) 所添加的后端资源的资源ID - - **ResourceType** (str) - (Required) 所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost” - - **ULBId** (str) - (Required) 负载均衡实例的ID - - **VServerId** (str) - (Required) VServer实例的ID - - **Enabled** (int) - 后端实例状态开关,枚举值: 1:启用; 0:禁用 默认为启用 - - **Port** (int) - 所添加的后端资源服务端口,取值范围[1-65535],默认80 - - **Weight** (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 - - **Response** - - - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关),可用于 UpdateBackendAttribute/UpdateBackendAttributeBatch/ReleaseBackend - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AllocateBackendRequestSchema().dumps(d) - resp = self.invoke("AllocateBackend", d, **kwargs) - return apis.AllocateBackendResponseSchema().loads(resp) - - def allocate_backend_batch(self, req=None, **kwargs): - """ AllocateBackendBatch - 批量添加VServer后端节点 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Backends** (list) - (Required) 用| 分割字段,格式:ResourceId| ResourceType| Port| Enabled|IP| Weight。ResourceId:所添加的后端资源的资源ID;ResourceType:所添加的后端资源的类型,枚举值:UHost -> 云主机;UPM -> 物理云主机; UDHost -> 私有专区主机;UDocker -> 容器,默认值为“UHost”;Port:所添加的后端资源服务端口,取值范围[1-65535];Enabled:后端实例状态开关,枚举值: 1:启用; 0:禁用;IP:后端资源内网ip;Weight:所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 - - **ULBId** (str) - (Required) 负载均衡实例的ID - - **VServerId** (str) - (Required) VServer实例的ID - - **ApiVersion** (int) - - - **Response** - - - **BackendSet** (list) - 见 **BackendSet** 模型定义 - - **Response Model** - - **BackendSet** - - - **BackendId** (str) - rs的资源ID - - **ResourceId** (str) - rs对应的UHost ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AllocateBackendBatchRequestSchema().dumps(d) - resp = self.invoke("AllocateBackendBatch", d, **kwargs) - return apis.AllocateBackendBatchResponseSchema().loads(resp) - - def bind_ssl(self, req=None, **kwargs): - """ BindSSL - 将SSL证书绑定到VServer - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SSLId** (str) - (Required) SSL证书的Id - - **ULBId** (str) - (Required) 所绑定ULB实例ID - - **VServerId** (str) - (Required) 所绑定VServer实例ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.BindSSLRequestSchema().dumps(d) - resp = self.invoke("BindSSL", d, **kwargs) - return apis.BindSSLResponseSchema().loads(resp) - - def create_policy(self, req=None, **kwargs): - """ CreatePolicy - 创建VServer内容转发策略 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackendId** (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId - - **Match** (str) - (Required) 内容转发匹配字段 - - **ULBId** (str) - (Required) 需要添加内容转发策略的负载均衡实例ID - - **VServerId** (str) - (Required) 需要添加内容转发策略的VServer实例ID - - **Type** (str) - 内容转发匹配字段的类型 - - **Response** - - - **PolicyId** (str) - 内容转发策略ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreatePolicyRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreatePolicy", d, **kwargs) - return apis.CreatePolicyResponseSchema().loads(resp) - - def create_ssl(self, req=None, **kwargs): - """ CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SSLName** (str) - (Required) SSL证书的名字,默认值为空 - - **CaCert** (str) - CA证书 - - **PrivateKey** (str) - 加密证书的私钥 - - **SSLContent** (str) - SSL证书的完整内容,包括用户证书、加密证书的私钥、CA证书 - - **SSLType** (str) - 所添加的SSL证书类型,目前只支持Pem格式 - - **UserCert** (str) - 用户的证书 - - **Response** - - - **SSLId** (str) - SSL证书的Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateSSLRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateSSL", d, **kwargs) - return apis.CreateSSLResponseSchema().loads(resp) - - def create_ulb(self, req=None, **kwargs): - """ CreateULB - 创建负载均衡实例,可以选择内网或者外网 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BusinessId** (str) - ULB 所属的业务组ID,如果不传则使用默认的业务组 - - **ChargeType** (str) - 付费方式 - - **IPVersion** (str) - ULB ip类型,枚举值:IPv6 / IPv4 (内部测试,暂未对外开放) - - **InnerMode** (str) - 创建的ULB是否为内网模式 - - **ListenType** (str) - ULB 监听器类型,枚举值:RequestProxy / PacketsTransmit (内部测试,暂未对外开放) - - **OuterMode** (str) - 创建的ULB是否为外网模式,默认即为外网模式 - - **PrivateIp** (str) - 创建内网ULB时指定内网IP。若不传值,则随机分配当前子网下的IP(暂时不对外开放,创建外网ULB该字段会忽略) - - **Remark** (str) - 备注 - - **SubnetId** (str) - 内网ULB 所属的子网ID,如果不传则使用默认的子网 - - **Tag** (str) - 业务组 - - **ULBName** (str) - 负载均衡的名字,默认值为“ULB” - - **VPCId** (str) - ULB所在的VPC的ID, 如果不传则使用默认的VPC - - **Response** - - - **ULBId** (str) - 负载均衡实例的Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateULBRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateULB", d, **kwargs) - return apis.CreateULBResponseSchema().loads(resp) - - def create_vserver(self, req=None, **kwargs): - """ CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ULBId** (str) - (Required) 负载均衡实例ID - - **ClientTimeout** (int) - ListenType为RequestProxy时表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;ListenType为PacketsTransmit时表示连接保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持 - - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 - - **FrontendPort** (int) - VServer后端端口,取值范围[1-65535];默认值为80 - - **ListenType** (str) - 监听器类型,枚举值为:RequestProxy -> 请求代理;PacketsTransmit -> 报文转发;默认为"RequestProxy" - - **Method** (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:"Roundrobin" - - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; - - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 - - **PersistenceInfo** (str) - 根据PersistenceType确认; None和ServerInsert: 此字段无意义; UserDefined:此字段传入自定义会话保持String - - **PersistenceType** (str) - VServer会话保持方式,默认关闭会话保持。枚举值:None -> 关闭;ServerInsert -> 自动生成KEY;UserDefined -> 用户自定义KEY。 - - **Protocol** (str) - VServer实例的协议,请求代理模式下有 HTTP、HTTPS、TCP,报文转发下有 TCP,UDP。默认为“HTTP" - - **VServerName** (str) - VServer实例名称,默认为"VServer" - - **Response** - - - **VServerId** (str) - VServer实例的Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateVServerRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateVServer", d, **kwargs) - return apis.CreateVServerResponseSchema().loads(resp) - - def delete_policy(self, req=None, **kwargs): - """ DeletePolicy - 删除内容转发策略 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PolicyId** (str) - (Required) 内容转发策略ID - - **GroupId** (str) - 内容转发策略组ID - - **VServerId** (str) - VServer 资源ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeletePolicyRequestSchema().dumps(d) - resp = self.invoke("DeletePolicy", d, **kwargs) - return apis.DeletePolicyResponseSchema().loads(resp) - - def delete_ssl(self, req=None, **kwargs): - """ DeleteSSL - 删除SSL证书 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SSLId** (str) - (Required) SSL证书的ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteSSLRequestSchema().dumps(d) - resp = self.invoke("DeleteSSL", d, **kwargs) - return apis.DeleteSSLResponseSchema().loads(resp) - - def delete_ulb(self, req=None, **kwargs): - """ DeleteULB - 删除负载均衡实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ULBId** (str) - (Required) 负载均衡实例的ID - - **ReleaseEip** (bool) - 删除ulb时是否释放绑定的EIP,false标识只解绑EIP,true表示会释放绑定的EIP,默认是false - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteULBRequestSchema().dumps(d) - resp = self.invoke("DeleteULB", d, **kwargs) - return apis.DeleteULBResponseSchema().loads(resp) - - def delete_vserver(self, req=None, **kwargs): - """ DeleteVServer - 删除VServer实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ULBId** (str) - (Required) 负载均衡实例的ID - - **VServerId** (str) - (Required) VServer实例的ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteVServerRequestSchema().dumps(d) - resp = self.invoke("DeleteVServer", d, **kwargs) - return apis.DeleteVServerResponseSchema().loads(resp) - - def describe_ssl(self, req=None, **kwargs): - """ DescribeSSL - 获取SSL证书信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 数据分页值,默认为20 - - **Offset** (int) - 数据偏移量,默认值为0 - - **SSLId** (str) - SSL证书的Id - - **Response** - - - **DataSet** (list) - 见 **ULBSSLSet** 模型定义 - - **TotalCount** (int) - 满足条件的SSL证书总数 - - **Response Model** - - **ULBSSLSet** - - - **HashValue** (str) - - - **SSLId** (str) - SSL证书的Id - - **SSLName** (str) - SSL证书的名字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeSSLRequestSchema().dumps(d) - resp = self.invoke("DescribeSSL", d, **kwargs) - return apis.DescribeSSLResponseSchema().loads(resp) - - def describe_ulb(self, req=None, **kwargs): - """ DescribeULB - 获取ULB详细信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BusinessId** (str) - ULB所属的业务组ID - - **Limit** (int) - 数据分页值,默认为20 - - **Offset** (int) - 数据偏移量,默认为0 - - **SubnetId** (str) - ULB所属的子网ID - - **ULBId** (str) - 负载均衡实例的Id。 若指定则返回指定的负载均衡实例的信息; 若不指定则返回当前数据中心中所有的负载均衡实例的信息 - - **VPCId** (str) - ULB所属的VPC - - **Response** - - - **DataSet** (list) - 见 **ULBSet** 模型定义 - - **TotalCount** (int) - 满足条件的ULB总数 - - **Response Model** - - **PolicyBackendSet** - - - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关 - - **ObjectId** (str) - 后端资源的对象ID - - **Port** (int) - 所添加的后端资源服务端口 - - **PrivateIP** (str) - 后端资源的内网IP - - **ResourceName** (str) - 后端资源的实例名称 - - **ULBPolicySet** - - - **BackendSet** (list) - 见 **PolicyBackendSet** 模型定义 - - **Match** (str) - 内容转发匹配字段;默认内容转发类型下为空。 - - **PolicyId** (str) - 内容转发Id,默认内容转发类型下为空。 - - **PolicyPriority** (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。 - - **PolicyType** (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发 - - **TotalCount** (int) - 默认内容转发类型下返回当前rs总数 - - **Type** (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空 - - **VServerId** (str) - 所属VServerId - - **ULBBackendSet** - - - **BackendId** (str) - 后端资源实例的Id - - **Enabled** (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用 - - **Port** (int) - 后端提供服务的端口 - - **PrivateIP** (str) - 后端提供服务的内网IP - - **ResourceId** (str) - 资源实例的资源Id - - **ResourceName** (str) - 资源实例的资源名称 - - **ResourceType** (str) - 资源实例的类型 - - **Status** (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常 - - **SubResourceId** (str) - 资源绑定的虚拟网卡实例的资源Id - - **SubResourceName** (str) - 资源绑定的虚拟网卡实例的资源名称 - - **SubResourceType** (str) - 资源绑定的虚拟网卡实例的类型 - - **SubnetId** (str) - 后端提供服务的资源所在的子网的ID - - **Weight** (int) - - - **ULBSSLSet** - - - **HashValue** (str) - - - **SSLId** (str) - SSL证书的Id - - **SSLName** (str) - SSL证书的名字 - - **ULBVServerSet** - - - **BackendSet** (list) - 见 **ULBBackendSet** 模型定义 - - **ClientTimeout** (int) - 空闲连接的回收时间,单位:秒。 - - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 - - **FrontendPort** (int) - VServer服务端口 - - **ListenType** (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发 - - **Method** (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。 - - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; - - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 - - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。 - - **PersistenceType** (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。 - - **PolicySet** (list) - 见 **ULBPolicySet** 模型定义 - - **Protocol** (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。 - - **SSLSet** (list) - 见 **ULBSSLSet** 模型定义 - - **Status** (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。 - - **VServerId** (str) - VServer实例的Id - - **VServerName** (str) - VServer实例的名字 - - **ULBIPSet** - - - **Bandwidth** (int) - 弹性IP的带宽值(暂未对外开放) - - **BandwidthType** (int) - 弹性IP的带宽类型,枚举值:1 表示是共享带宽,0 普通带宽类型(暂未对外开放) - - **EIP** (str) - 弹性IP地址 - - **EIPId** (str) - 弹性IP的ID - - **OperatorName** (str) - 弹性IP的运营商信息,枚举值为: Bgp:BGP IP International:国际IP - - **ULBSet** - - - **Bandwidth** (int) - 带宽 - - **BandwidthType** (int) - 带宽类型,枚举值为: 0,非共享带宽; 1,共享带宽 - - **BusinessId** (str) - ULB 所属的业务组ID - - **CreateTime** (int) - ULB的创建时间,格式为Unix Timestamp - - **ExpireTime** (int) - ULB的到期时间,格式为Unix Timestamp - - **IPSet** (list) - 见 **ULBIPSet** 模型定义 - - **Name** (str) - 负载均衡的资源名称(资源系统中),缺省值“ULB” - - **PrivateIP** (str) - ULB的内网IP,当ULBType为OuterMode时,该值为空 - - **Remark** (str) - 负载均衡的备注,缺省值“” - - **Resource** (list) - ULB的详细信息列表(废弃) - - **SubnetId** (str) - ULB 为 InnerMode 时,ULB 所属的子网ID,默认为空 - - **Tag** (str) - 负载均衡的业务组名称,缺省值“Default” - - **ULBId** (str) - 负载均衡的资源ID - - **ULBName** (str) - 负载均衡的资源名称(内部记载,废弃) - - **ULBType** (str) - ULB 的类型 - - **VPCId** (str) - ULB所在的VPC的ID - - **VServerSet** (list) - 见 **ULBVServerSet** 模型定义 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeULBRequestSchema().dumps(d) - resp = self.invoke("DescribeULB", d, **kwargs) - return apis.DescribeULBResponseSchema().loads(resp) - - def describe_vserver(self, req=None, **kwargs): - """ DescribeVServer - 获取ULB下的VServer的详细信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ULBId** (str) - (Required) 负载均衡实例的Id - - **Limit** (int) - 数据分页值 - - **Offset** (int) - 数据偏移量 - - **VServerId** (str) - VServer实例的Id;若指定则返回指定的VServer实例的信息; 若不指定则返回当前负载均衡实例下所有VServer的信息 - - **Response** - - - **DataSet** (list) - 见 **ULBVServerSet** 模型定义 - - **TotalCount** (int) - 满足条件的VServer总数 - - **Response Model** - - **PolicyBackendSet** - - - **BackendId** (str) - 所添加的后端资源在ULB中的对象ID,(为ULB系统中使用,与资源自身ID无关 - - **ObjectId** (str) - 后端资源的对象ID - - **Port** (int) - 所添加的后端资源服务端口 - - **PrivateIP** (str) - 后端资源的内网IP - - **ResourceName** (str) - 后端资源的实例名称 - - **ULBSSLSet** - - - **HashValue** (str) - - - **SSLId** (str) - SSL证书的Id - - **SSLName** (str) - SSL证书的名字 - - **ULBPolicySet** - - - **BackendSet** (list) - 见 **PolicyBackendSet** 模型定义 - - **Match** (str) - 内容转发匹配字段;默认内容转发类型下为空。 - - **PolicyId** (str) - 内容转发Id,默认内容转发类型下为空。 - - **PolicyPriority** (int) - 内容转发优先级,范围[1,9999],数字越大优先级越高。默认内容转发规则下为0。 - - **PolicyType** (str) - 内容类型,枚举值:Custom -> 客户自定义;Default -> 默认内容转发 - - **TotalCount** (int) - 默认内容转发类型下返回当前rs总数 - - **Type** (str) - 内容转发匹配字段的类型,枚举值:Domain -> 域名;Path -> 路径; 默认内容转发类型下为空 - - **VServerId** (str) - 所属VServerId - - **ULBBackendSet** - - - **BackendId** (str) - 后端资源实例的Id - - **Enabled** (int) - 后端提供服务的实例启用与否,枚举值:0 禁用 1 启用 - - **Port** (int) - 后端提供服务的端口 - - **PrivateIP** (str) - 后端提供服务的内网IP - - **ResourceId** (str) - 资源实例的资源Id - - **ResourceName** (str) - 资源实例的资源名称 - - **ResourceType** (str) - 资源实例的类型 - - **Status** (int) - 后端提供服务的实例运行状态,枚举值:0健康检查健康状态 1 健康检查异常 - - **SubResourceId** (str) - 资源绑定的虚拟网卡实例的资源Id - - **SubResourceName** (str) - 资源绑定的虚拟网卡实例的资源名称 - - **SubResourceType** (str) - 资源绑定的虚拟网卡实例的类型 - - **SubnetId** (str) - 后端提供服务的资源所在的子网的ID - - **Weight** (int) - - - **ULBVServerSet** - - - **BackendSet** (list) - 见 **ULBBackendSet** 模型定义 - - **ClientTimeout** (int) - 空闲连接的回收时间,单位:秒。 - - **Domain** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查域名 - - **FrontendPort** (int) - VServer服务端口 - - **ListenType** (str) - 监听器类型,枚举值为: RequestProxy -> 请求代理;PacketsTransmit -> 报文转发 - - **Method** (str) - VServer负载均衡的模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口)。 - - **MonitorType** (str) - 健康检查类型,枚举值:Port -> 端口检查;Path -> 路径检查; - - **Path** (str) - 根据MonitorType确认; 当MonitorType为Port时,此字段无意义。当MonitorType为Path时,代表HTTP检查路径 - - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert,此字段为空; UserDefined,此字段展示用户自定义会话string。 - - **PersistenceType** (str) - VServer会话保持方式。枚举值为: None -> 关闭会话保持; ServerInsert -> 自动生成; UserDefined -> 用户自定义。 - - **PolicySet** (list) - 见 **ULBPolicySet** 模型定义 - - **Protocol** (str) - VServer实例的协议。 枚举值为:HTTP,TCP,UDP,HTTPS。 - - **SSLSet** (list) - 见 **ULBSSLSet** 模型定义 - - **Status** (int) - VServer的运行状态。枚举值: 0 -> rs全部运行正常;1 -> rs全部运行异常;2 -> rs部分运行异常。 - - **VServerId** (str) - VServer实例的Id - - **VServerName** (str) - VServer实例的名字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeVServerRequestSchema().dumps(d) - resp = self.invoke("DescribeVServer", d, **kwargs) - return apis.DescribeVServerResponseSchema().loads(resp) - - def release_backend(self, req=None, **kwargs): - """ ReleaseBackend - 从VServer释放后端资源实例 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackendId** (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID) - - **ULBId** (str) - (Required) 负载均衡实例的ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReleaseBackendRequestSchema().dumps(d) - resp = self.invoke("ReleaseBackend", d, **kwargs) - return apis.ReleaseBackendResponseSchema().loads(resp) - - def unbind_ssl(self, req=None, **kwargs): - """ UnbindSSL - 从VServer解绑SSL证书 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SSLId** (str) - (Required) SSL证书的Id - - **ULBId** (str) - (Required) 所绑定ULB实例ID - - **VServerId** (str) - (Required) 所绑定VServer实例ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UnbindSSLRequestSchema().dumps(d) - resp = self.invoke("UnbindSSL", d, **kwargs) - return apis.UnbindSSLResponseSchema().loads(resp) - - def update_backend_attribute(self, req=None, **kwargs): - """ UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackendId** (str) - (Required) 后端资源实例的ID(ULB后端ID,非资源自身ID) - - **ULBId** (str) - (Required) 负载均衡资源ID - - **Enabled** (int) - 后端实例状态开关 - - **Port** (int) - 后端资源服务端口,取值范围[1-65535] - - **Weight** (int) - 所添加的后端RS权重(在加权轮询算法下有效),取值范围[0-100],默认为1 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateBackendAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateBackendAttribute", d, **kwargs) - return apis.UpdateBackendAttributeResponseSchema().loads(resp) - - def update_policy(self, req=None, **kwargs): - """ UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackendId** (list) - (Required) 内容转发策略应用的后端资源实例的ID,来源于 AllocateBackend 返回的 BackendId - - **Match** (str) - (Required) 内容转发匹配字段 - - **PolicyId** (str) - (Required) 转发规则的ID - - **ULBId** (str) - (Required) 需要添加内容转发策略的负载均衡实例ID - - **VServerId** (str) - (Required) 需要添加内容转发策略的VServer实例ID - - **Type** (str) - 内容转发匹配字段的类型 - - **Response** - - - **PolicyId** (str) - 转发规则的ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdatePolicyRequestSchema().dumps(d) - resp = self.invoke("UpdatePolicy", d, **kwargs) - return apis.UpdatePolicyResponseSchema().loads(resp) - - def update_ulb_attribute(self, req=None, **kwargs): - """ UpdateULBAttribute - 更新ULB名字业务组备注等属性字段 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ULBId** (str) - (Required) ULB资源ID - - **Name** (str) - 名字 - - **Remark** (str) - 备注 - - **Tag** (str) - 业务 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateULBAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateULBAttribute", d, **kwargs) - return apis.UpdateULBAttributeResponseSchema().loads(resp) - - def update_vserver_attribute(self, req=None, **kwargs): - """ UpdateVServerAttribute - 更新VServer实例属性 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ULBId** (str) - (Required) 负载均衡实例ID - - **VServerId** (str) - (Required) VServer实例ID - - **ClientTimeout** (int) - 请求代理的VServer下表示空闲连接的回收时间,单位:秒,取值范围:时(0,86400],默认值为60;报文转发的VServer下表示回话保持的时间,单位:秒,取值范围:[60,900],0 表示禁用连接保持 - - **Domain** (str) - MonitorType 为 Path 时指定健康检查发送请求时HTTP HEADER 里的域名 - - **Method** (str) - VServer负载均衡模式,枚举值:Roundrobin -> 轮询;Source -> 源地址;ConsistentHash -> 一致性哈希;SourcePort -> 源地址(计算端口);ConsistentHashPort -> 一致性哈希(计算端口); WeightRoundrobin -> 加权轮询; Leastconn -> 最小连接数。ConsistentHash,SourcePort,ConsistentHashPort 只在报文转发中使用;Leastconn只在请求代理中使用;Roundrobin、Source和WeightRoundrobin在请求代理和报文转发中使用。默认为:"Roundrobin" - - **MonitorType** (str) - 健康检查的类型,Port:端口,Path:路径 - - **Path** (str) - MonitorType 为 Path 时指定健康检查发送请求时的路径,默认为 / - - **PersistenceInfo** (str) - 根据PersistenceType确定: None或ServerInsert, 此字段无意义; UserDefined, 则此字段传入用户自定义会话保持String. 若无此字段则不做修改 - - **PersistenceType** (str) - VServer会话保持模式,若无此字段则不做修改。枚举值:None:关闭;ServerInsert:自动生成KEY;UserDefined:用户自定义KEY。 - - **Protocol** (str) - VServer协议类型,请求代理只支持修改为 HTTP/HTTPS,报文转发VServer只支持修改为 TCP/UDP - - **VServerName** (str) - VServer实例名称,若无此字段则不做修改 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateVServerAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateVServerAttribute", d, **kwargs) - return apis.UpdateVServerAttributeResponseSchema().loads(resp) diff --git a/ucloud/services/ulb/schemas/__init__.py b/ucloud/services/ulb/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/ulb/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/ulb/schemas/apis.py b/ucloud/services/ulb/schemas/apis.py deleted file mode 100644 index 6c2e57d..0000000 --- a/ucloud/services/ulb/schemas/apis.py +++ /dev/null @@ -1,614 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.ulb.schemas import models - -""" ULB API Schema -""" -""" -API: AllocateBackend - -添加ULB后端资源实例 -""" - - -class AllocateBackendRequestSchema(schema.RequestSchema): - """ AllocateBackend - 添加ULB后端资源实例 - """ - - fields = { - "Enabled": fields.Int(required=False, dump_to="Enabled"), - "Port": fields.Int(required=False, dump_to="Port"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceId": fields.Str(required=True, dump_to="ResourceId"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - "Weight": fields.Int(required=False, dump_to="Weight"), - } - - -class AllocateBackendResponseSchema(schema.ResponseSchema): - """ AllocateBackend - 添加ULB后端资源实例 - """ - - fields = {"BackendId": fields.Str(required=False, load_from="BackendId")} - - -""" -API: AllocateBackendBatch - -批量添加VServer后端节点 -""" - - -class AllocateBackendBatchRequestSchema(schema.RequestSchema): - """ AllocateBackendBatch - 批量添加VServer后端节点 - """ - - fields = { - "ApiVersion": fields.Int(required=False, dump_to="ApiVersion"), - "Backends": fields.List(fields.Str()), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - } - - -class AllocateBackendBatchResponseSchema(schema.ResponseSchema): - """ AllocateBackendBatch - 批量添加VServer后端节点 - """ - - fields = { - "BackendSet": fields.List( - models.BackendSetSchema(), required=False, load_from="BackendSet" - ) - } - - -""" -API: BindSSL - -将SSL证书绑定到VServer -""" - - -class BindSSLRequestSchema(schema.RequestSchema): - """ BindSSL - 将SSL证书绑定到VServer - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLId": fields.Str(required=True, dump_to="SSLId"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - } - - -class BindSSLResponseSchema(schema.ResponseSchema): - """ BindSSL - 将SSL证书绑定到VServer - """ - - fields = {} - - -""" -API: CreatePolicy - -创建VServer内容转发策略 -""" - - -class CreatePolicyRequestSchema(schema.RequestSchema): - """ CreatePolicy - 创建VServer内容转发策略 - """ - - fields = { - "BackendId": fields.List(fields.Str()), - "Match": fields.Str(required=True, dump_to="Match"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Type": fields.Str(required=False, dump_to="Type"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - } - - -class CreatePolicyResponseSchema(schema.ResponseSchema): - """ CreatePolicy - 创建VServer内容转发策略 - """ - - fields = {"PolicyId": fields.Str(required=False, load_from="PolicyId")} - - -""" -API: CreateSSL - -创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来 -""" - - -class CreateSSLRequestSchema(schema.RequestSchema): - """ CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来 - """ - - fields = { - "CaCert": fields.Str(required=False, dump_to="CaCert"), - "PrivateKey": fields.Str(required=False, dump_to="PrivateKey"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLContent": fields.Str(required=False, dump_to="SSLContent"), - "SSLName": fields.Str(required=True, dump_to="SSLName"), - "SSLType": fields.Str(required=False, dump_to="SSLType"), - "UserCert": fields.Str(required=False, dump_to="UserCert"), - } - - -class CreateSSLResponseSchema(schema.ResponseSchema): - """ CreateSSL - 创建SSL证书,可以把整个 Pem 证书内容传过来,或者把证书、私钥、CA证书分别传过来 - """ - - fields = {"SSLId": fields.Str(required=False, load_from="SSLId")} - - -""" -API: CreateULB - -创建负载均衡实例,可以选择内网或者外网 -""" - - -class CreateULBRequestSchema(schema.RequestSchema): - """ CreateULB - 创建负载均衡实例,可以选择内网或者外网 - """ - - fields = { - "BusinessId": fields.Str(required=False, dump_to="BusinessId"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "IPVersion": fields.Str(required=False, dump_to="IPVersion"), - "InnerMode": fields.Str(required=False, dump_to="InnerMode"), - "ListenType": fields.Str(required=False, dump_to="ListenType"), - "OuterMode": fields.Str(required=False, dump_to="OuterMode"), - "PrivateIp": fields.Str(required=False, dump_to="PrivateIp"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "ULBName": fields.Str(required=False, dump_to="ULBName"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - } - - -class CreateULBResponseSchema(schema.ResponseSchema): - """ CreateULB - 创建负载均衡实例,可以选择内网或者外网 - """ - - fields = {"ULBId": fields.Str(required=False, load_from="ULBId")} - - -""" -API: CreateVServer - -创建VServer实例,定义监听的协议和端口以及负载均衡算法 -""" - - -class CreateVServerRequestSchema(schema.RequestSchema): - """ CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法 - """ - - fields = { - "ClientTimeout": fields.Int(required=False, dump_to="ClientTimeout"), - "Domain": fields.Str(required=False, dump_to="Domain"), - "FrontendPort": fields.Int(required=False, dump_to="FrontendPort"), - "ListenType": fields.Str(required=False, dump_to="ListenType"), - "Method": fields.Str(required=False, dump_to="Method"), - "MonitorType": fields.Str(required=False, dump_to="MonitorType"), - "Path": fields.Str(required=False, dump_to="Path"), - "PersistenceInfo": fields.Str( - required=False, dump_to="PersistenceInfo" - ), - "PersistenceType": fields.Str( - required=False, dump_to="PersistenceType" - ), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Protocol": fields.Str(required=False, dump_to="Protocol"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerName": fields.Str(required=False, dump_to="VServerName"), - } - - -class CreateVServerResponseSchema(schema.ResponseSchema): - """ CreateVServer - 创建VServer实例,定义监听的协议和端口以及负载均衡算法 - """ - - fields = {"VServerId": fields.Str(required=False, load_from="VServerId")} - - -""" -API: DeletePolicy - -删除内容转发策略 -""" - - -class DeletePolicyRequestSchema(schema.RequestSchema): - """ DeletePolicy - 删除内容转发策略 - """ - - fields = { - "GroupId": fields.Str(required=False, dump_to="GroupId"), - "PolicyId": fields.Str(required=True, dump_to="PolicyId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VServerId": fields.Str(required=False, dump_to="VServerId"), - } - - -class DeletePolicyResponseSchema(schema.ResponseSchema): - """ DeletePolicy - 删除内容转发策略 - """ - - fields = {} - - -""" -API: DeleteSSL - -删除SSL证书 -""" - - -class DeleteSSLRequestSchema(schema.RequestSchema): - """ DeleteSSL - 删除SSL证书 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLId": fields.Str(required=True, dump_to="SSLId"), - } - - -class DeleteSSLResponseSchema(schema.ResponseSchema): - """ DeleteSSL - 删除SSL证书 - """ - - fields = {} - - -""" -API: DeleteULB - -删除负载均衡实例 -""" - - -class DeleteULBRequestSchema(schema.RequestSchema): - """ DeleteULB - 删除负载均衡实例 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ReleaseEip": fields.Bool(required=False, dump_to="ReleaseEip"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - } - - -class DeleteULBResponseSchema(schema.ResponseSchema): - """ DeleteULB - 删除负载均衡实例 - """ - - fields = {} - - -""" -API: DeleteVServer - -删除VServer实例 -""" - - -class DeleteVServerRequestSchema(schema.RequestSchema): - """ DeleteVServer - 删除VServer实例 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - } - - -class DeleteVServerResponseSchema(schema.ResponseSchema): - """ DeleteVServer - 删除VServer实例 - """ - - fields = {} - - -""" -API: DescribeSSL - -获取SSL证书信息 -""" - - -class DescribeSSLRequestSchema(schema.RequestSchema): - """ DescribeSSL - 获取SSL证书信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLId": fields.Str(required=False, dump_to="SSLId"), - } - - -class DescribeSSLResponseSchema(schema.ResponseSchema): - """ DescribeSSL - 获取SSL证书信息 - """ - - fields = { - "DataSet": fields.List( - models.ULBSSLSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeULB - -获取ULB详细信息 -""" - - -class DescribeULBRequestSchema(schema.RequestSchema): - """ DescribeULB - 获取ULB详细信息 - """ - - fields = { - "BusinessId": fields.Str(required=False, dump_to="BusinessId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "ULBId": fields.Str(required=False, dump_to="ULBId"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - } - - -class DescribeULBResponseSchema(schema.ResponseSchema): - """ DescribeULB - 获取ULB详细信息 - """ - - fields = { - "DataSet": fields.List( - models.ULBSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVServer - -获取ULB下的VServer的详细信息 -""" - - -class DescribeVServerRequestSchema(schema.RequestSchema): - """ DescribeVServer - 获取ULB下的VServer的详细信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=False, dump_to="VServerId"), - } - - -class DescribeVServerResponseSchema(schema.ResponseSchema): - """ DescribeVServer - 获取ULB下的VServer的详细信息 - """ - - fields = { - "DataSet": fields.List( - models.ULBVServerSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: ReleaseBackend - -从VServer释放后端资源实例 -""" - - -class ReleaseBackendRequestSchema(schema.RequestSchema): - """ ReleaseBackend - 从VServer释放后端资源实例 - """ - - fields = { - "BackendId": fields.Str(required=True, dump_to="BackendId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - } - - -class ReleaseBackendResponseSchema(schema.ResponseSchema): - """ ReleaseBackend - 从VServer释放后端资源实例 - """ - - fields = {} - - -""" -API: UnbindSSL - -从VServer解绑SSL证书 -""" - - -class UnbindSSLRequestSchema(schema.RequestSchema): - """ UnbindSSL - 从VServer解绑SSL证书 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SSLId": fields.Str(required=True, dump_to="SSLId"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - } - - -class UnbindSSLResponseSchema(schema.ResponseSchema): - """ UnbindSSL - 从VServer解绑SSL证书 - """ - - fields = {} - - -""" -API: UpdateBackendAttribute - -更新ULB后端资源实例(服务节点)属性 -""" - - -class UpdateBackendAttributeRequestSchema(schema.RequestSchema): - """ UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性 - """ - - fields = { - "BackendId": fields.Str(required=True, dump_to="BackendId"), - "Enabled": fields.Int(required=False, dump_to="Enabled"), - "Port": fields.Int(required=False, dump_to="Port"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "Weight": fields.Int(required=False, dump_to="Weight"), - } - - -class UpdateBackendAttributeResponseSchema(schema.ResponseSchema): - """ UpdateBackendAttribute - 更新ULB后端资源实例(服务节点)属性 - """ - - fields = {} - - -""" -API: UpdatePolicy - -更新内容转发规则,包括转发规则后的服务节点 -""" - - -class UpdatePolicyRequestSchema(schema.RequestSchema): - """ UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点 - """ - - fields = { - "BackendId": fields.List(fields.Str()), - "Match": fields.Str(required=True, dump_to="Match"), - "PolicyId": fields.Str(required=True, dump_to="PolicyId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Type": fields.Str(required=False, dump_to="Type"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - } - - -class UpdatePolicyResponseSchema(schema.ResponseSchema): - """ UpdatePolicy - 更新内容转发规则,包括转发规则后的服务节点 - """ - - fields = {"PolicyId": fields.Str(required=False, load_from="PolicyId")} - - -""" -API: UpdateULBAttribute - -更新ULB名字业务组备注等属性字段 -""" - - -class UpdateULBAttributeRequestSchema(schema.RequestSchema): - """ UpdateULBAttribute - 更新ULB名字业务组备注等属性字段 - """ - - fields = { - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - } - - -class UpdateULBAttributeResponseSchema(schema.ResponseSchema): - """ UpdateULBAttribute - 更新ULB名字业务组备注等属性字段 - """ - - fields = {} - - -""" -API: UpdateVServerAttribute - -更新VServer实例属性 -""" - - -class UpdateVServerAttributeRequestSchema(schema.RequestSchema): - """ UpdateVServerAttribute - 更新VServer实例属性 - """ - - fields = { - "ClientTimeout": fields.Int(required=False, dump_to="ClientTimeout"), - "Domain": fields.Str(required=False, dump_to="Domain"), - "Method": fields.Str(required=False, dump_to="Method"), - "MonitorType": fields.Str(required=False, dump_to="MonitorType"), - "Path": fields.Str(required=False, dump_to="Path"), - "PersistenceInfo": fields.Str( - required=False, dump_to="PersistenceInfo" - ), - "PersistenceType": fields.Str( - required=False, dump_to="PersistenceType" - ), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Protocol": fields.Str(required=False, dump_to="Protocol"), - "Region": fields.Str(required=True, dump_to="Region"), - "ULBId": fields.Str(required=True, dump_to="ULBId"), - "VServerId": fields.Str(required=True, dump_to="VServerId"), - "VServerName": fields.Str(required=False, dump_to="VServerName"), - } - - -class UpdateVServerAttributeResponseSchema(schema.ResponseSchema): - """ UpdateVServerAttribute - 更新VServer实例属性 - """ - - fields = {} diff --git a/ucloud/services/ulb/schemas/models.py b/ucloud/services/ulb/schemas/models.py deleted file mode 100644 index 7a07165..0000000 --- a/ucloud/services/ulb/schemas/models.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class BackendSetSchema(schema.ResponseSchema): - """ BackendSet - ulb添加rs时返回的信息 - """ - - fields = { - "BackendId": fields.Str(required=True, load_from="BackendId"), - "ResourceId": fields.Str(required=True, load_from="ResourceId"), - } - - -class ULBSSLSetSchema(schema.ResponseSchema): - """ ULBSSLSet - DescribeULB - """ - - fields = { - "HashValue": fields.Str(required=False, load_from="HashValue"), - "SSLId": fields.Str(required=False, load_from="SSLId"), - "SSLName": fields.Str(required=False, load_from="SSLName"), - } - - -class PolicyBackendSetSchema(schema.ResponseSchema): - """ PolicyBackendSet - 内容转发下rs详细信息 - """ - - fields = { - "BackendId": fields.Str(required=False, load_from="BackendId"), - "ObjectId": fields.Str(required=False, load_from="ObjectId"), - "Port": fields.Int(required=False, load_from="Port"), - "PrivateIP": fields.Str(required=False, load_from="PrivateIP"), - "ResourceName": fields.Str(required=False, load_from="ResourceName"), - } - - -class ULBBackendSetSchema(schema.ResponseSchema): - """ ULBBackendSet - DescribeULB - """ - - fields = { - "BackendId": fields.Str(required=False, load_from="BackendId"), - "Enabled": fields.Int(required=False, load_from="Enabled"), - "Port": fields.Int(required=False, load_from="Port"), - "PrivateIP": fields.Str(required=False, load_from="PrivateIP"), - "ResourceId": fields.Str(required=False, load_from="ResourceId"), - "ResourceName": fields.Str(required=False, load_from="ResourceName"), - "ResourceType": fields.Str(required=False, load_from="ResourceType"), - "Status": fields.Int(required=False, load_from="Status"), - "SubResourceId": fields.Str(required=False, load_from="SubResourceId"), - "SubResourceName": fields.Str( - required=False, load_from="SubResourceName" - ), - "SubResourceType": fields.Str( - required=False, load_from="SubResourceType" - ), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "Weight": fields.Int(required=False, load_from="Weight"), - } - - -class ULBPolicySetSchema(schema.ResponseSchema): - """ ULBPolicySet - 内容转发详细列表 - """ - - fields = { - "BackendSet": fields.List(PolicyBackendSetSchema()), - "Match": fields.Str(required=False, load_from="Match"), - "PolicyId": fields.Str(required=False, load_from="PolicyId"), - "PolicyPriority": fields.Int( - required=False, load_from="PolicyPriority" - ), - "PolicyType": fields.Str(required=False, load_from="PolicyType"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - "Type": fields.Str(required=False, load_from="Type"), - "VServerId": fields.Str(required=False, load_from="VServerId"), - } - - -class ULBVServerSetSchema(schema.ResponseSchema): - """ ULBVServerSet - DescribeULB - """ - - fields = { - "BackendSet": fields.List(ULBBackendSetSchema()), - "ClientTimeout": fields.Int(required=False, load_from="ClientTimeout"), - "Domain": fields.Str(required=True, load_from="Domain"), - "FrontendPort": fields.Int(required=False, load_from="FrontendPort"), - "ListenType": fields.Str(required=False, load_from="ListenType"), - "Method": fields.Str(required=False, load_from="Method"), - "MonitorType": fields.Str(required=True, load_from="MonitorType"), - "Path": fields.Str(required=True, load_from="Path"), - "PersistenceInfo": fields.Str( - required=False, load_from="PersistenceInfo" - ), - "PersistenceType": fields.Str( - required=False, load_from="PersistenceType" - ), - "PolicySet": fields.List(ULBPolicySetSchema()), - "Protocol": fields.Str(required=False, load_from="Protocol"), - "SSLSet": fields.List(ULBSSLSetSchema()), - "Status": fields.Int(required=False, load_from="Status"), - "VServerId": fields.Str(required=False, load_from="VServerId"), - "VServerName": fields.Str(required=False, load_from="VServerName"), - } - - -class ULBIPSetSchema(schema.ResponseSchema): - """ ULBIPSet - DescribeULB - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "BandwidthType": fields.Int(required=False, load_from="BandwidthType"), - "EIP": fields.Str(required=False, load_from="EIP"), - "EIPId": fields.Str(required=False, load_from="EIPId"), - "OperatorName": fields.Str(required=False, load_from="OperatorName"), - } - - -class ULBSetSchema(schema.ResponseSchema): - """ ULBSet - DescribeULB - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "BandwidthType": fields.Int(required=False, load_from="BandwidthType"), - "BusinessId": fields.Str(required=False, load_from="BusinessId"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "IPSet": fields.List(ULBIPSetSchema()), - "Name": fields.Str(required=False, load_from="Name"), - "PrivateIP": fields.Str(required=False, load_from="PrivateIP"), - "Remark": fields.Str(required=False, load_from="Remark"), - "Resource": fields.List(fields.Str()), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "Tag": fields.Str(required=False, load_from="Tag"), - "ULBId": fields.Str(required=False, load_from="ULBId"), - "ULBName": fields.Str(required=False, load_from="ULBName"), - "ULBType": fields.Str(required=False, load_from="ULBType"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "VServerSet": fields.List(ULBVServerSetSchema()), - } diff --git a/ucloud/services/umem/__init__.py b/ucloud/services/umem/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/umem/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/umem/client.py b/ucloud/services/umem/client.py deleted file mode 100644 index 5f824ba..0000000 --- a/ucloud/services/umem/client.py +++ /dev/null @@ -1,730 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.umem.schemas import apis - - -class UMemClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UMemClient, self).__init__(config, transport, middleware, logger) - - def create_umem_space(self, req=None, **kwargs): - """ CreateUMemSpace - 创建UMem内存空间 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 空间名称,长度(6<=size<=63) - - **Size** (int) - (Required) 内存大小, 单位:GB, 范围[1~1024] - - **ChargeType** (str) - Year , Month, Dynamic, Trial 默认: Month - - **CouponId** (str) - 使用的代金券id - - **Password** (str) - URedis密码。请遵照 `字段规范 `_ 设定密码。密码需使用base64进行编码,举例如下:# echo -n Password1 | base64UGFzc3dvcmQx。 - - **Protocol** (str) - 协议:memcache, redis (默认redis).注意:redis无single类型 - - **Quantity** (int) - 购买时长 默认: 1 - - **SubnetId** (str) - - - **Tag** (str) - - - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) - - **VPCId** (str) - - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **SpaceId** (str) - 创建内存空间ID列表 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUMemSpaceRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUMemSpace", d, **kwargs) - return apis.CreateUMemSpaceResponseSchema().loads(resp) - - def create_umem_cache_group(self, req=None, **kwargs): - """ CreateUMemcacheGroup - 创建单机Memcache - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 请求创建组的名称 范围[6-60] - - **ChargeType** (str) - 计费模式,Year , Month, Dynamic 默认: Month - - **ConfigId** (str) - 配置ID,目前仅支持默认配置id 默认配置id:"9a891891-c245-4b66-bce8-67e59430d67c" - - **CouponId** (str) - 代金券ID - - **Protocol** (str) - - - **Quantity** (int) - 购买时长,默认为1 - - **Size** (int) - 每个节点的内存大小,单位GB,默认1GB 目前仅支持1/2/4/8/16/32这几档 - - **SubnetId** (str) - - - **Tag** (str) - 业务组 默认:Default - - **VPCId** (str) - - - **Version** (str) - Memcache版本信息,默认为1.4.31 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **GroupId** (str) - 创建的组ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUMemcacheGroupRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUMemcacheGroup", d, **kwargs) - return apis.CreateUMemcacheGroupResponseSchema().loads(resp) - - def create_uredis_group(self, req=None, **kwargs): - """ CreateURedisGroup - 创建主备redis - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **HighAvailability** (str) - (Required) 是否开启高可用,enable或disable - - **Name** (str) - (Required) 请求创建组的名称 (范围[6-63],只能包含英文、数字以及符号-和_) - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **AutoBackup** (str) - 是否自动备份,enable或disable,默认disable - - **BackupId** (str) - 有此项代表从备份中创建,无代表正常创建 - - **BackupTime** (int) - 自动备份开始时间,范围[0-23],默认3点 - - **ChargeType** (str) - 计费模式,Year , Month, Dynamic 默认: Month - - **ConfigId** (str) - 配置ID,目前支持 3.0版本配置ID:"03f58ca9-b64d-4bdd-abc7-c6b9a46fd801",3.2版本配置ID:"3e45ac48-f8a2-a9q2-261d-l342dab130gf", 4.0版本配置ID:"6c9298a3-9d7f-428c-b1d0-e87ab3b8a1ea",默认版本3.0,从备份创建为必传项 - - **CouponId** (str) - 代金券ID - - **MasterGroupId** (str) - Master Redis Group的ID,创建只读Slave时,必须填写 - - **Password** (str) - 初始化密码,需要 base64 编码 - - **Quantity** (int) - 购买时长,默认为1 - - **Size** (int) - 每个节点的内存大小,单位GB,默认1GB,目前仅支持1/2/4/8/16/32,六种 - - **SlaveZone** (str) - 跨机房URedis,slave所在可用区(必须和Zone在同一Region,且不可相同) - - **SubnetId** (str) - - - **Tag** (str) - 业务组名称 - - **VPCId** (str) - - - **Version** (str) - Redis版本信息(详见DescribeURedisVersion返回结果),默认版本3.0 - - **Response** - - - **GroupId** (str) - 创建的组ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateURedisGroupRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateURedisGroup", d, **kwargs) - return apis.CreateURedisGroupResponseSchema().loads(resp) - - def delete_umem_space(self, req=None, **kwargs): - """ DeleteUMemSpace - 删除UMem内存空间 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SpaceId** (str) - (Required) UMem内存空间ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUMemSpaceRequestSchema().dumps(d) - resp = self.invoke("DeleteUMemSpace", d, **kwargs) - return apis.DeleteUMemSpaceResponseSchema().loads(resp) - - def delete_umem_cache_group(self, req=None, **kwargs): - """ DeleteUMemcacheGroup - 删除单机Memcache - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 组ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUMemcacheGroupRequestSchema().dumps(d) - resp = self.invoke("DeleteUMemcacheGroup", d, **kwargs) - return apis.DeleteUMemcacheGroupResponseSchema().loads(resp) - - def delete_uredis_group(self, req=None, **kwargs): - """ DeleteURedisGroup - 删除主备redis - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 组ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteURedisGroupRequestSchema().dumps(d) - resp = self.invoke("DeleteURedisGroup", d, **kwargs) - return apis.DeleteURedisGroupResponseSchema().loads(resp) - - def describe_umem_price(self, req=None, **kwargs): - """ DescribeUMemPrice - 获取UMem实例价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 购买umem大小,单位:GB,范围[1~1024] - - **Type** (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double) - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - Year, Month, Dynamic,Trial 如果不指定,则一次性获取三种计费 - - **Quantity** (int) - 购买UMem的时长,默认值为1 - - **RegionFlag** (bool) - - - **Response** - - - **DataSet** (list) - 见 **UMemPriceSet** 模型定义 - - **Response Model** - - **UMemPriceSet** - - - **ChargeType** (str) - Year, Month, Dynamic,Trial - - **OriginalPrice** (int) - 原价 - - **Price** (int) - 现价,单位: 元,保留小数点后两位有效数字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUMemPriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUMemPrice", d, **kwargs) - return apis.DescribeUMemPriceResponseSchema().loads(resp) - - def describe_umem_space(self, req=None, **kwargs): - """ DescribeUMemSpace - 获取UMem内存空间列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 返回数据长度, 默认为20 - - **Offset** (int) - 数据偏移量, 默认为0 - - **SpaceId** (str) - 内存空间ID (无ID,则获取所有) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UMemSpaceSet** 模型定义 - - **TotalCount** (int) - 根据过滤条件得到的总数 - - **Response Model** - - **UMemSpaceAddressSet** - - - **IP** (str) - UMem实例访问IP - - **Port** (int) - UMem实例访问Port - - **UMemSpaceSet** - - - **Address** (list) - 见 **UMemSpaceAddressSet** 模型定义 - - **ChargeType** (str) - Year, Month, Dynamic, Trial - - **CreateTime** (int) - 创建时间 - - **ExpireTime** (int) - 到期时间 - - **Name** (str) - 内存空间名称 - - **Protocol** (str) - 协议类型: memcache, redis - - **RewriteTime** (int) - 运维时间0 //0点1 //1点依次类推 - - **Size** (int) - 容量单位GB - - **SpaceId** (str) - 内存空间ID - - **State** (str) - Starting:创建中 Running:运行中 Fail:失败 - - **SubnetId** (str) - - - **Tag** (str) - - - **Type** (str) - 空间类型:single(无热备),double(热备) - - **UsedSize** (int) - 使用量单位MB - - **VPCId** (str) - - - **Zone** (str) - 可用区,参见 `可用区列表 `_ - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUMemSpaceRequestSchema().dumps(d) - resp = self.invoke("DescribeUMemSpace", d, **kwargs) - return apis.DescribeUMemSpaceResponseSchema().loads(resp) - - def describe_umem_upgrade_price(self, req=None, **kwargs): - """ DescribeUMemUpgradePrice - 获取UMem升级价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 购买UMem大小,单位:GB - - **SpaceId** (str) - (Required) 需要升级的空间的SpaceId - - **Type** (str) - (Required) 空间类型:single(无热备),double(热备)(默认: double) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 - - **Price** (int) - 价格(兼容老版本) - - **Response Model** - - **PriceDataSet** - - - **CustomPrice** (int) - 用户折后价 - - **PurchaseValue** (int) - 资源有效期 - - **TotalPrice** (int) - 升降级资源的价格 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUMemUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUMemUpgradePrice", d, **kwargs) - return apis.DescribeUMemUpgradePriceResponseSchema().loads(resp) - - def describe_umem_cache_group(self, req=None, **kwargs): - """ DescribeUMemcacheGroup - 显示Memcache - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit - - **Limit** (int) - 分页显示的条目数, 默认值为20 - - **Offset** (int) - 分页显示的起始偏移, 默认值为0 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 见 **UMemcacheGroupSet** 模型定义 - - **TotalCount** (int) - 组的总的节点个数 - - **Response Model** - - **UMemcacheGroupSet** - - - **ChargeType** (str) - 计费类型:Year,Month,Dynamic 默认Dynamic - - **ConfigId** (str) - 节点的配置ID - - **CreateTime** (int) - 创建时间 (UNIX时间戳) - - **ExpireTime** (int) - 过期时间 (UNIX时间戳) - - **GroupId** (str) - 组ID - - **ModifyTime** (int) - 修改时间 (UNIX时间戳) - - **Name** (str) - 组名称 - - **Port** (int) - 节点分配的服务端口 - - **Size** (int) - 容量单位GB - - **State** (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败Restarting // 重启中 - - **SubnetId** (str) - - - **Tag** (str) - 业务组名称 - - **UsedSize** (int) - 使用量单位MB - - **VPCId** (str) - - - **Version** (str) - Memcache版本信息,默认为1.4.31 - - **VirtualIP** (str) - 节点的虚拟IP地址 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUMemcacheGroupRequestSchema().dumps(d) - resp = self.invoke("DescribeUMemcacheGroup", d, **kwargs) - return apis.DescribeUMemcacheGroupResponseSchema().loads(resp) - - def describe_umem_cache_price(self, req=None, **kwargs): - """ DescribeUMemcachePrice - 获取umemcache组价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 容量大小,单位:GB 取值范围[1-32] - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - 计费模式,Year, Month, Dynamic,默认: Dynamic 默认: 获取所有计费模式的价格 - - **Quantity** (int) - 购买umemcache的时长,默认值为1 - - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) - - **Response** - - - **DataSet** (list) - 见 **UMemcachePriceSet** 模型定义 - - **Response Model** - - **UMemcachePriceSet** - - - **ChargeType** (str) - 计费模式,Year, Month, Dynamic - - **OriginalPrice** (int) - 原价 - - **Price** (int) - 总价格,单位: 元,保留小数点后两位有效数字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUMemcachePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUMemcachePrice", d, **kwargs) - return apis.DescribeUMemcachePriceResponseSchema().loads(resp) - - def describe_umem_cache_upgrade_price(self, req=None, **kwargs): - """ DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 需要升级的空间的GroupId,请参考DescribeUMemcacheGroup接口 - - **Size** (int) - (Required) 购买umemcache大小,单位:GB - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 - - **Price** (int) - 价格,单位:元 - - **Response Model** - - **PriceDataSet** - - - **CustomPrice** (int) - 用户折后价 - - **PurchaseValue** (int) - 资源有效期 - - **TotalPrice** (int) - 升降级资源的价格 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeUMemcacheUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeUMemcacheUpgradePrice", d, **kwargs) - return apis.DescribeUMemcacheUpgradePriceResponseSchema().loads(resp) - - def describe_uredis_backup(self, req=None, **kwargs): - """ DescribeURedisBackup - 查询主备redis备份 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - 组的ID - - **Limit** (int) - 分页显示的条目数, 默认值为10 - - **Offset** (int) - 分页显示的起始偏移, 默认值为0 - - **Response** - - - **DataSet** (list) - 见 **URedisBackupSet** 模型定义 - - **TotalCount** (int) - 用户名下总的备份个数 - - **Response Model** - - **URedisBackupSet** - - - **BackupId** (str) - 备份ID - - **BackupName** (str) - 备份的名称 - - **BackupSize** (int) - 备份文件大小, 以字节为单位 - - **BackupTime** (int) - 备份时间 (UNIX时间戳) - - **BackupType** (str) - 备份类型: Manual 手动 Auto 自动 - - **GroupId** (str) - 对应的实例ID - - **GroupName** (str) - 组名称 - - **State** (str) - 备份的状态: Backuping 备份中 Success 备份成功 Error 备份失败 Expired 备份过期 - - **Zone** (str) - 可用区,参见 `可用区列表 `_ - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeURedisBackupRequestSchema().dumps(d) - resp = self.invoke("DescribeURedisBackup", d, **kwargs) - return apis.DescribeURedisBackupResponseSchema().loads(resp) - - def describe_uredis_backup_url(self, req=None, **kwargs): - """ DescribeURedisBackupURL - 获取主备Redis备份下载链接 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BackupId** (str) - (Required) 备份ID - - **GroupId** (str) - 实例名称 - - **RegionFlag** (bool) - 是否是跨机房URedis(默认false) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **BackupPath** (str) - 备份文件公网的地址 - - **BackupURL** (str) - 备份文件公网的地址 - - **InnerBackupPath** (str) - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeURedisBackupURLRequestSchema().dumps(d) - resp = self.invoke("DescribeURedisBackupURL", d, **kwargs) - return apis.DescribeURedisBackupURLResponseSchema().loads(resp) - - def describe_uredis_group(self, req=None, **kwargs): - """ DescribeURedisGroup - 查询主备Redis - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - 组的ID,如果指定则获取描述,否则为列表操 作,需指定Offset/Limit - - **Limit** (int) - 分页显示的条目数, 默认值为20 - - **Offset** (int) - 分页显示的起始偏移, 默认值为0 - - **Zone** (str) - - - **Response** - - - **DataSet** (list) - 见 **URedisGroupSet** 模型定义 - - **TotalCount** (int) - 组的总的节点个数 - - **Response Model** - - **URedisGroupSet** - - - **AutoBackup** (str) - 是否需要自动备份,enable,disable - - **BackupTime** (int) - 组自动备份开始时间,单位小时计,范围[0-23] - - **ChargeType** (str) - 计费类型:Year,Month,Dynamic 默认Dynamic - - **ConfigId** (str) - 节点的配置ID - - **CreateTime** (int) - 创建时间 (UNIX时间戳) - - **ExpireTime** (int) - 过期时间 (UNIX时间戳) - - **GroupId** (str) - 组ID - - **GroupName** (str) - 组名称 - - **HighAvailability** (str) - 是否开启高可用,enable,disable - - **MemorySize** (int) - 容量单位GB - - **ModifyTime** (int) - 修改时间 (UNIX时间戳) - - **Name** (str) - 组名称 - - **Port** (int) - 节点分配的服务端口 - - **Protocol** (str) - 协议 - - **RewriteTime** (int) - 返回运维时间 0 //0点 1 //1点 以此类推 - - **Size** (int) - 容量单位GB - - **SlaveZone** (str) - 跨机房URedis,slave redis所在可用区,参见 `可用区列表 `_ - - **State** (str) - 状态标记 Creating // 初始化中 CreateFail // 创建失败 Deleting // 删除中 DeleteFail // 删除失败 Running // 运行 Resizing // 容量调整中 ResizeFail // 容量调整失败 Configing // 配置中 ConfigFail // 配置失败 - - **SubnetId** (str) - - - **Tag** (str) - 业务组名称 - - **Type** (str) - - - **UsedSize** (int) - 使用量单位MB - - **VPCId** (str) - - - **Version** (str) - Redis版本信息 - - **VirtualIP** (str) - 节点的虚拟IP地址 - - **Zone** (str) - 实例所在可用区,或者master redis所在可用区,参见 `可用区列表 `_ - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeURedisGroupRequestSchema().dumps(d) - resp = self.invoke("DescribeURedisGroup", d, **kwargs) - return apis.DescribeURedisGroupResponseSchema().loads(resp) - - def describe_uredis_price(self, req=None, **kwargs): - """ DescribeURedisPrice - 取uredis价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 量大小,单位:GB 取值范围[1-32] - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - 计费模式,Year, Month, Dynamic;如果不指定,则一次性获取三种计费 - - **ProductType** (str) - 产品类型:MS_Redis(标准主备版),S_Redis(从库),默认为MS_Redis - - **Quantity** (int) - 计费模式为Dynamic时,购买的时长, 默认为1 - - **RegionFlag** (bool) - 是否是跨机房URedis(默认false) - - **Type** (str) - - - **Response** - - - **DataSet** (list) - 见 **URedisPriceSet** 模型定义 - - **Response Model** - - **URedisPriceSet** - - - **ChargeType** (str) - Year, Month, Dynamic,Trial - - **OriginalPrice** (int) - 原价 - - **Price** (int) - 总价格,单位: 元,保留小数点后两位有效数字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeURedisPriceRequestSchema().dumps(d) - resp = self.invoke("DescribeURedisPrice", d, **kwargs) - return apis.DescribeURedisPriceResponseSchema().loads(resp) - - def describe_uredis_upgrade_price(self, req=None, **kwargs): - """ DescribeURedisUpgradePrice - 获取uredis升级价格信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 要升级的空间的GroupId,请参考DescribeURedisGroup接口 - - **Size** (int) - (Required) 购买uredis大小,单位:GB,范围是[1-32] - - **Type** (str) - - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (dict) - 见 **PriceDataSet** 模型定义 - - **Price** (int) - 扩容差价,单位: 元,保留小数点后两位有效数字(兼容老版本) - - **Response Model** - - **PriceDataSet** - - - **CustomPrice** (int) - 用户折后价 - - **PurchaseValue** (int) - 资源有效期 - - **TotalPrice** (int) - 升降级资源的价格 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeURedisUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("DescribeURedisUpgradePrice", d, **kwargs) - return apis.DescribeURedisUpgradePriceResponseSchema().loads(resp) - - def get_umem_space_state(self, req=None, **kwargs): - """ GetUMemSpaceState - 获取UMem内存空间列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SpaceId** (str) - (Required) 内存空间ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **State** (str) - Starting:创建中 Running:运行中 Fail:失败 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUMemSpaceStateRequestSchema().dumps(d) - resp = self.invoke("GetUMemSpaceState", d, **kwargs) - return apis.GetUMemSpaceStateResponseSchema().loads(resp) - - def modify_umem_space_name(self, req=None, **kwargs): - """ ModifyUMemSpaceName - 修改UMem内存空间名称 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) 新的名称,长度(6<=size<=63) - - **SpaceId** (str) - (Required) UMem内存空间ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyUMemSpaceNameRequestSchema().dumps(d) - resp = self.invoke("ModifyUMemSpaceName", d, **kwargs) - return apis.ModifyUMemSpaceNameResponseSchema().loads(resp) - - def modify_uredis_group_name(self, req=None, **kwargs): - """ ModifyURedisGroupName - 修改主备redis名称 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 组的ID - - **Name** (str) - (Required) Redis组名称 (范围[6-63],只能包含英文、数字以及符号-和_) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyURedisGroupNameRequestSchema().dumps(d) - resp = self.invoke("ModifyURedisGroupName", d, **kwargs) - return apis.ModifyURedisGroupNameResponseSchema().loads(resp) - - def resize_udredis_space(self, req=None, **kwargs): - """ ResizeUDredisSpace - 调整内存空间容量 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024) - - **SpaceId** (str) - (Required) 高性能UMem 内存空间Id - - **CouponId** (str) - 使用的代金券Id - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeUDredisSpaceRequestSchema().dumps(d) - resp = self.invoke("ResizeUDredisSpace", d, **kwargs) - return apis.ResizeUDredisSpaceResponseSchema().loads(resp) - - def resize_umem_space(self, req=None, **kwargs): - """ ResizeUMemSpace - 调整内存空间容量 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,<= 1024) - - **SpaceId** (str) - (Required) UMem 内存空间Id - - **ChargeType** (str) - - - **CouponId** (str) - 使用的代金券Id - - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeUMemSpaceRequestSchema().dumps(d) - resp = self.invoke("ResizeUMemSpace", d, **kwargs) - return apis.ResizeUMemSpaceResponseSchema().loads(resp) - - def resize_uredis_group(self, req=None, **kwargs): - """ ResizeURedisGroup - 调整主备redis容量 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 组ID - - **Size** (int) - (Required) 内存大小, 单位:GB (需要大于原size,且小于等于32) 目前仅支持1/2/4/8/16/32 G 六种容量规格 - - **ChargeType** (str) - - - **CouponId** (int) - 代金券ID 请参考DescribeCoupon接口 - - **Type** (str) - 空间类型:single(无热备),double(热备)(默认: double) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeURedisGroupRequestSchema().dumps(d) - resp = self.invoke("ResizeURedisGroup", d, **kwargs) - return apis.ResizeURedisGroupResponseSchema().loads(resp) - - def restart_umem_cache_group(self, req=None, **kwargs): - """ RestartUMemcacheGroup - 重启单机Memcache - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **GroupId** (str) - (Required) 组的ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RestartUMemcacheGroupRequestSchema().dumps(d) - resp = self.invoke("RestartUMemcacheGroup", d, **kwargs) - return apis.RestartUMemcacheGroupResponseSchema().loads(resp) diff --git a/ucloud/services/umem/schemas/__init__.py b/ucloud/services/umem/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/umem/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/umem/schemas/apis.py b/ucloud/services/umem/schemas/apis.py deleted file mode 100644 index bbf178f..0000000 --- a/ucloud/services/umem/schemas/apis.py +++ /dev/null @@ -1,756 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.umem.schemas import models - -""" UMem API Schema -""" -""" -API: CreateUMemSpace - -创建UMem内存空间 -""" - - -class CreateUMemSpaceRequestSchema(schema.RequestSchema): - """ CreateUMemSpace - 创建UMem内存空间 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Name": fields.Str(required=True, dump_to="Name"), - "Password": fields.Base64(required=False, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Protocol": fields.Str(required=False, dump_to="Protocol"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "Type": fields.Str(required=False, dump_to="Type"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUMemSpaceResponseSchema(schema.ResponseSchema): - """ CreateUMemSpace - 创建UMem内存空间 - """ - - fields = {"SpaceId": fields.Str(required=False, load_from="SpaceId")} - - -""" -API: CreateUMemcacheGroup - -创建单机Memcache -""" - - -class CreateUMemcacheGroupRequestSchema(schema.RequestSchema): - """ CreateUMemcacheGroup - 创建单机Memcache - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ConfigId": fields.Str(required=False, dump_to="ConfigId"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Protocol": fields.Str(required=False, dump_to="Protocol"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=False, dump_to="Size"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Version": fields.Str(required=False, dump_to="Version"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUMemcacheGroupResponseSchema(schema.ResponseSchema): - """ CreateUMemcacheGroup - 创建单机Memcache - """ - - fields = {"GroupId": fields.Str(required=False, load_from="GroupId")} - - -""" -API: CreateURedisGroup - -创建主备redis -""" - - -class CreateURedisGroupRequestSchema(schema.RequestSchema): - """ CreateURedisGroup - 创建主备redis - """ - - fields = { - "AutoBackup": fields.Str(required=False, dump_to="AutoBackup"), - "BackupId": fields.Str(required=False, dump_to="BackupId"), - "BackupTime": fields.Int(required=False, dump_to="BackupTime"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ConfigId": fields.Str(required=False, dump_to="ConfigId"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "HighAvailability": fields.Str( - required=True, dump_to="HighAvailability" - ), - "MasterGroupId": fields.Str(required=False, dump_to="MasterGroupId"), - "Name": fields.Str(required=True, dump_to="Name"), - "Password": fields.Base64(required=False, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=False, dump_to="Size"), - "SlaveZone": fields.Str(required=False, dump_to="SlaveZone"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Version": fields.Str(required=False, dump_to="Version"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreateURedisGroupResponseSchema(schema.ResponseSchema): - """ CreateURedisGroup - 创建主备redis - """ - - fields = {"GroupId": fields.Str(required=False, load_from="GroupId")} - - -""" -API: DeleteUMemSpace - -删除UMem内存空间 -""" - - -class DeleteUMemSpaceRequestSchema(schema.RequestSchema): - """ DeleteUMemSpace - 删除UMem内存空间 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SpaceId": fields.Str(required=True, dump_to="SpaceId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DeleteUMemSpaceResponseSchema(schema.ResponseSchema): - """ DeleteUMemSpace - 删除UMem内存空间 - """ - - fields = {} - - -""" -API: DeleteUMemcacheGroup - -删除单机Memcache -""" - - -class DeleteUMemcacheGroupRequestSchema(schema.RequestSchema): - """ DeleteUMemcacheGroup - 删除单机Memcache - """ - - fields = { - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DeleteUMemcacheGroupResponseSchema(schema.ResponseSchema): - """ DeleteUMemcacheGroup - 删除单机Memcache - """ - - fields = {} - - -""" -API: DeleteURedisGroup - -删除主备redis -""" - - -class DeleteURedisGroupRequestSchema(schema.RequestSchema): - """ DeleteURedisGroup - 删除主备redis - """ - - fields = { - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DeleteURedisGroupResponseSchema(schema.ResponseSchema): - """ DeleteURedisGroup - 删除主备redis - """ - - fields = {} - - -""" -API: DescribeUMemPrice - -获取UMem实例价格信息 -""" - - -class DescribeUMemPriceRequestSchema(schema.RequestSchema): - """ DescribeUMemPrice - 获取UMem实例价格信息 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=True, dump_to="Type"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUMemPriceResponseSchema(schema.ResponseSchema): - """ DescribeUMemPrice - 获取UMem实例价格信息 - """ - - fields = { - "DataSet": fields.List( - models.UMemPriceSetSchema(), required=False, load_from="DataSet" - ) - } - - -""" -API: DescribeUMemSpace - -获取UMem内存空间列表 -""" - - -class DescribeUMemSpaceRequestSchema(schema.RequestSchema): - """ DescribeUMemSpace - 获取UMem内存空间列表 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SpaceId": fields.Str(required=False, dump_to="SpaceId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUMemSpaceResponseSchema(schema.ResponseSchema): - """ DescribeUMemSpace - 获取UMem内存空间列表 - """ - - fields = { - "DataSet": fields.List( - models.UMemSpaceSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUMemUpgradePrice - -获取UMem升级价格信息 -""" - - -class DescribeUMemUpgradePriceRequestSchema(schema.RequestSchema): - """ DescribeUMemUpgradePrice - 获取UMem升级价格信息 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "SpaceId": fields.Str(required=True, dump_to="SpaceId"), - "Type": fields.Str(required=True, dump_to="Type"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUMemUpgradePriceResponseSchema(schema.ResponseSchema): - """ DescribeUMemUpgradePrice - 获取UMem升级价格信息 - """ - - fields = { - "DataSet": models.PriceDataSetSchema(), - "Price": fields.Int(required=False, load_from="Price"), - } - - -""" -API: DescribeUMemcacheGroup - -显示Memcache -""" - - -class DescribeUMemcacheGroupRequestSchema(schema.RequestSchema): - """ DescribeUMemcacheGroup - 显示Memcache - """ - - fields = { - "GroupId": fields.Str(required=False, dump_to="GroupId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUMemcacheGroupResponseSchema(schema.ResponseSchema): - """ DescribeUMemcacheGroup - 显示Memcache - """ - - fields = { - "DataSet": fields.List( - models.UMemcacheGroupSetSchema(), - required=False, - load_from="DataSet", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeUMemcachePrice - -获取umemcache组价格信息 -""" - - -class DescribeUMemcachePriceRequestSchema(schema.RequestSchema): - """ DescribeUMemcachePrice - 获取umemcache组价格信息 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=False, dump_to="Type"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeUMemcachePriceResponseSchema(schema.ResponseSchema): - """ DescribeUMemcachePrice - 获取umemcache组价格信息 - """ - - fields = { - "DataSet": fields.List( - models.UMemcachePriceSetSchema(), - required=False, - load_from="DataSet", - ) - } - - -""" -API: DescribeUMemcacheUpgradePrice - -获取umemcache升级价格信息 -""" - - -class DescribeUMemcacheUpgradePriceRequestSchema(schema.RequestSchema): - """ DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息 - """ - - fields = { - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeUMemcacheUpgradePriceResponseSchema(schema.ResponseSchema): - """ DescribeUMemcacheUpgradePrice - 获取umemcache升级价格信息 - """ - - fields = { - "DataSet": models.PriceDataSetSchema(), - "Price": fields.Int(required=False, load_from="Price"), - } - - -""" -API: DescribeURedisBackup - -查询主备redis备份 -""" - - -class DescribeURedisBackupRequestSchema(schema.RequestSchema): - """ DescribeURedisBackup - 查询主备redis备份 - """ - - fields = { - "GroupId": fields.Str(required=False, dump_to="GroupId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DescribeURedisBackupResponseSchema(schema.ResponseSchema): - """ DescribeURedisBackup - 查询主备redis备份 - """ - - fields = { - "DataSet": fields.List( - models.URedisBackupSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeURedisBackupURL - -获取主备Redis备份下载链接 -""" - - -class DescribeURedisBackupURLRequestSchema(schema.RequestSchema): - """ DescribeURedisBackupURL - 获取主备Redis备份下载链接 - """ - - fields = { - "BackupId": fields.Str(required=True, dump_to="BackupId"), - "GroupId": fields.Str(required=False, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeURedisBackupURLResponseSchema(schema.ResponseSchema): - """ DescribeURedisBackupURL - 获取主备Redis备份下载链接 - """ - - fields = { - "BackupPath": fields.Str(required=False, load_from="BackupPath"), - "BackupURL": fields.Str(required=False, load_from="BackupURL"), - "InnerBackupPath": fields.Str( - required=False, load_from="InnerBackupPath" - ), - } - - -""" -API: DescribeURedisGroup - -查询主备Redis -""" - - -class DescribeURedisGroupRequestSchema(schema.RequestSchema): - """ DescribeURedisGroup - 查询主备Redis - """ - - fields = { - "GroupId": fields.Str(required=False, dump_to="GroupId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeURedisGroupResponseSchema(schema.ResponseSchema): - """ DescribeURedisGroup - 查询主备Redis - """ - - fields = { - "DataSet": fields.List( - models.URedisGroupSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeURedisPrice - -取uredis价格信息 -""" - - -class DescribeURedisPriceRequestSchema(schema.RequestSchema): - """ DescribeURedisPrice - 取uredis价格信息 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "ProductType": fields.Str(required=False, dump_to="ProductType"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "RegionFlag": fields.Bool(required=False, dump_to="RegionFlag"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=False, dump_to="Type"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribeURedisPriceResponseSchema(schema.ResponseSchema): - """ DescribeURedisPrice - 取uredis价格信息 - """ - - fields = { - "DataSet": fields.List( - models.URedisPriceSetSchema(), required=False, load_from="DataSet" - ) - } - - -""" -API: DescribeURedisUpgradePrice - -获取uredis升级价格信息 -""" - - -class DescribeURedisUpgradePriceRequestSchema(schema.RequestSchema): - """ DescribeURedisUpgradePrice - 获取uredis升级价格信息 - """ - - fields = { - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=False, dump_to="Type"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeURedisUpgradePriceResponseSchema(schema.ResponseSchema): - """ DescribeURedisUpgradePrice - 获取uredis升级价格信息 - """ - - fields = { - "DataSet": models.PriceDataSetSchema(), - "Price": fields.Int(required=False, load_from="Price"), - } - - -""" -API: GetUMemSpaceState - -获取UMem内存空间列表 -""" - - -class GetUMemSpaceStateRequestSchema(schema.RequestSchema): - """ GetUMemSpaceState - 获取UMem内存空间列表 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SpaceId": fields.Str(required=True, dump_to="SpaceId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class GetUMemSpaceStateResponseSchema(schema.ResponseSchema): - """ GetUMemSpaceState - 获取UMem内存空间列表 - """ - - fields = {"State": fields.Str(required=False, load_from="State")} - - -""" -API: ModifyUMemSpaceName - -修改UMem内存空间名称 -""" - - -class ModifyUMemSpaceNameRequestSchema(schema.RequestSchema): - """ ModifyUMemSpaceName - 修改UMem内存空间名称 - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SpaceId": fields.Str(required=True, dump_to="SpaceId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyUMemSpaceNameResponseSchema(schema.ResponseSchema): - """ ModifyUMemSpaceName - 修改UMem内存空间名称 - """ - - fields = {} - - -""" -API: ModifyURedisGroupName - -修改主备redis名称 -""" - - -class ModifyURedisGroupNameRequestSchema(schema.RequestSchema): - """ ModifyURedisGroupName - 修改主备redis名称 - """ - - fields = { - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyURedisGroupNameResponseSchema(schema.ResponseSchema): - """ ModifyURedisGroupName - 修改主备redis名称 - """ - - fields = {} - - -""" -API: ResizeUDredisSpace - -调整内存空间容量 -""" - - -class ResizeUDredisSpaceRequestSchema(schema.RequestSchema): - """ ResizeUDredisSpace - 调整内存空间容量 - """ - - fields = { - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "SpaceId": fields.Str(required=True, dump_to="SpaceId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ResizeUDredisSpaceResponseSchema(schema.ResponseSchema): - """ ResizeUDredisSpace - 调整内存空间容量 - """ - - fields = {} - - -""" -API: ResizeUMemSpace - -调整内存空间容量 -""" - - -class ResizeUMemSpaceRequestSchema(schema.RequestSchema): - """ ResizeUMemSpace - 调整内存空间容量 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "SpaceId": fields.Str(required=True, dump_to="SpaceId"), - "Type": fields.Str(required=False, dump_to="Type"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ResizeUMemSpaceResponseSchema(schema.ResponseSchema): - """ ResizeUMemSpace - 调整内存空间容量 - """ - - fields = {} - - -""" -API: ResizeURedisGroup - -调整主备redis容量 -""" - - -class ResizeURedisGroupRequestSchema(schema.RequestSchema): - """ ResizeURedisGroup - 调整主备redis容量 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Int(required=False, dump_to="CouponId"), - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Size": fields.Int(required=True, dump_to="Size"), - "Type": fields.Str(required=False, dump_to="Type"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ResizeURedisGroupResponseSchema(schema.ResponseSchema): - """ ResizeURedisGroup - 调整主备redis容量 - """ - - fields = {} - - -""" -API: RestartUMemcacheGroup - -重启单机Memcache -""" - - -class RestartUMemcacheGroupRequestSchema(schema.RequestSchema): - """ RestartUMemcacheGroup - 重启单机Memcache - """ - - fields = { - "GroupId": fields.Str(required=True, dump_to="GroupId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class RestartUMemcacheGroupResponseSchema(schema.ResponseSchema): - """ RestartUMemcacheGroup - 重启单机Memcache - """ - - fields = {} diff --git a/ucloud/services/umem/schemas/models.py b/ucloud/services/umem/schemas/models.py deleted file mode 100644 index 57d7f23..0000000 --- a/ucloud/services/umem/schemas/models.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UMemPriceSetSchema(schema.ResponseSchema): - """ UMemPriceSet - DescribeUMemPrice - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "OriginalPrice": fields.Int(required=False, load_from="OriginalPrice"), - "Price": fields.Int(required=False, load_from="Price"), - } - - -class UMemSpaceAddressSetSchema(schema.ResponseSchema): - """ UMemSpaceAddressSet - DescribeUMemSpace - """ - - fields = { - "IP": fields.Str(required=False, load_from="IP"), - "Port": fields.Int(required=False, load_from="Port"), - } - - -class UMemSpaceSetSchema(schema.ResponseSchema): - """ UMemSpaceSet - DescribeUMemSpace - """ - - fields = { - "Address": fields.List(UMemSpaceAddressSetSchema()), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Protocol": fields.Str(required=False, load_from="Protocol"), - "RewriteTime": fields.Int(required=True, load_from="RewriteTime"), - "Size": fields.Int(required=False, load_from="Size"), - "SpaceId": fields.Str(required=False, load_from="SpaceId"), - "State": fields.Str(required=False, load_from="State"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "Tag": fields.Str(required=True, load_from="Tag"), - "Type": fields.Str(required=False, load_from="Type"), - "UsedSize": fields.Int(required=False, load_from="UsedSize"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class PriceDataSetSchema(schema.ResponseSchema): - """ PriceDataSet - 升降级价格 - """ - - fields = { - "CustomPrice": fields.Int(required=False, load_from="CustomPrice"), - "PurchaseValue": fields.Int(required=False, load_from="PurchaseValue"), - "TotalPrice": fields.Int(required=False, load_from="TotalPrice"), - } - - -class UMemcacheGroupSetSchema(schema.ResponseSchema): - """ UMemcacheGroupSet - DescribeUMemcacheGroup - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "ConfigId": fields.Str(required=False, load_from="ConfigId"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "GroupId": fields.Str(required=False, load_from="GroupId"), - "ModifyTime": fields.Int(required=False, load_from="ModifyTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Port": fields.Int(required=False, load_from="Port"), - "Size": fields.Int(required=False, load_from="Size"), - "State": fields.Str(required=False, load_from="State"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "Tag": fields.Str(required=False, load_from="Tag"), - "UsedSize": fields.Int(required=False, load_from="UsedSize"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "Version": fields.Str(required=False, load_from="Version"), - "VirtualIP": fields.Str(required=False, load_from="VirtualIP"), - } - - -class UMemcachePriceSetSchema(schema.ResponseSchema): - """ UMemcachePriceSet - DescribeUMemcachePrice - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "OriginalPrice": fields.Int(required=False, load_from="OriginalPrice"), - "Price": fields.Int(required=False, load_from="Price"), - } - - -class URedisBackupSetSchema(schema.ResponseSchema): - """ URedisBackupSet - DescribeURedisBackup - """ - - fields = { - "BackupId": fields.Str(required=False, load_from="BackupId"), - "BackupName": fields.Str(required=False, load_from="BackupName"), - "BackupSize": fields.Int(required=False, load_from="BackupSize"), - "BackupTime": fields.Int(required=False, load_from="BackupTime"), - "BackupType": fields.Str(required=False, load_from="BackupType"), - "GroupId": fields.Str(required=False, load_from="GroupId"), - "GroupName": fields.Str(required=False, load_from="GroupName"), - "State": fields.Str(required=False, load_from="State"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class URedisGroupSetSchema(schema.ResponseSchema): - """ URedisGroupSet - DescribeURedisGroup - """ - - fields = { - "AutoBackup": fields.Str(required=False, load_from="AutoBackup"), - "BackupTime": fields.Int(required=False, load_from="BackupTime"), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "ConfigId": fields.Str(required=False, load_from="ConfigId"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "GroupId": fields.Str(required=False, load_from="GroupId"), - "GroupName": fields.Str(required=False, load_from="GroupName"), - "HighAvailability": fields.Str( - required=False, load_from="HighAvailability" - ), - "MemorySize": fields.Int(required=False, load_from="MemorySize"), - "ModifyTime": fields.Int(required=False, load_from="ModifyTime"), - "Name": fields.Str(required=False, load_from="Name"), - "Port": fields.Int(required=False, load_from="Port"), - "Protocol": fields.Str(required=False, load_from="Protocol"), - "RewriteTime": fields.Int(required=True, load_from="RewriteTime"), - "Size": fields.Int(required=False, load_from="Size"), - "SlaveZone": fields.Str(required=False, load_from="SlaveZone"), - "State": fields.Str(required=False, load_from="State"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "Tag": fields.Str(required=False, load_from="Tag"), - "Type": fields.Str(required=False, load_from="Type"), - "UsedSize": fields.Int(required=False, load_from="UsedSize"), - "VPCId": fields.Str(required=True, load_from="VPCId"), - "Version": fields.Str(required=False, load_from="Version"), - "VirtualIP": fields.Str(required=False, load_from="VirtualIP"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class URedisPriceSetSchema(schema.ResponseSchema): - """ URedisPriceSet - 主备Redis价格 - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "OriginalPrice": fields.Int(required=True, load_from="OriginalPrice"), - "Price": fields.Int(required=False, load_from="Price"), - } diff --git a/ucloud/services/unet/__init__.py b/ucloud/services/unet/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/unet/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/unet/client.py b/ucloud/services/unet/client.py deleted file mode 100644 index e925f68..0000000 --- a/ucloud/services/unet/client.py +++ /dev/null @@ -1,932 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.unet.schemas import apis - - -class UNetClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UNetClient, self).__init__(config, transport, middleware, logger) - - def allocate_eip(self, req=None, **kwargs): - """ AllocateEIP - 根据提供信息, 申请弹性IP - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 - - **Region** (str) - (Config) 地域。 - - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 共享带宽模式必须指定0M带宽, 非共享带宽模式必须指定非0Mbps带宽. 各地域非共享带宽的带宽范围如下: 流量计费[1-200],带宽计费[1-800] - - **OperatorName** (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International - - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按需付费(需开启权限); Trial, 试用(需开启权限) 默认为按月付费 - - **CouponId** (str) - 代金券ID, 默认不使用 - - **Name** (str) - 弹性IP的名称, 默认为 "EIP" - - **PayMode** (str) - 弹性IP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; "ShareBandwidth",共享带宽模式. 默认为 "Bandwidth". - - **Quantity** (int) - 购买时长, 默认: 1 - - **Remark** (str) - 弹性IP的备注, 默认为空 - - **ShareBandwidthId** (str) - 绑定的共享带宽Id,仅当PayMode为ShareBandwidth时有效 - - **Tag** (str) - 业务组名称, 默认为 "Default" - - **Response** - - - **EIPSet** (list) - 见 **UnetAllocateEIPSet** 模型定义 - - **Response Model** - - **UnetEIPAddrSet** - - - **IP** (str) - IP地址 - - **OperatorName** (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp - - **UnetAllocateEIPSet** - - - **EIPAddr** (list) - 见 **UnetEIPAddrSet** 模型定义 - - **EIPId** (str) - 申请到的EIP资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AllocateEIPRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("AllocateEIP", d, **kwargs) - return apis.AllocateEIPResponseSchema().loads(resp) - - def allocate_share_bandwidth(self, req=None, **kwargs): - """ AllocateShareBandwidth - 开通共享带宽 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ChargeType** (str) - (Required) 付费方式:Year 按年,Month 按月,Dynamic 按时; - - **Name** (str) - (Required) 共享带宽名字 - - **ShareBandwidth** (int) - (Required) 共享带宽值 - - **BwType** (str) - 共享带宽类型,ipv4或者ipv6,不传默认ipv4 - - **Quantity** (int) - 购买时长 - - **ShareBandwidthGuarantee** (int) - 共享带宽保底值(后付费) - - **Response** - - - **ShareBandwidthId** (str) - 共享带宽资源Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AllocateShareBandwidthRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("AllocateShareBandwidth", d, **kwargs) - return apis.AllocateShareBandwidthResponseSchema().loads(resp) - - def allocate_vip(self, req=None, **kwargs): - """ AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域 - - **SubnetId** (str) - (Required) 子网id - - **VPCId** (str) - (Required) 指定vip所属的VPC - - **BusinessId** (str) - 业务组 - - **Count** (int) - 申请数量,默认: 1 - - **Ip** (str) - 指定ip - - **Name** (str) - vip名,默认为VIP - - **Remark** (str) - 备注 - - **Tag** (str) - 业务组名称,默认为Default - - **Zone** (str) - 可用区 - - **Response** - - - **DataSet** (list) - 申请到的VIP地址 - - **VIPSet** (list) - 见 **VIPSet** 模型定义 - - **Response Model** - - **VIPSet** - - - **VIP** (str) - 虚拟ip - - **VIPId** (str) - 虚拟ip id - - **VPCId** (str) - VPC id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AllocateVIPRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("AllocateVIP", d, **kwargs) - return apis.AllocateVIPResponseSchema().loads(resp) - - def associate_eip_with_share_bandwidth(self, req=None, **kwargs): - """ AssociateEIPWithShareBandwidth - 将EIP加入共享带宽 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 - - **Region** (str) - (Config) 地域。 - - **EIPIds** (list) - (Required) 要加入共享带宽的EIP的资源Id - - **ShareBandwidthId** (str) - (Required) 共享带宽ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AssociateEIPWithShareBandwidthRequestSchema().dumps(d) - resp = self.invoke("AssociateEIPWithShareBandwidth", d, **kwargs) - return apis.AssociateEIPWithShareBandwidthResponseSchema().loads(resp) - - def bind_eip(self, req=None, **kwargs): - """ BindEIP - 将尚未使用的弹性IP绑定到指定的资源 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **EIPId** (str) - (Required) 弹性IP的资源Id - - **ResourceId** (str) - (Required) 弹性IP请求绑定的资源ID - - **ResourceType** (str) - (Required) 弹性IP请求绑定的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:natgw;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni:虚拟网卡。 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.BindEIPRequestSchema().dumps(d) - resp = self.invoke("BindEIP", d, **kwargs) - return apis.BindEIPResponseSchema().loads(resp) - - def create_bandwidth_package(self, req=None, **kwargs): - """ CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 - - **Region** (str) - (Config) 地域 - - **Bandwidth** (int) - (Required) 带宽大小(单位Mbps), 取值范围[2,800] (最大值受地域限制) - - **EIPId** (str) - (Required) 所绑定弹性IP的资源ID - - **TimeRange** (int) - (Required) 带宽包有效时长, 取值范围为大于0的整数, 即该带宽包在EnableTime到 EnableTime+TimeRange时间段内生效 - - **CouponId** (str) - 代金券ID - - **EnableTime** (int) - 生效时间, 格式为 Unix timestamp, 默认为立即开通 - - **Response** - - - **BandwidthPackageId** (str) - 所创建带宽包的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateBandwidthPackageRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateBandwidthPackage", d, **kwargs) - return apis.CreateBandwidthPackageResponseSchema().loads(resp) - - def create_firewall(self, req=None, **kwargs): - """ CreateFirewall - 创建防火墙 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **Name** (str) - (Required) 防火墙名称 - - **Rule** (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注 - - **Remark** (str) - 防火墙描述,默认为空 - - **Tag** (str) - 防火墙业务组,默认为Default - - **Response** - - - **FWId** (str) - 防火墙ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateFirewallRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateFirewall", d, **kwargs) - return apis.CreateFirewallResponseSchema().loads(resp) - - def delete_bandwidth_package(self, req=None, **kwargs): - """ DeleteBandwidthPackage - 删除弹性IP上已附加带宽包 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **BandwidthPackageId** (str) - (Required) 带宽包资源ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteBandwidthPackageRequestSchema().dumps(d) - resp = self.invoke("DeleteBandwidthPackage", d, **kwargs) - return apis.DeleteBandwidthPackageResponseSchema().loads(resp) - - def delete_firewall(self, req=None, **kwargs): - """ DeleteFirewall - 删除防火墙 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **FWId** (str) - (Required) 防火墙资源ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteFirewallRequestSchema().dumps(d) - resp = self.invoke("DeleteFirewall", d, **kwargs) - return apis.DeleteFirewallResponseSchema().loads(resp) - - def describe_bandwidth_package(self, req=None, **kwargs): - """ DescribeBandwidthPackage - 获取某地域下的带宽包信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20 - - **Offset** (int) - 返回数据偏移量, 默认为0 - - **Response** - - - **DataSets** (list) - 见 **UnetBandwidthPackageSet** 模型定义 - - **TotalCount** (int) - 满足条件的带宽包总数 - - **Response Model** - - **EIPAddrSet** - - - **IP** (str) - 弹性IP地址 - - **OperatorName** (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际. - - **UnetBandwidthPackageSet** - - - **Bandwidth** (int) - 带宽包的临时带宽值, 单位Mbps - - **BandwidthPackageId** (str) - 带宽包的资源ID - - **CreateTime** (int) - 创建时间, 格式为 Unix Timestamp - - **DisableTime** (int) - 失效时间, 格式为 Unix Timestamp - - **EIPAddr** (list) - 见 **EIPAddrSet** 模型定义 - - **EIPId** (str) - 带宽包所绑定弹性IP的资源ID - - **EnableTime** (int) - 生效时间, 格式为 Unix Timestamp - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeBandwidthPackageRequestSchema().dumps(d) - resp = self.invoke("DescribeBandwidthPackage", d, **kwargs) - return apis.DescribeBandwidthPackageResponseSchema().loads(resp) - - def describe_bandwidth_usage(self, req=None, **kwargs): - """ DescribeBandwidthUsage - 获取带宽用量信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **EIPIds** (list) - 弹性IP的资源Id. 如果为空, 则返回当前 Region中符合条件的所有EIP的带宽用量, n为自然数 - - **Limit** (int) - 返回数据分页值, 取值范围为 [0,10000000] 之间的整数, 默认为20 - - **OffSet** (int) - 返回数据偏移量, 默认为0 - - **Response** - - - **EIPSet** (list) - 见 **UnetBandwidthUsageEIPSet** 模型定义 - - **TotalCount** (int) - EIPSet中的元素个数 - - **Response Model** - - **UnetBandwidthUsageEIPSet** - - - **CurBandwidth** (float) - 最近5分钟带宽用量, 单位Mbps - - **EIPId** (str) - 弹性IP资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeBandwidthUsageRequestSchema().dumps(d) - resp = self.invoke("DescribeBandwidthUsage", d, **kwargs) - return apis.DescribeBandwidthUsageResponseSchema().loads(resp) - - def describe_eip(self, req=None, **kwargs): - """ DescribeEIP - 获取弹性IP信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **EIPIds** (list) - 弹性IP的资源ID如果为空, 则返回当前 Region中符合条件的的所有EIP - - **Limit** (int) - 数据分页值, 默认为20 - - **Offset** (int) - 数据偏移量, 默认为0 - - **Response** - - - **EIPSet** (list) - 见 **UnetEIPSet** 模型定义 - - **TotalBandwidth** (int) - 满足条件的弹性IP带宽总和, 单位Mbps - - **TotalCount** (int) - 满足条件的弹性IP总数 - - **Response Model** - - **ShareBandwidthSet** - - - **ShareBandwidth** (int) - 共享带宽带宽值 - - **ShareBandwidthId** (str) - 共享带宽ID - - **ShareBandwidthName** (str) - 共享带宽的资源名称 - - **UnetEIPAddrSet** - - - **IP** (str) - IP地址 - - **OperatorName** (str) - 运营商信息如: 电信: Telecom, 联通: Unicom, 国际: International, Duplet: 双线IP(电信+联通), BGP: Bgp - - **UnetEIPResourceSet** - - - **EIPId** (str) - 弹性IP的资源ID - - **ResourceId** (str) - 已绑定资源的资源ID - - **ResourceName** (str) - 已绑定的资源名称 - - **ResourceType** (str) - 已绑定的资源类型, 枚举值为: uhost, 云主机;natgw:NAT网关;ulb:负载均衡器;upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;vpngw:IPSec VPN;ucdr:云灾备;dbaudit:数据库审计,uni:虚拟网卡。 - - **SubResourceId** (str) - 资源绑定的虚拟网卡的ID - - **SubResourceName** (str) - 资源绑定的虚拟网卡的名称 - - **SubResourceType** (str) - 资源绑定的虚拟网卡的类型。uni,虚拟网卡。 - - **UnetEIPSet** - - - **Bandwidth** (int) - 弹性IP的带宽, 单位为Mbps, 当BandwidthType=1时, 该处显示为共享带宽值. 当BandwidthType=0时, 该处显示这个弹性IP的带宽. - - **BandwidthType** (int) - 带宽模式, 枚举值为: 0: 非共享带宽模式, 1: 共享带宽模式 - - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按小时付费; Trial, 试用. 按小时付费和试用这两种付费模式需要开通权限. - - **CreateTime** (int) - 弹性IP的创建时间, 格式为Unix Timestamp - - **EIPAddr** (list) - 见 **UnetEIPAddrSet** 模型定义 - - **EIPId** (str) - 弹性IP的资源ID - - **Expire** (bool) - 弹性IP是否到期 - - **ExpireTime** (int) - 弹性IP的到期时间, 格式为Unix Timestamp - - **Name** (str) - 弹性IP的名称,缺省值为 "EIP" - - **PayMode** (str) - 弹性IP的计费模式, 枚举值为: "Bandwidth", 带宽计费; "Traffic", 流量计费; "ShareBandwidth",共享带宽模式. 默认为 "Bandwidth". - - **Remark** (str) - 弹性IP的备注, 缺省值为 "" - - **Resource** (dict) - 见 **UnetEIPResourceSet** 模型定义 - - **ShareBandwidthSet** (dict) - 见 **ShareBandwidthSet** 模型定义 - - **Status** (str) - 弹性IP的资源绑定状态, 枚举值为: used: 已绑定, free: 未绑定, freeze: 已冻结 - - **Tag** (str) - 弹性IP的业务组标识, 缺省值为 "Default" - - **Weight** (int) - 外网出口权重, 默认为50, 范围[0-100] - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeEIPRequestSchema().dumps(d) - resp = self.invoke("DescribeEIP", d, **kwargs) - return apis.DescribeEIPResponseSchema().loads(resp) - - def describe_firewall(self, req=None, **kwargs): - """ DescribeFirewall - 获取防火墙组信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **FWId** (str) - 防火墙ID,默认为返回所有防火墙 - - **Limit** (int) - 返回数据长度,默认为20,最大10000000 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **ResourceId** (str) - 绑定防火墙组的资源ID - - **ResourceType** (str) - 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:"unatgw",NAT网关; "uhost",云主机; "upm",物理云主机; "hadoophost",hadoop节点; "fortresshost",堡垒机; "udhost",私有专区主机;"udockhost",容器;"dbaudit",数据库审计. - - **Response** - - - **DataSet** (list) - 见 **FirewallDataSet** 模型定义 - - **TotalCount** (int) - - - **Response Model** - - **FirewallRuleSet** - - - **DstPort** (str) - 目标端口 - - **Priority** (str) - 优先级 - - **ProtocolType** (str) - 协议类型 - - **Remark** (str) - 防火墙规则备注 - - **RuleAction** (str) - 防火墙动作 - - **SrcIP** (str) - 源地址 - - **FirewallDataSet** - - - **CreateTime** (int) - 防火墙组创建时间,格式为Unix Timestamp - - **FWId** (str) - 防火墙ID - - **GroupId** (str) - 安全组ID(即将废弃) - - **Name** (str) - 防火墙名称 - - **Remark** (str) - 防火墙备注 - - **ResourceCount** (int) - 防火墙绑定资源数量 - - **Rule** (list) - 见 **FirewallRuleSet** 模型定义 - - **Tag** (str) - 防火墙业务组 - - **Type** (str) - 防火墙组类型,枚举值为: "user defined", 用户自定义防火墙; "recommend web", 默认Web防火墙; "recommend non web", 默认非Web防火墙 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeFirewallRequestSchema().dumps(d) - resp = self.invoke("DescribeFirewall", d, **kwargs) - return apis.DescribeFirewallResponseSchema().loads(resp) - - def describe_firewall_resource(self, req=None, **kwargs): - """ DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **FWId** (str) - (Required) 防火墙ID - - **Limit** (int) - 返回数据长度,默认为20,最大10000000 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **Response** - - - **ResourceSet** (list) - 见 **ResourceSet** 模型定义 - - **TotalCount** (int) - 绑定资源总数 - - **Response Model** - - **ResourceSet** - - - **Name** (str) - 名称 - - **PrivateIP** (str) - 内网IP - - **Remark** (str) - 备注 - - **ResourceID** (str) - 绑定该防火墙的资源id - - **ResourceType** (str) - 绑定资源的资源类型,如"uhost","upm","umem","uhive","uvip","uredis","uhadoop","ufortress","dbaudit","udw","udocker", "umemcache" - - **Status** (int) - 状态 - - **Tag** (str) - 业务组 - - **Zone** (int) - 可用区 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeFirewallResourceRequestSchema().dumps(d) - resp = self.invoke("DescribeFirewallResource", d, **kwargs) - return apis.DescribeFirewallResourceResponseSchema().loads(resp) - - def describe_share_bandwidth(self, req=None, **kwargs): - """ DescribeShareBandwidth - 获取共享带宽信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ShareBandwidthIds** (list) - 需要返回的共享带宽Id - - **Response** - - - **DataSet** (list) - 见 **UnetShareBandwidthSet** 模型定义 - - **TotalCount** (int) - 符合条件的共享带宽总数,大于等于返回DataSet长度 - - **Response Model** - - **EIPAddrSet** - - - **IP** (str) - 弹性IP地址 - - **OperatorName** (str) - 运营商信息, 枚举值为: Telecom 电信; Unicom: 联通; Duplet: 双线; Bgp: BGP; International: 国际. - - **EIPSetData** - - - **Bandwidth** (int) - EIP带宽值 - - **EIPAddr** (list) - 见 **EIPAddrSet** 模型定义 - - **EIPId** (str) - EIP资源Id - - **UnetShareBandwidthSet** - - - **BandwidthGuarantee** (int) - 共享带宽保底值(后付费) - - **ChargeType** (str) - 付费方式, 预付费:Year 按年,Month 按月,Dynamic 按需;后付费:PostPay(按月) - - **CreateTime** (int) - 创建时间, 格式为Unix Timestamp - - **EIPSet** (list) - 见 **EIPSetData** 模型定义 - - **ExpireTime** (int) - 过期时间, 格式为Unix Timestamp - - **Name** (str) - 共享带宽名称 - - **PostPayStartTime** (int) - 共享带宽后付费开始计费时间(后付费) - - **ShareBandwidth** (int) - 共享带宽值(预付费)/共享带宽峰值(后付费), 单位Mbps - - **ShareBandwidthId** (str) - 共享带宽的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeShareBandwidthRequestSchema().dumps(d) - resp = self.invoke("DescribeShareBandwidth", d, **kwargs) - return apis.DescribeShareBandwidthResponseSchema().loads(resp) - - def describe_vip(self, req=None, **kwargs): - """ DescribeVIP - 获取内网VIP详细信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BusinessId** (str) - 业务组 - - **SubnetId** (str) - 子网id,不指定则获取VPCId下的所有vip - - **Tag** (str) - 业务组名称, 默认为 Default - - **VPCId** (str) - vpc的id,指定SubnetId时必填 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **DataSet** (list) - 内网VIP地址列表 - - **TotalCount** (int) - vip数量 - - **VIPSet** (list) - 见 **VIPDetailSet** 模型定义 - - **Response Model** - - **VIPDetailSet** - - - **CreateTime** (int) - 创建时间 - - **Name** (str) - - - **RealIp** (str) - 真实主机ip - - **SubnetId** (str) - 子网id - - **VIP** (str) - 虚拟ip - - **VIPId** (str) - 虚拟ip id - - **VPCId** (str) - VPC id - - **Zone** (str) - 地域 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeVIPRequestSchema().dumps(d) - resp = self.invoke("DescribeVIP", d, **kwargs) - return apis.DescribeVIPResponseSchema().loads(resp) - - def disassociate_eip_with_share_bandwidth(self, req=None, **kwargs): - """ DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 移出共享带宽后,EIP的外网带宽, 单位为Mbps. 各地域带宽范围如下: 流量计费[1-200],带宽计费[1-800] - - **ShareBandwidthId** (str) - (Required) 共享带宽ID - - **EIPIds** (list) - EIP的资源Id;默认移出该共享带宽下所有的EIP - - **PayMode** (str) - 移出共享带宽后,EIP的计费模式. 枚举值: "Traffic", 流量计费; "Bandwidth", 带宽计费; 默认为 "Bandwidth". - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DisassociateEIPWithShareBandwidthRequestSchema().dumps(d) - resp = self.invoke("DisassociateEIPWithShareBandwidth", d, **kwargs) - return apis.DisassociateEIPWithShareBandwidthResponseSchema().loads( - resp - ) - - def get_eip_pay_mode(self, req=None, **kwargs): - """ GetEIPPayMode - 获取弹性IP计费模式 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **EIPId** (list) - (Required) 弹性IP的资源Id - - **Response** - - - **EIPPayMode** (list) - 见 **EIPPayModeSet** 模型定义 - - **Response Model** - - **EIPPayModeSet** - - - **EIPId** (str) - EIP的资源ID - - **EIPPayMode** (str) - EIP的计费模式. 枚举值为:Bandwidth, 带宽计费;Traffic, 流量计费; "ShareBandwidth",共享带宽模式 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetEIPPayModeRequestSchema().dumps(d) - resp = self.invoke("GetEIPPayMode", d, **kwargs) - return apis.GetEIPPayModeResponseSchema().loads(resp) - - def get_eip_price(self, req=None, **kwargs): - """ GetEIPPrice - 获取弹性IP价格 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [0-800] - - **OperatorName** (str) - (Required) 弹性IP的线路如下: 国际: International BGP: Bgp 各地域允许的线路参数如下: cn-sh1: Bgp cn-sh2: Bgp cn-gd: Bgp cn-bj1: Bgp cn-bj2: Bgp hk: International us-ca: International th-bkk: International kr-seoul:International us-ws:International ge-fra:International sg:International tw-kh:International.其他海外线路均为 International,泉州为移动单线cn-qz:ChinaMobile - - **ChargeType** (str) - 付费方式, 枚举值为: Year, 按年付费; Month, 按月付费; Dynamic, 按时付费; 默认为获取三种价格 - - **PayMode** (str) - 弹性IP计费方式r. 枚举值为: Traffic, 流量计费; Bandwidth, 带宽计费; "ShareBandwidth",共享带宽模式. 默认为Bandwidth - - **Quantity** (int) - 购买时长。默认: 1。按小时购买(Dynamic)时无需此参数。 月付时,此参数传0,代表了购买至月末 - - **Response** - - - **PriceSet** (list) - 见 **EIPPriceDetailSet** 模型定义 - - **Response Model** - - **EIPPriceDetailSet** - - - **ChargeType** (str) - 弹性IP付费方式 - - **Price** (float) - 弹性IP价格, 单位"元" - - **PurchaseValue** (int) - 资源有效期, 以Unix Timestamp表示 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetEIPPriceRequestSchema().dumps(d) - resp = self.invoke("GetEIPPrice", d, **kwargs) - return apis.GetEIPPriceResponseSchema().loads(resp) - - def get_eip_upgrade_price(self, req=None, **kwargs): - """ GetEIPUpgradePrice - 获取弹性IP带宽改动价格 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps, 范围 [1-800] - - **EIPId** (str) - (Required) 弹性IP的资源ID - - **Response** - - - **Price** (float) - 调整带宽后的EIP价格, 单位为"元", 如需退费此处为负值 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetEIPUpgradePriceRequestSchema().dumps(d) - resp = self.invoke("GetEIPUpgradePrice", d, **kwargs) - return apis.GetEIPUpgradePriceResponseSchema().loads(resp) - - def grant_firewall(self, req=None, **kwargs): - """ GrantFirewall - 将防火墙应用到资源上 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **FWId** (str) - (Required) 防火墙资源ID - - **ResourceId** (str) - (Required) 所应用资源ID - - **ResourceType** (str) - (Required) 绑定防火墙组的资源类型,默认为全部资源类型。枚举值为:"unatgw",NAT网关; "uhost",云主机; "upm",物理云主机; "hadoophost",hadoop节点; "fortresshost",堡垒机; "udhost",私有专区主机;"udockhost",容器;"dbaudit",数据库审计,”uni“,虚拟网卡。 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GrantFirewallRequestSchema().dumps(d) - resp = self.invoke("GrantFirewall", d, **kwargs) - return apis.GrantFirewallResponseSchema().loads(resp) - - def modify_eip_bandwidth(self, req=None, **kwargs): - """ ModifyEIPBandwidth - 调整弹性IP的外网带宽 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 弹性IP的外网带宽, 单位为Mbps. 各地域的带宽值范围如下:流量计费[1-200],带宽计费[1-800] - - **EIPId** (str) - (Required) 弹性IP的资源ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyEIPBandwidthRequestSchema().dumps(d) - resp = self.invoke("ModifyEIPBandwidth", d, **kwargs) - return apis.ModifyEIPBandwidthResponseSchema().loads(resp) - - def modify_eip_weight(self, req=None, **kwargs): - """ ModifyEIPWeight - 修改弹性IP的外网出口权重 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **EIPId** (str) - (Required) 弹性IP的资源ID - - **Weight** (int) - (Required) 外网出口权重, 范围[0-100] 取值为0时, 该弹性IP不会被使用. 取值为100时, 同主机下只会使用这个弹性IP,其他弹性IP不会被使用 请勿将多个绑定在同一资源的弹性IP设置为相同权重 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyEIPWeightRequestSchema().dumps(d) - resp = self.invoke("ModifyEIPWeight", d, **kwargs) - return apis.ModifyEIPWeightResponseSchema().loads(resp) - - def release_eip(self, req=None, **kwargs): - """ ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态. - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **EIPId** (str) - (Required) 弹性IP的资源ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReleaseEIPRequestSchema().dumps(d) - resp = self.invoke("ReleaseEIP", d, **kwargs) - return apis.ReleaseEIPResponseSchema().loads(resp) - - def release_share_bandwidth(self, req=None, **kwargs): - """ ReleaseShareBandwidth - 关闭共享带宽 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **EIPBandwidth** (int) - (Required) 关闭共享带宽后,各EIP恢复为的带宽值 - - **ShareBandwidthId** (str) - (Required) 共享带宽ID - - **PayMode** (str) - Bandwidth 带宽计费, Traffic 转流量计费 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReleaseShareBandwidthRequestSchema().dumps(d) - resp = self.invoke("ReleaseShareBandwidth", d, **kwargs) - return apis.ReleaseShareBandwidthResponseSchema().loads(resp) - - def release_vip(self, req=None, **kwargs): - """ ReleaseVIP - 释放VIP资源 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写 - - **Region** (str) - (Config) 地域 - - **VIPId** (str) - (Required) 内网VIP的id - - **Zone** (str) - 可用区 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReleaseVIPRequestSchema().dumps(d) - resp = self.invoke("ReleaseVIP", d, **kwargs) - return apis.ReleaseVIPResponseSchema().loads(resp) - - def resize_share_bandwidth(self, req=None, **kwargs): - """ ResizeShareBandwidth - 调整共享带宽的带宽值 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ShareBandwidth** (int) - (Required) 带宽值,单位为Mb,范围 [20-5000] (最大值受地域限制) - - **ShareBandwidthId** (str) - (Required) 共享带宽的Id - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ResizeShareBandwidthRequestSchema().dumps(d) - resp = self.invoke("ResizeShareBandwidth", d, **kwargs) - return apis.ResizeShareBandwidthResponseSchema().loads(resp) - - def set_eip_pay_mode(self, req=None, **kwargs): - """ SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费. - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Bandwidth** (int) - (Required) 调整的目标带宽值, 单位Mbps. 各地域的带宽值范围如下: 流量计费[1-200],其余情况[1-800] - - **EIPId** (str) - (Required) 弹性IP的资源Id - - **PayMode** (str) - (Required) 计费模式. 枚举值:"Traffic", 流量计费模式; "Bandwidth", 带宽计费模式 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.SetEIPPayModeRequestSchema().dumps(d) - resp = self.invoke("SetEIPPayMode", d, **kwargs) - return apis.SetEIPPayModeResponseSchema().loads(resp) - - def un_bind_eip(self, req=None, **kwargs): - """ UnBindEIP - 将弹性IP从资源上解绑 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **EIPId** (str) - (Required) 弹性IP的资源Id - - **ResourceId** (str) - (Required) 弹性IP请求解绑的资源ID - - **ResourceType** (str) - (Required) 弹性IP请求解绑的资源类型, 枚举值为: uhost: 云主机; ulb, 负载均衡器 upm: 物理机; hadoophost: 大数据集群;fortresshost:堡垒机;udockhost:容器;udhost:私有专区主机;natgw:NAT网关;udb:udb;vpngw:ipsec vpn;ucdr:云灾备;dbaudit:数据库审计;uni,虚拟网卡。 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UnBindEIPRequestSchema().dumps(d) - resp = self.invoke("UnBindEIP", d, **kwargs) - return apis.UnBindEIPResponseSchema().loads(resp) - - def update_eip_attribute(self, req=None, **kwargs): - """ UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **EIPId** (str) - (Required) EIP资源ID - - **Name** (str) - 名字(Name Tag Remark都为空则报错) - - **Remark** (str) - 备注 - - **Tag** (str) - 业务 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateEIPAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateEIPAttribute", d, **kwargs) - return apis.UpdateEIPAttributeResponseSchema().loads(resp) - - def update_firewall(self, req=None, **kwargs): - """ UpdateFirewall - 更新防火墙规则 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **FWId** (str) - (Required) 防火墙资源ID - - **Rule** (list) - (Required) 防火墙规则,例如:TCP|22|192.168.1.1/22|DROP|LOW|禁用22端口,第一个参数代表协议:第二个参数代表端口号,第三个参数为ip,第四个参数为ACCEPT(接受)和DROP(拒绝),第五个参数优先级:HIGH(高),MEDIUM(中),LOW(低),第六个参数为该条规则的自定义备注 - - **Response** - - - **FWId** (str) - 防火墙id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateFirewallRequestSchema().dumps(d) - resp = self.invoke("UpdateFirewall", d, **kwargs) - return apis.UpdateFirewallResponseSchema().loads(resp) - - def update_firewall_attribute(self, req=None, **kwargs): - """ UpdateFirewallAttribute - 更新防火墙规则 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **FWId** (str) - (Required) 防火墙资源ID - - **Name** (str) - 防火墙名称,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 - - **Remark** (str) - 防火墙备注,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 - - **Tag** (str) - 防火墙业务组,默认为空,为空则不做修改。Name,Tag,Remark必须填写1个及以上 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateFirewallAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateFirewallAttribute", d, **kwargs) - return apis.UpdateFirewallAttributeResponseSchema().loads(resp) - - _deprecated = { - "allocate_e_ip": "allocate_eip", - "associate_e_ip_with_share_bandwidth": "associate_eip_with_share_bandwidth", - "bind_e_ip": "bind_eip", - "describe_e_ip": "describe_eip", - "disassociate_e_ip_with_share_bandwidth": "disassociate_eip_with_share_bandwidth", - "get_e_ip_pay_mode": "get_eip_pay_mode", - "get_e_ip_price": "get_eip_price", - "get_e_ip_upgrade_price": "get_eip_upgrade_price", - "modify_e_ip_bandwidth": "modify_eip_bandwidth", - "modify_e_ip_weight": "modify_eip_weight", - "release_e_ip": "release_eip", - "set_e_ip_pay_mode": "set_eip_pay_mode", - "un_bind_e_ip": "un_bind_eip", - "update_e_ip_attribute": "update_eip_attribute", - "release_v_ip": "release_vip", - "allocate_v_ip": "allocate_vip", - "describe_v_ip": "describe_vip", - } - - def __getattr__(self, item): - if item in self._deprecated: - instead_of = self._deprecated[item] - msg = "the method {} is deprecated, please use {} instead, this method will remove after 0.5.0 version" - self.logger.warning(msg.format(item, instead_of)) - return getattr(self, self._deprecated[item]) - raise AttributeError( - "'{}' object has no attribute '{}'".format( - self.__class__.__name__, item - ) - ) diff --git a/ucloud/services/unet/schemas/__init__.py b/ucloud/services/unet/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/unet/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/unet/schemas/apis.py b/ucloud/services/unet/schemas/apis.py deleted file mode 100644 index bce0f77..0000000 --- a/ucloud/services/unet/schemas/apis.py +++ /dev/null @@ -1,972 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.unet.schemas import models - -""" UNet API Schema -""" -""" -API: AllocateEIP - -根据提供信息, 申请弹性IP -""" - - -class AllocateEIPRequestSchema(schema.RequestSchema): - """ AllocateEIP - 根据提供信息, 申请弹性IP - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "Name": fields.Str(required=False, dump_to="Name"), - "OperatorName": fields.Str(required=True, dump_to="OperatorName"), - "PayMode": fields.Str(required=False, dump_to="PayMode"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "ShareBandwidthId": fields.Str( - required=False, dump_to="ShareBandwidthId" - ), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class AllocateEIPResponseSchema(schema.ResponseSchema): - """ AllocateEIP - 根据提供信息, 申请弹性IP - """ - - fields = { - "EIPSet": fields.List( - models.UnetAllocateEIPSetSchema(), - required=False, - load_from="EIPSet", - ) - } - - -""" -API: AllocateShareBandwidth - -开通共享带宽 -""" - - -class AllocateShareBandwidthRequestSchema(schema.RequestSchema): - """ AllocateShareBandwidth - 开通共享带宽 - """ - - fields = { - "BwType": fields.Str(required=False, dump_to="BwType"), - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "ShareBandwidth": fields.Int(required=True, dump_to="ShareBandwidth"), - "ShareBandwidthGuarantee": fields.Int( - required=False, dump_to="ShareBandwidthGuarantee" - ), - } - - -class AllocateShareBandwidthResponseSchema(schema.ResponseSchema): - """ AllocateShareBandwidth - 开通共享带宽 - """ - - fields = { - "ShareBandwidthId": fields.Str( - required=False, load_from="ShareBandwidthId" - ) - } - - -""" -API: AllocateVIP - -根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。 -""" - - -class AllocateVIPRequestSchema(schema.RequestSchema): - """ AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。 - """ - - fields = { - "BusinessId": fields.Str(required=False, dump_to="BusinessId"), - "Count": fields.Int(required=False, dump_to="Count"), - "Ip": fields.Str(required=False, dump_to="Ip"), - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "SubnetId": fields.Str(required=True, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class AllocateVIPResponseSchema(schema.ResponseSchema): - """ AllocateVIP - 根据提供信息,申请内网VIP(Virtual IP),多用于高可用程序作为漂移IP。 - """ - - fields = { - "DataSet": fields.List( - fields.Str(), required=False, load_from="DataSet" - ), - "VIPSet": fields.List( - models.VIPSetSchema(), required=False, load_from="VIPSet" - ), - } - - -""" -API: AssociateEIPWithShareBandwidth - -将EIP加入共享带宽 -""" - - -class AssociateEIPWithShareBandwidthRequestSchema(schema.RequestSchema): - """ AssociateEIPWithShareBandwidth - 将EIP加入共享带宽 - """ - - fields = { - "EIPIds": fields.List(fields.Str()), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ShareBandwidthId": fields.Str( - required=True, dump_to="ShareBandwidthId" - ), - } - - -class AssociateEIPWithShareBandwidthResponseSchema(schema.ResponseSchema): - """ AssociateEIPWithShareBandwidth - 将EIP加入共享带宽 - """ - - fields = {} - - -""" -API: BindEIP - -将尚未使用的弹性IP绑定到指定的资源 -""" - - -class BindEIPRequestSchema(schema.RequestSchema): - """ BindEIP - 将尚未使用的弹性IP绑定到指定的资源 - """ - - fields = { - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceId": fields.Str(required=True, dump_to="ResourceId"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - } - - -class BindEIPResponseSchema(schema.ResponseSchema): - """ BindEIP - 将尚未使用的弹性IP绑定到指定的资源 - """ - - fields = {} - - -""" -API: CreateBandwidthPackage - -为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包 -""" - - -class CreateBandwidthPackageRequestSchema(schema.RequestSchema): - """ CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "EnableTime": fields.Int(required=False, dump_to="EnableTime"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "TimeRange": fields.Int(required=True, dump_to="TimeRange"), - } - - -class CreateBandwidthPackageResponseSchema(schema.ResponseSchema): - """ CreateBandwidthPackage - 为非共享带宽模式下, 已绑定资源实例的带宽计费弹性IP附加临时带宽包 - """ - - fields = { - "BandwidthPackageId": fields.Str( - required=False, load_from="BandwidthPackageId" - ) - } - - -""" -API: CreateFirewall - -创建防火墙 -""" - - -class CreateFirewallRequestSchema(schema.RequestSchema): - """ CreateFirewall - 创建防火墙 - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Rule": fields.List(fields.Str()), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class CreateFirewallResponseSchema(schema.ResponseSchema): - """ CreateFirewall - 创建防火墙 - """ - - fields = {"FWId": fields.Str(required=False, load_from="FWId")} - - -""" -API: DeleteBandwidthPackage - -删除弹性IP上已附加带宽包 -""" - - -class DeleteBandwidthPackageRequestSchema(schema.RequestSchema): - """ DeleteBandwidthPackage - 删除弹性IP上已附加带宽包 - """ - - fields = { - "BandwidthPackageId": fields.Str( - required=True, dump_to="BandwidthPackageId" - ), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DeleteBandwidthPackageResponseSchema(schema.ResponseSchema): - """ DeleteBandwidthPackage - 删除弹性IP上已附加带宽包 - """ - - fields = {} - - -""" -API: DeleteFirewall - -删除防火墙 -""" - - -class DeleteFirewallRequestSchema(schema.RequestSchema): - """ DeleteFirewall - 删除防火墙 - """ - - fields = { - "FWId": fields.Str(required=True, dump_to="FWId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DeleteFirewallResponseSchema(schema.ResponseSchema): - """ DeleteFirewall - 删除防火墙 - """ - - fields = {} - - -""" -API: DescribeBandwidthPackage - -获取某地域下的带宽包信息 -""" - - -class DescribeBandwidthPackageRequestSchema(schema.RequestSchema): - """ DescribeBandwidthPackage - 获取某地域下的带宽包信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DescribeBandwidthPackageResponseSchema(schema.ResponseSchema): - """ DescribeBandwidthPackage - 获取某地域下的带宽包信息 - """ - - fields = { - "DataSets": fields.List( - models.UnetBandwidthPackageSetSchema(), - required=False, - load_from="DataSets", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeBandwidthUsage - -获取带宽用量信息 -""" - - -class DescribeBandwidthUsageRequestSchema(schema.RequestSchema): - """ DescribeBandwidthUsage - 获取带宽用量信息 - """ - - fields = { - "EIPIds": fields.List(fields.Str()), - "Limit": fields.Int(required=False, dump_to="Limit"), - "OffSet": fields.Int(required=False, dump_to="OffSet"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DescribeBandwidthUsageResponseSchema(schema.ResponseSchema): - """ DescribeBandwidthUsage - 获取带宽用量信息 - """ - - fields = { - "EIPSet": fields.List( - models.UnetBandwidthUsageEIPSetSchema(), - required=False, - load_from="EIPSet", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeEIP - -获取弹性IP信息 -""" - - -class DescribeEIPRequestSchema(schema.RequestSchema): - """ DescribeEIP - 获取弹性IP信息 - """ - - fields = { - "EIPIds": fields.List(fields.Str()), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DescribeEIPResponseSchema(schema.ResponseSchema): - """ DescribeEIP - 获取弹性IP信息 - """ - - fields = { - "EIPSet": fields.List( - models.UnetEIPSetSchema(), required=False, load_from="EIPSet" - ), - "TotalBandwidth": fields.Int( - required=False, load_from="TotalBandwidth" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeFirewall - -获取防火墙组信息 -""" - - -class DescribeFirewallRequestSchema(schema.RequestSchema): - """ DescribeFirewall - 获取防火墙组信息 - """ - - fields = { - "FWId": fields.Str(required=False, dump_to="FWId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceId": fields.Str(required=False, dump_to="ResourceId"), - "ResourceType": fields.Str(required=False, dump_to="ResourceType"), - } - - -class DescribeFirewallResponseSchema(schema.ResponseSchema): - """ DescribeFirewall - 获取防火墙组信息 - """ - - fields = { - "DataSet": fields.List( - models.FirewallDataSetSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeFirewallResource - -获取防火墙组所绑定资源的外网IP -""" - - -class DescribeFirewallResourceRequestSchema(schema.RequestSchema): - """ DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP - """ - - fields = { - "FWId": fields.Str(required=True, dump_to="FWId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class DescribeFirewallResourceResponseSchema(schema.ResponseSchema): - """ DescribeFirewallResource - 获取防火墙组所绑定资源的外网IP - """ - - fields = { - "ResourceSet": fields.List( - models.ResourceSetSchema(), required=False, load_from="ResourceSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeShareBandwidth - -获取共享带宽信息 -""" - - -class DescribeShareBandwidthRequestSchema(schema.RequestSchema): - """ DescribeShareBandwidth - 获取共享带宽信息 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ShareBandwidthIds": fields.List(fields.Str()), - } - - -class DescribeShareBandwidthResponseSchema(schema.ResponseSchema): - """ DescribeShareBandwidth - 获取共享带宽信息 - """ - - fields = { - "DataSet": fields.List( - models.UnetShareBandwidthSetSchema(), - required=False, - load_from="DataSet", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVIP - -获取内网VIP详细信息 -""" - - -class DescribeVIPRequestSchema(schema.RequestSchema): - """ DescribeVIP - 获取内网VIP详细信息 - """ - - fields = { - "BusinessId": fields.Str(required=False, dump_to="BusinessId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribeVIPResponseSchema(schema.ResponseSchema): - """ DescribeVIP - 获取内网VIP详细信息 - """ - - fields = { - "DataSet": fields.List( - fields.Str(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - "VIPSet": fields.List( - models.VIPDetailSetSchema(), required=False, load_from="VIPSet" - ), - } - - -""" -API: DisassociateEIPWithShareBandwidth - -将EIP移出共享带宽 -""" - - -class DisassociateEIPWithShareBandwidthRequestSchema(schema.RequestSchema): - """ DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "EIPIds": fields.List(fields.Str()), - "PayMode": fields.Str(required=False, dump_to="PayMode"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ShareBandwidthId": fields.Str( - required=True, dump_to="ShareBandwidthId" - ), - } - - -class DisassociateEIPWithShareBandwidthResponseSchema(schema.ResponseSchema): - """ DisassociateEIPWithShareBandwidth - 将EIP移出共享带宽 - """ - - fields = {} - - -""" -API: GetEIPPayMode - -获取弹性IP计费模式 -""" - - -class GetEIPPayModeRequestSchema(schema.RequestSchema): - """ GetEIPPayMode - 获取弹性IP计费模式 - """ - - fields = { - "EIPId": fields.List(fields.Str()), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class GetEIPPayModeResponseSchema(schema.ResponseSchema): - """ GetEIPPayMode - 获取弹性IP计费模式 - """ - - fields = { - "EIPPayMode": fields.List( - models.EIPPayModeSetSchema(), required=False, load_from="EIPPayMode" - ) - } - - -""" -API: GetEIPPrice - -获取弹性IP价格 -""" - - -class GetEIPPriceRequestSchema(schema.RequestSchema): - """ GetEIPPrice - 获取弹性IP价格 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "OperatorName": fields.Str(required=True, dump_to="OperatorName"), - "PayMode": fields.Str(required=False, dump_to="PayMode"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=False, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class GetEIPPriceResponseSchema(schema.ResponseSchema): - """ GetEIPPrice - 获取弹性IP价格 - """ - - fields = { - "PriceSet": fields.List( - models.EIPPriceDetailSetSchema(), - required=False, - load_from="PriceSet", - ) - } - - -""" -API: GetEIPUpgradePrice - -获取弹性IP带宽改动价格 -""" - - -class GetEIPUpgradePriceRequestSchema(schema.RequestSchema): - """ GetEIPUpgradePrice - 获取弹性IP带宽改动价格 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class GetEIPUpgradePriceResponseSchema(schema.ResponseSchema): - """ GetEIPUpgradePrice - 获取弹性IP带宽改动价格 - """ - - fields = {"Price": fields.Float(required=False, load_from="Price")} - - -""" -API: GrantFirewall - -将防火墙应用到资源上 -""" - - -class GrantFirewallRequestSchema(schema.RequestSchema): - """ GrantFirewall - 将防火墙应用到资源上 - """ - - fields = { - "FWId": fields.Str(required=True, dump_to="FWId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceId": fields.Str(required=True, dump_to="ResourceId"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - } - - -class GrantFirewallResponseSchema(schema.ResponseSchema): - """ GrantFirewall - 将防火墙应用到资源上 - """ - - fields = {} - - -""" -API: ModifyEIPBandwidth - -调整弹性IP的外网带宽 -""" - - -class ModifyEIPBandwidthRequestSchema(schema.RequestSchema): - """ ModifyEIPBandwidth - 调整弹性IP的外网带宽 - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class ModifyEIPBandwidthResponseSchema(schema.ResponseSchema): - """ ModifyEIPBandwidth - 调整弹性IP的外网带宽 - """ - - fields = {} - - -""" -API: ModifyEIPWeight - -修改弹性IP的外网出口权重 -""" - - -class ModifyEIPWeightRequestSchema(schema.RequestSchema): - """ ModifyEIPWeight - 修改弹性IP的外网出口权重 - """ - - fields = { - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Weight": fields.Int(required=True, dump_to="Weight"), - } - - -class ModifyEIPWeightResponseSchema(schema.ResponseSchema): - """ ModifyEIPWeight - 修改弹性IP的外网出口权重 - """ - - fields = {} - - -""" -API: ReleaseEIP - -释放弹性IP资源, 所释放弹性IP必须为非绑定状态. -""" - - -class ReleaseEIPRequestSchema(schema.RequestSchema): - """ ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态. - """ - - fields = { - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class ReleaseEIPResponseSchema(schema.ResponseSchema): - """ ReleaseEIP - 释放弹性IP资源, 所释放弹性IP必须为非绑定状态. - """ - - fields = {} - - -""" -API: ReleaseShareBandwidth - -关闭共享带宽 -""" - - -class ReleaseShareBandwidthRequestSchema(schema.RequestSchema): - """ ReleaseShareBandwidth - 关闭共享带宽 - """ - - fields = { - "EIPBandwidth": fields.Int(required=True, dump_to="EIPBandwidth"), - "PayMode": fields.Str(required=False, dump_to="PayMode"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ShareBandwidthId": fields.Str( - required=True, dump_to="ShareBandwidthId" - ), - } - - -class ReleaseShareBandwidthResponseSchema(schema.ResponseSchema): - """ ReleaseShareBandwidth - 关闭共享带宽 - """ - - fields = {} - - -""" -API: ReleaseVIP - -释放VIP资源 -""" - - -class ReleaseVIPRequestSchema(schema.RequestSchema): - """ ReleaseVIP - 释放VIP资源 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VIPId": fields.Str(required=True, dump_to="VIPId"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ReleaseVIPResponseSchema(schema.ResponseSchema): - """ ReleaseVIP - 释放VIP资源 - """ - - fields = {} - - -""" -API: ResizeShareBandwidth - -调整共享带宽的带宽值 -""" - - -class ResizeShareBandwidthRequestSchema(schema.RequestSchema): - """ ResizeShareBandwidth - 调整共享带宽的带宽值 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ShareBandwidth": fields.Int(required=True, dump_to="ShareBandwidth"), - "ShareBandwidthId": fields.Str( - required=True, dump_to="ShareBandwidthId" - ), - } - - -class ResizeShareBandwidthResponseSchema(schema.ResponseSchema): - """ ResizeShareBandwidth - 调整共享带宽的带宽值 - """ - - fields = {} - - -""" -API: SetEIPPayMode - -设置弹性IP计费模式, 切换时会涉及付费/退费. -""" - - -class SetEIPPayModeRequestSchema(schema.RequestSchema): - """ SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费. - """ - - fields = { - "Bandwidth": fields.Int(required=True, dump_to="Bandwidth"), - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "PayMode": fields.Str(required=True, dump_to="PayMode"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - } - - -class SetEIPPayModeResponseSchema(schema.ResponseSchema): - """ SetEIPPayMode - 设置弹性IP计费模式, 切换时会涉及付费/退费. - """ - - fields = {} - - -""" -API: UnBindEIP - -将弹性IP从资源上解绑 -""" - - -class UnBindEIPRequestSchema(schema.RequestSchema): - """ UnBindEIP - 将弹性IP从资源上解绑 - """ - - fields = { - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceId": fields.Str(required=True, dump_to="ResourceId"), - "ResourceType": fields.Str(required=True, dump_to="ResourceType"), - } - - -class UnBindEIPResponseSchema(schema.ResponseSchema): - """ UnBindEIP - 将弹性IP从资源上解绑 - """ - - fields = {} - - -""" -API: UpdateEIPAttribute - -更新弹性IP名称,业务组,备注等属性字段 -""" - - -class UpdateEIPAttributeRequestSchema(schema.RequestSchema): - """ UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段 - """ - - fields = { - "EIPId": fields.Str(required=True, dump_to="EIPId"), - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class UpdateEIPAttributeResponseSchema(schema.ResponseSchema): - """ UpdateEIPAttribute - 更新弹性IP名称,业务组,备注等属性字段 - """ - - fields = {} - - -""" -API: UpdateFirewall - -更新防火墙规则 -""" - - -class UpdateFirewallRequestSchema(schema.RequestSchema): - """ UpdateFirewall - 更新防火墙规则 - """ - - fields = { - "FWId": fields.Str(required=True, dump_to="FWId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Rule": fields.List(fields.Str()), - } - - -class UpdateFirewallResponseSchema(schema.ResponseSchema): - """ UpdateFirewall - 更新防火墙规则 - """ - - fields = {"FWId": fields.Str(required=False, load_from="FWId")} - - -""" -API: UpdateFirewallAttribute - -更新防火墙规则 -""" - - -class UpdateFirewallAttributeRequestSchema(schema.RequestSchema): - """ UpdateFirewallAttribute - 更新防火墙规则 - """ - - fields = { - "FWId": fields.Str(required=True, dump_to="FWId"), - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class UpdateFirewallAttributeResponseSchema(schema.ResponseSchema): - """ UpdateFirewallAttribute - 更新防火墙规则 - """ - - fields = {} diff --git a/ucloud/services/unet/schemas/models.py b/ucloud/services/unet/schemas/models.py deleted file mode 100644 index ff74a6f..0000000 --- a/ucloud/services/unet/schemas/models.py +++ /dev/null @@ -1,252 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class UnetEIPAddrSetSchema(schema.ResponseSchema): - """ UnetEIPAddrSet - DescribeEIP - """ - - fields = { - "IP": fields.Str(required=False, load_from="IP"), - "OperatorName": fields.Str(required=False, load_from="OperatorName"), - } - - -class UnetAllocateEIPSetSchema(schema.ResponseSchema): - """ UnetAllocateEIPSet - AllocateEIP - """ - - fields = { - "EIPAddr": fields.List(UnetEIPAddrSetSchema()), - "EIPId": fields.Str(required=False, load_from="EIPId"), - } - - -class VIPSetSchema(schema.ResponseSchema): - """ VIPSet - VIPSet - """ - - fields = { - "VIP": fields.Str(required=False, load_from="VIP"), - "VIPId": fields.Str(required=False, load_from="VIPId"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - } - - -class EIPAddrSetSchema(schema.ResponseSchema): - """ EIPAddrSet - DescribeShareBandwidth - """ - - fields = { - "IP": fields.Str(required=False, load_from="IP"), - "OperatorName": fields.Str(required=False, load_from="OperatorName"), - } - - -class UnetBandwidthPackageSetSchema(schema.ResponseSchema): - """ UnetBandwidthPackageSet - DescribeBandwidthPackage - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "BandwidthPackageId": fields.Str( - required=False, load_from="BandwidthPackageId" - ), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DisableTime": fields.Int(required=False, load_from="DisableTime"), - "EIPAddr": fields.List(EIPAddrSetSchema()), - "EIPId": fields.Str(required=False, load_from="EIPId"), - "EnableTime": fields.Int(required=False, load_from="EnableTime"), - } - - -class UnetBandwidthUsageEIPSetSchema(schema.ResponseSchema): - """ UnetBandwidthUsageEIPSet - DescribeBandwidthUsage - """ - - fields = { - "CurBandwidth": fields.Float(required=False, load_from="CurBandwidth"), - "EIPId": fields.Str(required=False, load_from="EIPId"), - } - - -class ShareBandwidthSetSchema(schema.ResponseSchema): - """ ShareBandwidthSet - DescribeEIP - """ - - fields = { - "ShareBandwidth": fields.Int( - required=False, load_from="ShareBandwidth" - ), - "ShareBandwidthId": fields.Str( - required=False, load_from="ShareBandwidthId" - ), - "ShareBandwidthName": fields.Str( - required=False, load_from="ShareBandwidthName" - ), - } - - -class UnetEIPResourceSetSchema(schema.ResponseSchema): - """ UnetEIPResourceSet - DescribeEIP - """ - - fields = { - "EIPId": fields.Str(required=False, load_from="EIPId"), - "ResourceId": fields.Str(required=False, load_from="ResourceId"), - "ResourceName": fields.Str(required=False, load_from="ResourceName"), - "ResourceType": fields.Str(required=False, load_from="ResourceType"), - "SubResourceId": fields.Str(required=False, load_from="SubResourceId"), - "SubResourceName": fields.Str( - required=False, load_from="SubResourceName" - ), - "SubResourceType": fields.Str( - required=False, load_from="SubResourceType" - ), - } - - -class UnetEIPSetSchema(schema.ResponseSchema): - """ UnetEIPSet - DescribeEIP - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "BandwidthType": fields.Int(required=False, load_from="BandwidthType"), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "EIPAddr": fields.List(UnetEIPAddrSetSchema()), - "EIPId": fields.Str(required=False, load_from="EIPId"), - "Expire": fields.Bool(required=False, load_from="Expire"), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "Name": fields.Str(required=False, load_from="Name"), - "PayMode": fields.Str(required=False, load_from="PayMode"), - "Remark": fields.Str(required=False, load_from="Remark"), - "Resource": UnetEIPResourceSetSchema(), - "ShareBandwidthSet": ShareBandwidthSetSchema(), - "Status": fields.Str(required=False, load_from="Status"), - "Tag": fields.Str(required=False, load_from="Tag"), - "Weight": fields.Int(required=False, load_from="Weight"), - } - - -class FirewallRuleSetSchema(schema.ResponseSchema): - """ FirewallRuleSet - DescribeFirewall - """ - - fields = { - "DstPort": fields.Str(required=False, load_from="DstPort"), - "Priority": fields.Str(required=False, load_from="Priority"), - "ProtocolType": fields.Str(required=False, load_from="ProtocolType"), - "Remark": fields.Str(required=False, load_from="Remark"), - "RuleAction": fields.Str(required=False, load_from="RuleAction"), - "SrcIP": fields.Str(required=False, load_from="SrcIP"), - } - - -class FirewallDataSetSchema(schema.ResponseSchema): - """ FirewallDataSet - DescribeFirewall - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "FWId": fields.Str(required=True, load_from="FWId"), - "GroupId": fields.Str(required=True, load_from="GroupId"), - "Name": fields.Str(required=False, load_from="Name"), - "Remark": fields.Str(required=False, load_from="Remark"), - "ResourceCount": fields.Int(required=False, load_from="ResourceCount"), - "Rule": fields.List(FirewallRuleSetSchema()), - "Tag": fields.Str(required=False, load_from="Tag"), - "Type": fields.Str(required=False, load_from="Type"), - } - - -class ResourceSetSchema(schema.ResponseSchema): - """ ResourceSet - 资源信息 - """ - - fields = { - "Name": fields.Str(required=False, load_from="Name"), - "PrivateIP": fields.Str(required=False, load_from="PrivateIP"), - "Remark": fields.Str(required=False, load_from="Remark"), - "ResourceID": fields.Str(required=False, load_from="ResourceID"), - "ResourceType": fields.Str(required=False, load_from="ResourceType"), - "Status": fields.Int(required=False, load_from="Status"), - "Tag": fields.Str(required=False, load_from="Tag"), - "Zone": fields.Int(required=False, load_from="Zone"), - } - - -class EIPSetDataSchema(schema.ResponseSchema): - """ EIPSetData - describeShareBandwidth - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "EIPAddr": fields.List(EIPAddrSetSchema()), - "EIPId": fields.Str(required=False, load_from="EIPId"), - } - - -class UnetShareBandwidthSetSchema(schema.ResponseSchema): - """ UnetShareBandwidthSet - DescribeShareBandwidth - """ - - fields = { - "BandwidthGuarantee": fields.Int( - required=False, load_from="BandwidthGuarantee" - ), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "EIPSet": fields.List(EIPSetDataSchema()), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "Name": fields.Str(required=False, load_from="Name"), - "PostPayStartTime": fields.Int( - required=False, load_from="PostPayStartTime" - ), - "ShareBandwidth": fields.Int( - required=False, load_from="ShareBandwidth" - ), - "ShareBandwidthId": fields.Str( - required=False, load_from="ShareBandwidthId" - ), - } - - -class VIPDetailSetSchema(schema.ResponseSchema): - """ VIPDetailSet - VIPDetailSet - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Name": fields.Str(required=False, load_from="Name"), - "RealIp": fields.Str(required=False, load_from="RealIp"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "VIP": fields.Str(required=False, load_from="VIP"), - "VIPId": fields.Str(required=False, load_from="VIPId"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class EIPPayModeSetSchema(schema.ResponseSchema): - """ EIPPayModeSet - GetEIPPayModeEIP - """ - - fields = { - "EIPId": fields.Str(required=False, load_from="EIPId"), - "EIPPayMode": fields.Str(required=False, load_from="EIPPayMode"), - } - - -class EIPPriceDetailSetSchema(schema.ResponseSchema): - """ EIPPriceDetailSet - GetEIPPrice - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "Price": fields.Float(required=False, load_from="Price"), - "PurchaseValue": fields.Int(required=False, load_from="PurchaseValue"), - } diff --git a/ucloud/services/uphost/__init__.py b/ucloud/services/uphost/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uphost/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uphost/client.py b/ucloud/services/uphost/client.py deleted file mode 100644 index 20358e9..0000000 --- a/ucloud/services/uphost/client.py +++ /dev/null @@ -1,356 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.uphost.schemas import apis - - -class UPHostClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(UPHostClient, self).__init__( - config, transport, middleware, logger - ) - - def create_phost(self, req=None, **kwargs): - """ CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ImageId** (str) - (Required) 镜像ID。 请通过 [DescribePHostImage]获取 - - **Password** (str) - (Required) 密码(密码需使用base64进行编码) - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ChargeType** (str) - 计费模式,枚举值为:year, 按年付费; month,按月付费;dynamic,按需付费,(需开启权限) trial, 试用(需开启权限)。默认为按月付费 - - **Cluster** (str) - 网络环境,可选千兆:1G ,万兆:10G, 默认1G - - **Count** (int) - 购买数量,默认为1,(暂不支持) - - **CouponId** (str) - 代金券 - - **Name** (str) - 物理机名称,默认为phost - - **Quantity** (str) - 购买时长,默认为1,范围[1-10] - - **Raid** (str) - Raid配置,默认Raid10 支持:Raid0、Raid1、Raid5、Raid10,NoRaid - - **Remark** (str) - 物理机备注,默认为空 - - **SecurityGroupId** (str) - 防火墙Id,默认:Web推荐防火墙。如何查询SecurityGroupId请参见 `DescribeSecurityGroup `_ - - **SubnetId** (str) - 子网ID,不填为默认,VPC2.0下需要填写此字段。 - - **Tag** (str) - 业务组,默认为default - - **Type** (str) - 物理机类型,默认为:db-2(基础型-SAS-V3) - - **VPCId** (str) - VPC ID,不填为默认,VPC2.0下需要填写此字段。 - - **Response** - - - **PHostId** (list) - PHost的资源ID数组 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreatePHostRequestSchema().dumps(d) - resp = self.invoke("CreatePHost", d, **kwargs) - return apis.CreatePHostResponseSchema().loads(resp) - - def describe_phost(self, req=None, **kwargs): - """ DescribePHost - 获取物理机详细信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - 返回数据长度,默认为20 - - **Offset** (int) - 数据偏移量,默认为0 - - **PHostId** (list) - PHost资源ID,若为空,则返回当前Region所有PHost。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PHostSet** (list) - 见 **PHostSet** 模型定义 - - **TotalCount** (int) - 满足条件的PHost总数 - - **Response Model** - - **PHostCPUSet** - - - **CoreCount** (int) - CPU核数 - - **Count** (int) - CPU个数 - - **Frequence** (float) - CPU主频 - - **Model** (str) - CPU型号 - - **PHostDiskSet** - - - **Count** (int) - 磁盘数量 - - **IOCap** (int) - 磁盘IO性能,单位MB/s(待废弃) - - **Name** (str) - 磁盘名称,sys/data - - **Space** (int) - 单盘大小,单位GB - - **Type** (str) - 磁盘属性 - - **PHostIPSet** - - - **Bandwidth** (int) - IP对应带宽,单位Mb,内网IP不显示带宽信息 - - **IPAddr** (str) - IP地址, - - **IPId** (str) - IP资源ID(内网IP无资源ID)(待废弃) - - **MACAddr** (str) - MAC地址 - - **OperatorName** (str) - 国际: Internation, BGP: BGP, 内网: Private - - **SubnetId** (str) - 子网ID - - **VPCId** (str) - VPC ID - - **PHostSet** - - - **AutoRenew** (str) - 自动续费 - - **CPUSet** (dict) - 见 **PHostCPUSet** 模型定义 - - **ChargeType** (str) - 计费模式,枚举值为: Year,按年付费; Month,按月付费; Dynamic,按需付费(需开启权限); Trial,试用(需开启权限)默认为月付 - - **Cluster** (str) - 网络环境。枚举值:千兆:1G ,万兆:10G - - **Components** (str) - 组件信息(暂不支持) - - **CreateTime** (int) - 创建时间 - - **DiskSet** (list) - 见 **PHostDiskSet** 模型定义 - - **ExpireTime** (int) - 到期时间 - - **IPSet** (list) - 见 **PHostIPSet** 模型定义 - - **ImageName** (str) - 镜像名称 - - **IsSupportKVM** (str) - 是否支持紧急登录 - - **Memory** (int) - 内存大小,单位:MB - - **Name** (str) - 物理机名称 - - **OSType** (str) - 操作系统类型 - - **OSname** (str) - 操作系统名称 - - **PHostId** (str) - PHost资源ID - - **PHostType** (str) - 物理机类型,参见DescribePHostMachineType返回值 - - **PMStatus** (str) - 物理云主机状态。枚举值:\\ > 初始化:Initializing; \\ > 启动中:Starting; \\ > 运行中:Running;\\ > 关机中:Stopping; \\ > 安装失败:InstallFailed; \\ > 重启中:Rebooting;\\ > 关机:Stopped; - - **PowerState** (str) - 电源状态,on 或 off - - **RaidSupported** (str) - 是否支持Raid。枚举值:Yes:支持;No:不支持。 - - **Remark** (str) - 物理机备注 - - **SN** (str) - 物理机序列号 - - **Tag** (str) - 业务组 - - **Zone** (str) - 可用区,参见 `可用区列表 `_ - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribePHostRequestSchema().dumps(d) - resp = self.invoke("DescribePHost", d, **kwargs) - return apis.DescribePHostResponseSchema().loads(resp) - - def describe_phost_image(self, req=None, **kwargs): - """ DescribePHostImage - 获取物理云主机镜像列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ImageId** (list) - 镜像ID - - **ImageType** (str) - 镜像类别,枚举为:Base,标准镜像;默认为标准镜像。 - - **Limit** (int) - 返回数据长度,默认为20 - - **Offset** (int) - 数据偏移量,默认为0 - - **Response** - - - **ImageSet** (list) - 见 **PHostImageSet** 模型定义 - - **TotalCount** (int) - 满足条件的镜像总数 - - **Response Model** - - **PHostImageSet** - - - **ImageId** (str) - 镜像ID - - **ImageName** (str) - 镜像名称 - - **OsName** (str) - 操作系统名称 - - **OsType** (str) - 操作系统类型 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribePHostImageRequestSchema().dumps(d) - resp = self.invoke("DescribePHostImage", d, **kwargs) - return apis.DescribePHostImageResponseSchema().loads(resp) - - def describe_phost_tags(self, req=None, **kwargs): - """ DescribePHostTags - 获取物理机tag列表(业务组) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **TagSet** (list) - 见 **PHostTagSet** 模型定义 - - **TotalCount** (int) - Tag的个数 - - **Response Model** - - **PHostTagSet** - - - **Tag** (str) - 业务组名称 - - **TotalCount** (int) - 该业务组中包含的主机个数 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribePHostTagsRequestSchema().dumps(d) - resp = self.invoke("DescribePHostTags", d, **kwargs) - return apis.DescribePHostTagsResponseSchema().loads(resp) - - def get_phost_price(self, req=None, **kwargs): - """ GetPHostPrice - 获取物理机价格列表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **ChargeType** (str) - (Required) 计费模式,枚举值为: Year/Month/Trial/Dynamic - - **Count** (int) - (Required) 购买数量,范围[1-5] - - **Quantity** (int) - (Required) 购买时长,1-10个月或1-10年 - - **Cluster** (str) - 网络环境,可选千兆:1G ,万兆:10G - - **Type** (str) - 默认为:DB(数据库型) - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PriceSet** (list) - 见 **PHostPriceSet** 模型定义 - - **Response Model** - - **PHostPriceSet** - - - **ChargeType** (str) - Year/Month/Trial/Dynamic - - **Price** (float) - 价格, 单位:元, 保留小数点后两位有效数字 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetPHostPriceRequestSchema().dumps(d) - resp = self.invoke("GetPHostPrice", d, **kwargs) - return apis.GetPHostPriceResponseSchema().loads(resp) - - def modify_phost_info(self, req=None, **kwargs): - """ ModifyPHostInfo - 更改物理机信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PHostId** (str) - (Required) 物理机资源ID - - **Name** (str) - 物理机名称,默认不更改 - - **Remark** (str) - 物理机备注,默认不更改 - - **Tag** (str) - 业务组,默认不更改 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PHostId** (str) - PHost 的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyPHostInfoRequestSchema().dumps(d) - resp = self.invoke("ModifyPHostInfo", d, **kwargs) - return apis.ModifyPHostInfoResponseSchema().loads(resp) - - def poweroff_phost(self, req=None, **kwargs): - """ PoweroffPHost - 断电物理云主机 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PHostId** (str) - (Required) PHost资源ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PHostId** (str) - PHost 的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.PoweroffPHostRequestSchema().dumps(d) - resp = self.invoke("PoweroffPHost", d, **kwargs) - return apis.PoweroffPHostResponseSchema().loads(resp) - - def reboot_phost(self, req=None, **kwargs): - """ RebootPHost - 重启物理机 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PHostId** (str) - (Required) PHost资源ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PHostId** (str) - PHost 的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.RebootPHostRequestSchema().dumps(d) - resp = self.invoke("RebootPHost", d, **kwargs) - return apis.RebootPHostResponseSchema().loads(resp) - - def reinstall_phost(self, req=None, **kwargs): - """ ReinstallPHost - 重装物理机操作系统 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PHostId** (str) - (Required) PHost资源ID - - **Password** (str) - (Required) 密码 - - **Zone** (str) - (Required) 可用区。参见 `可用区列表 `_ - - **ImageId** (str) - 镜像Id,参考镜像列表,默认使用原镜像 - - **Name** (str) - 物理机名称,默认不更改 - - **Raid** (str) - 不保留数据盘重装,可选Raid - - **Remark** (str) - 物理机备注,默认为不更改。 - - **ReserveDisk** (str) - 是否保留数据盘,保留:Yes,不报留:No, 默认:Yes - - **Tag** (str) - 业务组,默认不更改。 - - **Response** - - - **PHostId** (str) - PHost 的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ReinstallPHostRequestSchema().dumps(d) - resp = self.invoke("ReinstallPHost", d, **kwargs) - return apis.ReinstallPHostResponseSchema().loads(resp) - - def start_phost(self, req=None, **kwargs): - """ StartPHost - 启动物理机 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PHostId** (str) - (Required) PHost资源ID - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PHostId** (str) - PHost 的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.StartPHostRequestSchema().dumps(d) - resp = self.invoke("StartPHost", d, **kwargs) - return apis.StartPHostResponseSchema().loads(resp) - - def terminate_phost(self, req=None, **kwargs): - """ TerminatePHost - 删除物理云主机 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PHostId** (str) - (Required) PHost资源ID - - **ReleaseEIP** (bool) - 是否释放绑定的EIP。true: 解绑EIP后,并释放;其他值或不填:解绑EIP。 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **PHostId** (str) - PHost 的资源ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.TerminatePHostRequestSchema().dumps(d) - resp = self.invoke("TerminatePHost", d, **kwargs) - return apis.TerminatePHostResponseSchema().loads(resp) diff --git a/ucloud/services/uphost/schemas/__init__.py b/ucloud/services/uphost/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/uphost/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/uphost/schemas/apis.py b/ucloud/services/uphost/schemas/apis.py deleted file mode 100644 index 7bea31b..0000000 --- a/ucloud/services/uphost/schemas/apis.py +++ /dev/null @@ -1,350 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.uphost.schemas import models - -""" UPHost API Schema -""" -""" -API: CreatePHost - -指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。 -""" - - -class CreatePHostRequestSchema(schema.RequestSchema): - """ CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。 - """ - - fields = { - "ChargeType": fields.Str(required=False, dump_to="ChargeType"), - "Cluster": fields.Str(required=False, dump_to="Cluster"), - "Count": fields.Int(required=False, dump_to="Count"), - "CouponId": fields.Str(required=False, dump_to="CouponId"), - "ImageId": fields.Str(required=True, dump_to="ImageId"), - "Name": fields.Str(required=False, dump_to="Name"), - "Password": fields.Str(required=True, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Str(required=False, dump_to="Quantity"), - "Raid": fields.Str(required=False, dump_to="Raid"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "SecurityGroupId": fields.Str( - required=False, dump_to="SecurityGroupId" - ), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "Type": fields.Str(required=False, dump_to="Type"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class CreatePHostResponseSchema(schema.ResponseSchema): - """ CreatePHost - 指定数据中心,根据资源使用量创建指定数量的UPHost物理云主机实例。 - """ - - fields = { - "PHostId": fields.List( - fields.Str(), required=False, load_from="PHostId" - ) - } - - -""" -API: DescribePHost - -获取物理机详细信息 -""" - - -class DescribePHostRequestSchema(schema.RequestSchema): - """ DescribePHost - 获取物理机详细信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "PHostId": fields.List(fields.Str()), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribePHostResponseSchema(schema.ResponseSchema): - """ DescribePHost - 获取物理机详细信息 - """ - - fields = { - "PHostSet": fields.List( - models.PHostSetSchema(), required=False, load_from="PHostSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribePHostImage - -获取物理云主机镜像列表 -""" - - -class DescribePHostImageRequestSchema(schema.RequestSchema): - """ DescribePHostImage - 获取物理云主机镜像列表 - """ - - fields = { - "ImageId": fields.List(fields.Str()), - "ImageType": fields.Str(required=False, dump_to="ImageType"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class DescribePHostImageResponseSchema(schema.ResponseSchema): - """ DescribePHostImage - 获取物理云主机镜像列表 - """ - - fields = { - "ImageSet": fields.List( - models.PHostImageSetSchema(), required=False, load_from="ImageSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribePHostTags - -获取物理机tag列表(业务组) -""" - - -class DescribePHostTagsRequestSchema(schema.RequestSchema): - """ DescribePHostTags - 获取物理机tag列表(业务组) - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DescribePHostTagsResponseSchema(schema.ResponseSchema): - """ DescribePHostTags - 获取物理机tag列表(业务组) - """ - - fields = { - "TagSet": fields.List( - models.PHostTagSetSchema(), required=False, load_from="TagSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: GetPHostPrice - -获取物理机价格列表 -""" - - -class GetPHostPriceRequestSchema(schema.RequestSchema): - """ GetPHostPrice - 获取物理机价格列表 - """ - - fields = { - "ChargeType": fields.Str(required=True, dump_to="ChargeType"), - "Cluster": fields.Str(required=False, dump_to="Cluster"), - "Count": fields.Int(required=True, dump_to="Count"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Quantity": fields.Int(required=True, dump_to="Quantity"), - "Region": fields.Str(required=True, dump_to="Region"), - "Type": fields.Str(required=False, dump_to="Type"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class GetPHostPriceResponseSchema(schema.ResponseSchema): - """ GetPHostPrice - 获取物理机价格列表 - """ - - fields = { - "PriceSet": fields.List( - models.PHostPriceSetSchema(), required=False, load_from="PriceSet" - ) - } - - -""" -API: ModifyPHostInfo - -更改物理机信息 -""" - - -class ModifyPHostInfoRequestSchema(schema.RequestSchema): - """ ModifyPHostInfo - 更改物理机信息 - """ - - fields = { - "Name": fields.Str(required=False, dump_to="Name"), - "PHostId": fields.Str(required=True, dump_to="PHostId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class ModifyPHostInfoResponseSchema(schema.ResponseSchema): - """ ModifyPHostInfo - 更改物理机信息 - """ - - fields = {"PHostId": fields.Str(required=False, load_from="PHostId")} - - -""" -API: PoweroffPHost - -断电物理云主机 -""" - - -class PoweroffPHostRequestSchema(schema.RequestSchema): - """ PoweroffPHost - 断电物理云主机 - """ - - fields = { - "PHostId": fields.Str(required=True, dump_to="PHostId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class PoweroffPHostResponseSchema(schema.ResponseSchema): - """ PoweroffPHost - 断电物理云主机 - """ - - fields = {"PHostId": fields.Str(required=False, load_from="PHostId")} - - -""" -API: RebootPHost - -重启物理机 -""" - - -class RebootPHostRequestSchema(schema.RequestSchema): - """ RebootPHost - 重启物理机 - """ - - fields = { - "PHostId": fields.Str(required=True, dump_to="PHostId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class RebootPHostResponseSchema(schema.ResponseSchema): - """ RebootPHost - 重启物理机 - """ - - fields = {"PHostId": fields.Str(required=False, load_from="PHostId")} - - -""" -API: ReinstallPHost - -重装物理机操作系统 -""" - - -class ReinstallPHostRequestSchema(schema.RequestSchema): - """ ReinstallPHost - 重装物理机操作系统 - """ - - fields = { - "ImageId": fields.Str(required=False, dump_to="ImageId"), - "Name": fields.Str(required=False, dump_to="Name"), - "PHostId": fields.Str(required=True, dump_to="PHostId"), - "Password": fields.Str(required=True, dump_to="Password"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Raid": fields.Str(required=False, dump_to="Raid"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "ReserveDisk": fields.Str(required=False, dump_to="ReserveDisk"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "Zone": fields.Str(required=True, dump_to="Zone"), - } - - -class ReinstallPHostResponseSchema(schema.ResponseSchema): - """ ReinstallPHost - 重装物理机操作系统 - """ - - fields = {"PHostId": fields.Str(required=False, load_from="PHostId")} - - -""" -API: StartPHost - -启动物理机 -""" - - -class StartPHostRequestSchema(schema.RequestSchema): - """ StartPHost - 启动物理机 - """ - - fields = { - "PHostId": fields.Str(required=True, dump_to="PHostId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class StartPHostResponseSchema(schema.ResponseSchema): - """ StartPHost - 启动物理机 - """ - - fields = {"PHostId": fields.Str(required=False, load_from="PHostId")} - - -""" -API: TerminatePHost - -删除物理云主机 -""" - - -class TerminatePHostRequestSchema(schema.RequestSchema): - """ TerminatePHost - 删除物理云主机 - """ - - fields = { - "PHostId": fields.Str(required=True, dump_to="PHostId"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ReleaseEIP": fields.Bool(required=False, dump_to="ReleaseEIP"), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class TerminatePHostResponseSchema(schema.ResponseSchema): - """ TerminatePHost - 删除物理云主机 - """ - - fields = {"PHostId": fields.Str(required=False, load_from="PHostId")} diff --git a/ucloud/services/uphost/schemas/models.py b/ucloud/services/uphost/schemas/models.py deleted file mode 100644 index a608c10..0000000 --- a/ucloud/services/uphost/schemas/models.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class PHostIPSetSchema(schema.ResponseSchema): - """ PHostIPSet - DescribePHost - """ - - fields = { - "Bandwidth": fields.Int(required=False, load_from="Bandwidth"), - "IPAddr": fields.Str(required=False, load_from="IPAddr"), - "IPId": fields.Str(required=False, load_from="IPId"), - "MACAddr": fields.Str(required=False, load_from="MACAddr"), - "OperatorName": fields.Str(required=False, load_from="OperatorName"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - } - - -class PHostDiskSetSchema(schema.ResponseSchema): - """ PHostDiskSet - GetPHostTypeInfo - """ - - fields = { - "Count": fields.Int(required=False, load_from="Count"), - "IOCap": fields.Int(required=False, load_from="IOCap"), - "Name": fields.Str(required=False, load_from="Name"), - "Space": fields.Int(required=False, load_from="Space"), - "Type": fields.Str(required=False, load_from="Type"), - } - - -class PHostCPUSetSchema(schema.ResponseSchema): - """ PHostCPUSet - DescribePHost - """ - - fields = { - "CoreCount": fields.Int(required=False, load_from="CoreCount"), - "Count": fields.Int(required=False, load_from="Count"), - "Frequence": fields.Float(required=False, load_from="Frequence"), - "Model": fields.Str(required=False, load_from="Model"), - } - - -class PHostSetSchema(schema.ResponseSchema): - """ PHostSet - DescribePHost - """ - - fields = { - "AutoRenew": fields.Str(required=False, load_from="AutoRenew"), - "CPUSet": PHostCPUSetSchema(), - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "Cluster": fields.Str(required=False, load_from="Cluster"), - "Components": fields.Str(required=False, load_from="Components"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "DiskSet": fields.List(PHostDiskSetSchema()), - "ExpireTime": fields.Int(required=False, load_from="ExpireTime"), - "IPSet": fields.List(PHostIPSetSchema()), - "ImageName": fields.Str(required=False, load_from="ImageName"), - "IsSupportKVM": fields.Str(required=False, load_from="IsSupportKVM"), - "Memory": fields.Int(required=False, load_from="Memory"), - "Name": fields.Str(required=False, load_from="Name"), - "OSType": fields.Str(required=False, load_from="OSType"), - "OSname": fields.Str(required=False, load_from="OSname"), - "PHostId": fields.Str(required=False, load_from="PHostId"), - "PHostType": fields.Str(required=False, load_from="PHostType"), - "PMStatus": fields.Str(required=False, load_from="PMStatus"), - "PowerState": fields.Str(required=False, load_from="PowerState"), - "RaidSupported": fields.Str(required=False, load_from="RaidSupported"), - "Remark": fields.Str(required=False, load_from="Remark"), - "SN": fields.Str(required=False, load_from="SN"), - "Tag": fields.Str(required=False, load_from="Tag"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class PHostImageSetSchema(schema.ResponseSchema): - """ PHostImageSet - DescribePHostImage - """ - - fields = { - "ImageId": fields.Str(required=False, load_from="ImageId"), - "ImageName": fields.Str(required=False, load_from="ImageName"), - "OsName": fields.Str(required=False, load_from="OsName"), - "OsType": fields.Str(required=False, load_from="OsType"), - } - - -class PHostTagSetSchema(schema.ResponseSchema): - """ PHostTagSet - DescribePHostTags - """ - - fields = { - "Tag": fields.Str(required=False, load_from="Tag"), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -class PHostPriceSetSchema(schema.ResponseSchema): - """ PHostPriceSet - GetPHostPrice - """ - - fields = { - "ChargeType": fields.Str(required=False, load_from="ChargeType"), - "Price": fields.Float(required=False, load_from="Price"), - } diff --git a/ucloud/services/usms/__init__.py b/ucloud/services/usms/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/usms/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/usms/client.py b/ucloud/services/usms/client.py deleted file mode 100644 index 19f8c88..0000000 --- a/ucloud/services/usms/client.py +++ /dev/null @@ -1,284 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.usms.schemas import apis - - -class USMSClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(USMSClient, self).__init__(config, transport, middleware, logger) - - def create_usms_signature(self, req=None, **kwargs): - """ CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **CertificateType** (int) - (Required) 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书; - - **Description** (str) - (Required) 短信签名申请原因 - - **File** (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB - - **SigContent** (str) - (Required) 短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加 - - **SigPurpose** (int) - (Required) 签名用途,0-自用,1-他用; - - **SigType** (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称; - - **ProxyFile** (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项; - - **Response** - - - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 - - **SigContent** (str) - 短信签名名称 - - **SigId** (str) - 短信签名ID(短信签名申请时的工单ID) - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.CreateUSMSSignatureRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUSMSSignature", d, **kwargs) - return apis.CreateUSMSSignatureResponseSchema().loads(resp) - - def create_usms_template(self, req=None, **kwargs): - """ CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Purpose** (int) - (Required) 短信模板用途类型:1-验证码类短信模板;2-系统通知类短信模板;3-会员推广类短信模板; - - **Template** (str) - (Required) 短信模板内容,说明如下:字数不超过500,每个中文、符号、英文、数组等都计为一个字;模板中的变量填写格式:{N},其中N为大于1的整数,有多个参数时,建议N从1开始顺次,例如:{1}、{2}等;短信模板禁止仅包括变量的情况; - - **TemplateName** (str) - (Required) 短信模板名称,不超过32个字符,每个中文、符号、英文、数字等都计为1个字。 - - **Remark** (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。 - - **UnsubscribeInfo** (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 - - **TemplateId** (str) - 短信模板ID(短信模板申请时的工单ID) - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateUSMSTemplateRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateUSMSTemplate", d, **kwargs) - return apis.CreateUSMSTemplateResponseSchema().loads(resp) - - def delete_usms_signature(self, req=None, **kwargs): - """ DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **SigIds** (list) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1...SigIds.N方式传入 - - **Response** - - - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.DeleteUSMSSignatureRequestSchema().dumps(d) - resp = self.invoke("DeleteUSMSSignature", d, **kwargs) - return apis.DeleteUSMSSignatureResponseSchema().loads(resp) - - def delete_usms_template(self, req=None, **kwargs): - """ DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **TemplateIds** (list) - (Required) 模板ID(也即短信模板申请时的工单ID),支持以数组的方式,举例,以TemplateIds.0、TemplateIds.1...TemplateIds.N方式传入 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteUSMSTemplateRequestSchema().dumps(d) - resp = self.invoke("DeleteUSMSTemplate", d, **kwargs) - return apis.DeleteUSMSTemplateResponseSchema().loads(resp) - - def get_usms_send_receipt(self, req=None, **kwargs): - """ GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SessionNoSet** (list) - (Required) 发送短信时返回的SessionNo集合,SessionNoSet.0,SessionNoSet.1....格式 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Data** (list) - 见 **ReceiptPerSession** 模型定义 - - **Message** (str) - 错误描述 - - **Response Model** - - **ReceiptPerPhone** - - - **CostCount** (int) - 消耗短信条数 - - **Phone** (str) - 手机号码 - - **ReceiptDesc** (str) - 回执结果描述 - - **ReceiptResult** (str) - 回执结果 - - **ReceiptTime** (int) - 回执返回时间 - - **ReceiptPerSession** - - - **ReceiptSet** (list) - 见 **ReceiptPerPhone** 模型定义 - - **SessionNo** (str) - 发送短信时返回的SessionNo - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.GetUSMSSendReceiptRequestSchema().dumps(d) - resp = self.invoke("GetUSMSSendReceipt", d, **kwargs) - return apis.GetUSMSSendReceiptResponseSchema().loads(resp) - - def query_usms_signature(self, req=None, **kwargs): - """ QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **SigContent** (str) - 签名内容;签名ID和签名至少需填写1项; - - **SigId** (str) - 已申请的短信签名ID(短信签名申请时的工单ID);签名ID和签名至少需填写1项; - - **Response** - - - **Data** (dict) - 见 **OutSignature** 模型定义 - - **Message** (str) - 发生错误时,表示具体错误描述 - - **Response Model** - - **OutSignature** - - - **ErrDesc** (str) - 签名审核失败原因 - - **SigContent** (str) - 签名内容 - - **SigId** (str) - 签名ID - - **Status** (int) - 签名状态。0-待审核 1-审核中 2-审核通过 3-审核未通过 4-被禁用 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.QueryUSMSSignatureRequestSchema().dumps(d) - resp = self.invoke("QueryUSMSSignature", d, **kwargs) - return apis.QueryUSMSSignatureResponseSchema().loads(resp) - - def query_usms_template(self, req=None, **kwargs): - """ QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **TemplateId** (str) - (Required) 模板ID - - **Response** - - - **Data** (dict) - 见 **OutTemplate** 模型定义 - - **Message** (str) - 当RetCode不为0时,Message中显示具体错误描述 - - **Response Model** - - **OutTemplate** - - - **CreateTime** (int) - 创建时间 - - **ErrDesc** (str) - 审核失败原因 - - **Purpose** (int) - 模板类型,选项:1-验证码类 2-通知类 3-会员推广类 - - **Remark** (str) - 模板说明 - - **Status** (int) - 短信模板状态;状态说明:0-待审核,1-审核中,2-审核通过,3-审核未通过,4-被禁用 - - **Template** (str) - 短信模板内容 - - **TemplateId** (str) - 短信模板ID - - **TemplateName** (str) - 短信模板名称 - - **UnsubscribeInfo** (str) - 退订信息;一般填写方式“回T退订”,当purpose为3(也即会员推广类)时,为必填项 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.QueryUSMSTemplateRequestSchema().dumps(d) - resp = self.invoke("QueryUSMSTemplate", d, **kwargs) - return apis.QueryUSMSTemplateResponseSchema().loads(resp) - - def send_usms_message(self, req=None, **kwargs): - """ SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **PhoneNumbers** (list) - (Required) 电话号码数组,电话号码格式为(60)1xxxxxxxx,()中为国际长途区号(如中国为86或0086,两种格式都支持),后面为电话号码.若不传入国际区号,如1851623xxxx,则默认为国内手机号 - - **TemplateId** (str) - (Required) 模板ID。若指定的模板ID审核未通过(status不等于2)则不允许发送 - - **TemplateParams** (list) - (Required) 模板参数数组,以TempalteParams.0,TempalteParams.1.。。格式。若模板ID指定的模板无可变参数,则不传入该参数。模板参数个数与模板不匹配,则不允许发送 - - **SigContent** (str) - 使用的签名,如果不输入则使用默认签名,若没有申请默认签名不允许发送;若输入的签名没有申请,则无法发送 - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Action** (str) - 操作名称 - - **Message** (str) - 发生错误时表示错误描述 - - **RetCode** (int) - 返回码 - - **SessionNo** (str) - 本次提交发送的短信的唯一ID,可根据该值查询本次发送的短信列表 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.SendUSMSMessageRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("SendUSMSMessage", d, **kwargs) - return apis.SendUSMSMessageResponseSchema().loads(resp) - - def update_usms_signature(self, req=None, **kwargs): - """ UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID,不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **File** (str) - (Required) 短信签名的资质证明文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB - - **SigContent** (str) - (Required) 新的短信签名名称;长度为2-12个字符, 可包含中文、数字和符号;无需填写【】或[],系统会自动添加 - - **SigId** (str) - (Required) 签名ID(也即短信签名申请时的工单ID),支持以数组的方式,举例,以SigIds.0、SigIds.1...SigIds.N方式传入 - - **SigPurpose** (int) - (Required) 签名用途,0-自用,1-他用; - - **SigType** (int) - (Required) 签名类型,说明如下:0-公司或企业的全称或简称;1-App应用的全称或简称;2-工信部备案网站的全称或简称;3-公众号或小程序的全称或简称;4-商标名的全称或简称;5-政府/机关事业单位/其他单位的全称或简称; - - **CertificateType** (int) - 签名的资质证明文件类型,需与签名类型保持一致,说明如下:0-三证合一/企业营业执照/组织机构代码证书/社会信用代码证书;1-应用商店后台开发者管理截图;2-备案服务商的备案成功截图(含域名,网站名称,备案号);3-公众号或小程序的管理界面截图;4-商标注册证书;5-组织机构代码证书、社会信用代码证书; - - **ProxyFile** (str) - 短信签名授权委托文件,需先进行base64编码格式转换,此处填写转换后的字符串。文件大小不超过4 MB;当您是代理并使用第三方的签名时(也即SigPurpose为1-他用),该项为必填项; - - **Response** - - - **Message** (str) - 返回状态码描述,如果操作成功,默认返回为空 - - """ - d = {"ProjectId": self.config.project_id} - req and d.update(req) - d = apis.UpdateUSMSSignatureRequestSchema().dumps(d) - resp = self.invoke("UpdateUSMSSignature", d, **kwargs) - return apis.UpdateUSMSSignatureResponseSchema().loads(resp) - - def update_usms_template(self, req=None, **kwargs): - """ UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Template** (str) - (Required) 新的模板内容。模板名称和模板内容必须提供一个,否则会报错。小于等于600个字 - - **TemplateId** (str) - (Required) 短信模板ID - - **Remark** (str) - 短信模板申请原因说明,字数不超过128,每个中文、符号、英文、数字等都计为1个字。 - - **TemplateName** (str) - 新的模板名称。小于等于32个字,每个中文、英文、数组、符合都计为一个字 - - **UnsubscribeInfo** (str) - 当Purpose为3时,也即会员推广类短信模板,该项必填。枚举值:TD退订、回T退订、回N退订、回TD退订、退订回T、退订回D、退订回TD、退订回复T、退订回复D、退订回复N、退订回复TD、拒收回T - - **Zone** (str) - 可用区。参见 `可用区列表 `_ - - **Response** - - - **Message** (str) - 发生错误时表示错误描述 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateUSMSTemplateRequestSchema().dumps(d) - resp = self.invoke("UpdateUSMSTemplate", d, **kwargs) - return apis.UpdateUSMSTemplateResponseSchema().loads(resp) diff --git a/ucloud/services/usms/schemas/__init__.py b/ucloud/services/usms/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/usms/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/usms/schemas/apis.py b/ucloud/services/usms/schemas/apis.py deleted file mode 100644 index f25c0c2..0000000 --- a/ucloud/services/usms/schemas/apis.py +++ /dev/null @@ -1,309 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.usms.schemas import models - -""" USMS API Schema -""" -""" -API: CreateUSMSSignature - -调用接口CreateUSMSSignature申请短信签名 -""" - - -class CreateUSMSSignatureRequestSchema(schema.RequestSchema): - """ CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名 - """ - - fields = { - "CertificateType": fields.Int(required=True, dump_to="CertificateType"), - "Description": fields.Str(required=True, dump_to="Description"), - "File": fields.Str(required=True, dump_to="File"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "ProxyFile": fields.Str(required=False, dump_to="ProxyFile"), - "SigContent": fields.Str(required=True, dump_to="SigContent"), - "SigPurpose": fields.Int(required=True, dump_to="SigPurpose"), - "SigType": fields.Int(required=True, dump_to="SigType"), - } - - -class CreateUSMSSignatureResponseSchema(schema.ResponseSchema): - """ CreateUSMSSignature - 调用接口CreateUSMSSignature申请短信签名 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "SigContent": fields.Str(required=False, load_from="SigContent"), - "SigId": fields.Str(required=False, load_from="SigId"), - } - - -""" -API: CreateUSMSTemplate - -调用接口CreateUSMSTemplate申请短信模板 -""" - - -class CreateUSMSTemplateRequestSchema(schema.RequestSchema): - """ CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Purpose": fields.Int(required=True, dump_to="Purpose"), - "Region": fields.Str(required=False, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Template": fields.Str(required=True, dump_to="Template"), - "TemplateName": fields.Str(required=True, dump_to="TemplateName"), - "UnsubscribeInfo": fields.Str( - required=False, dump_to="UnsubscribeInfo" - ), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class CreateUSMSTemplateResponseSchema(schema.ResponseSchema): - """ CreateUSMSTemplate - 调用接口CreateUSMSTemplate申请短信模板 - """ - - fields = { - "Message": fields.Str(required=True, load_from="Message"), - "TemplateId": fields.Str(required=True, load_from="TemplateId"), - } - - -""" -API: DeleteUSMSSignature - -调用接口DeleteUSMSSignature删除短信签名 -""" - - -class DeleteUSMSSignatureRequestSchema(schema.RequestSchema): - """ DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "SigIds": fields.List(fields.Str()), - } - - -class DeleteUSMSSignatureResponseSchema(schema.ResponseSchema): - """ DeleteUSMSSignature - 调用接口DeleteUSMSSignature删除短信签名 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: DeleteUSMSTemplate - -调用接口DeleteUSMSTemplate删除短信模板 -""" - - -class DeleteUSMSTemplateRequestSchema(schema.RequestSchema): - """ DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "TemplateIds": fields.List(fields.Str()), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class DeleteUSMSTemplateResponseSchema(schema.ResponseSchema): - """ DeleteUSMSTemplate - 调用接口DeleteUSMSTemplate删除短信模板 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: GetUSMSSendReceipt - -获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因 -""" - - -class GetUSMSSendReceiptRequestSchema(schema.RequestSchema): - """ GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "SessionNoSet": fields.List(fields.Str()), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class GetUSMSSendReceiptResponseSchema(schema.ResponseSchema): - """ GetUSMSSendReceipt - 获取短信发送回执信息。下游服务提供商回执信息返回会有一定延时,建议发送完短信以后,5-10分钟后再调用该接口拉取回执信息。若超过12小时未返回,则请联系技术支持确认原因 - """ - - fields = { - "Data": fields.List( - models.ReceiptPerSessionSchema(), required=True, load_from="Data" - ), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: QueryUSMSSignature - -调用接口QueryUSMSSignature查询短信签名申请状态 -""" - - -class QueryUSMSSignatureRequestSchema(schema.RequestSchema): - """ QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "SigContent": fields.Str(required=False, dump_to="SigContent"), - "SigId": fields.Str(required=False, dump_to="SigId"), - } - - -class QueryUSMSSignatureResponseSchema(schema.ResponseSchema): - """ QueryUSMSSignature - 调用接口QueryUSMSSignature查询短信签名申请状态 - """ - - fields = { - "Data": models.OutSignatureSchema(), - "Message": fields.Str(required=True, load_from="Message"), - } - - -""" -API: QueryUSMSTemplate - -调用接口QueryUSMSTemplate查询短信模板申请状态 -""" - - -class QueryUSMSTemplateRequestSchema(schema.RequestSchema): - """ QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "TemplateId": fields.Str(required=True, dump_to="TemplateId"), - } - - -class QueryUSMSTemplateResponseSchema(schema.ResponseSchema): - """ QueryUSMSTemplate - 调用接口QueryUSMSTemplate查询短信模板申请状态 - """ - - fields = { - "Data": models.OutTemplateSchema(), - "Message": fields.Str(required=False, load_from="Message"), - } - - -""" -API: SendUSMSMessage - -发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计 -""" - - -class SendUSMSMessageRequestSchema(schema.RequestSchema): - """ SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计 - """ - - fields = { - "PhoneNumbers": fields.List(fields.Str()), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "SigContent": fields.Str(required=False, dump_to="SigContent"), - "TemplateId": fields.Str(required=True, dump_to="TemplateId"), - "TemplateParams": fields.List(fields.Str()), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class SendUSMSMessageResponseSchema(schema.ResponseSchema): - """ SendUSMSMessage - 发送短信息。短信字数超过70个后,按照每66个进行切割(因为要加上1/3), 2/3)等字样,占用4个字长)。短信最大长度不能超过600个字。每个汉字、数字、字母、字符都按一个字计 - """ - - fields = { - "Action": fields.Str(required=True, load_from="Action"), - "Message": fields.Str(required=True, load_from="Message"), - "RetCode": fields.Int(required=True, load_from="RetCode"), - "SessionNo": fields.Str(required=False, load_from="SessionNo"), - } - - -""" -API: UpdateUSMSSignature - -调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核 -""" - - -class UpdateUSMSSignatureRequestSchema(schema.RequestSchema): - """ UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核 - """ - - fields = { - "CertificateType": fields.Int( - required=False, dump_to="CertificateType" - ), - "File": fields.Str(required=True, dump_to="File"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "ProxyFile": fields.Str(required=False, dump_to="ProxyFile"), - "SigContent": fields.Str(required=True, dump_to="SigContent"), - "SigId": fields.Str(required=True, dump_to="SigId"), - "SigPurpose": fields.Int(required=True, dump_to="SigPurpose"), - "SigType": fields.Int(required=True, dump_to="SigType"), - } - - -class UpdateUSMSSignatureResponseSchema(schema.ResponseSchema): - """ UpdateUSMSSignature - 调用接口UpdateUSMSSignature修改未通过审核的短信签名,并重新提交审核 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} - - -""" -API: UpdateUSMSTemplate - -调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核 -""" - - -class UpdateUSMSTemplateRequestSchema(schema.RequestSchema): - """ UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Template": fields.Str(required=True, dump_to="Template"), - "TemplateId": fields.Str(required=True, dump_to="TemplateId"), - "TemplateName": fields.Str(required=False, dump_to="TemplateName"), - "UnsubscribeInfo": fields.Str( - required=False, dump_to="UnsubscribeInfo" - ), - "Zone": fields.Str(required=False, dump_to="Zone"), - } - - -class UpdateUSMSTemplateResponseSchema(schema.ResponseSchema): - """ UpdateUSMSTemplate - 调用接口UpdateUSMSTemplate修改未通过审核的短信模板,并重新提交审核 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} diff --git a/ucloud/services/usms/schemas/models.py b/ucloud/services/usms/schemas/models.py deleted file mode 100644 index eb82e14..0000000 --- a/ucloud/services/usms/schemas/models.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class ReceiptPerPhoneSchema(schema.ResponseSchema): - """ ReceiptPerPhone - 每个目的手机号的发送回执信息 - """ - - fields = { - "CostCount": fields.Int(required=True, load_from="CostCount"), - "Phone": fields.Str(required=True, load_from="Phone"), - "ReceiptDesc": fields.Str(required=True, load_from="ReceiptDesc"), - "ReceiptResult": fields.Str(required=True, load_from="ReceiptResult"), - "ReceiptTime": fields.Int(required=True, load_from="ReceiptTime"), - } - - -class ReceiptPerSessionSchema(schema.ResponseSchema): - """ ReceiptPerSession - 每个提交的回执结果集合 - """ - - fields = { - "ReceiptSet": fields.List(ReceiptPerPhoneSchema()), - "SessionNo": fields.Str(required=True, load_from="SessionNo"), - } - - -class OutSignatureSchema(schema.ResponseSchema): - """ OutSignature - 短信签名 - """ - - fields = { - "ErrDesc": fields.Str(required=True, load_from="ErrDesc"), - "SigContent": fields.Str(required=True, load_from="SigContent"), - "SigId": fields.Str(required=True, load_from="SigId"), - "Status": fields.Int(required=True, load_from="Status"), - } - - -class OutTemplateSchema(schema.ResponseSchema): - """ OutTemplate - 短信模板 - """ - - fields = { - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "ErrDesc": fields.Str(required=True, load_from="ErrDesc"), - "Purpose": fields.Int(required=True, load_from="Purpose"), - "Remark": fields.Str(required=True, load_from="Remark"), - "Status": fields.Int(required=True, load_from="Status"), - "Template": fields.Str(required=True, load_from="Template"), - "TemplateId": fields.Str(required=True, load_from="TemplateId"), - "TemplateName": fields.Str(required=True, load_from="TemplateName"), - "UnsubscribeInfo": fields.Str( - required=True, load_from="UnsubscribeInfo" - ), - } diff --git a/ucloud/services/vpc/__init__.py b/ucloud/services/vpc/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/vpc/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/vpc/client.py b/ucloud/services/vpc/client.py deleted file mode 100644 index 0b22082..0000000 --- a/ucloud/services/vpc/client.py +++ /dev/null @@ -1,539 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.client import Client -from ucloud.services.vpc.schemas import apis - - -class VPCClient(Client): - def __init__(self, config, transport=None, middleware=None, logger=None): - super(VPCClient, self).__init__(config, transport, middleware, logger) - - def add_vpc_network(self, req=None, **kwargs): - """ AddVPCNetwork - 添加VPC网段 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Network** (list) - (Required) 增加网段 - - **VPCId** (str) - (Required) 源VPC短ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AddVPCNetworkRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("AddVPCNetwork", d, **kwargs) - return apis.AddVPCNetworkResponseSchema().loads(resp) - - def associate_route_table(self, req=None, **kwargs): - """ AssociateRouteTable - 绑定子网的路由表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **RouteTableId** (str) - (Required) 路由表ID,仅限自定义路由表 - - **SubnetId** (str) - (Required) 子网ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.AssociateRouteTableRequestSchema().dumps(d) - resp = self.invoke("AssociateRouteTable", d, **kwargs) - return apis.AssociateRouteTableResponseSchema().loads(resp) - - def clone_route_table(self, req=None, **kwargs): - """ CloneRouteTable - 根据一张现有路由表复制一张新的路由表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **RouteTableId** (str) - (Required) 被克隆的路由表ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CloneRouteTableRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CloneRouteTable", d, **kwargs) - return apis.CloneRouteTableResponseSchema().loads(resp) - - def create_route_table(self, req=None, **kwargs): - """ CreateRouteTable - 创建路由表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **VPCId** (str) - (Required) VPC ID - - **Name** (str) - 路由表名称 Default RouteTable - - **Remark** (str) - 备注 - - **Tag** (str) - 业务组 - - **Response** - - - **RouteTableId** (str) - 路由表ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateRouteTableRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateRouteTable", d, **kwargs) - return apis.CreateRouteTableResponseSchema().loads(resp) - - def create_subnet(self, req=None, **kwargs): - """ CreateSubnet - 创建子网 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Subnet** (str) - (Required) 子网网络地址,例如192.168.0.0 - - **VPCId** (str) - (Required) VPC资源ID - - **Netmask** (int) - 子网网络号位数,默认为24 - - **Remark** (str) - 备注 - - **SubnetName** (str) - 子网名称,默认为Subnet - - **Tag** (str) - 业务组名称,默认为Default - - **Response** - - - **SubnetId** (str) - 子网ID - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateSubnetRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateSubnet", d, **kwargs) - return apis.CreateSubnetResponseSchema().loads(resp) - - def create_vpc(self, req=None, **kwargs): - """ CreateVPC - 创建VPC - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Name** (str) - (Required) VPC名称 - - **Network** (list) - (Required) VPC网段 - - **Remark** (str) - 备注 - - **Tag** (str) - 业务组名称 - - **Type** (int) - VPC类型 - - **Response** - - - **VPCId** (str) - VPC资源Id - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateVPCRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateVPC", d, **kwargs) - return apis.CreateVPCResponseSchema().loads(resp) - - def create_vpc_intercom(self, req=None, **kwargs): - """ CreateVPCIntercom - 新建VPC互通关系 - - **Request** - - - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 `_ - - **DstVPCId** (str) - (Required) 目的VPC短ID - - **VPCId** (str) - (Required) 源VPC短ID - - **DstProjectId** (str) - 目的VPC项目ID。默认与源VPC同项目。 - - **DstRegion** (str) - 目的VPC所在地域,默认与源VPC同地域。 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.CreateVPCIntercomRequestSchema().dumps(d) - kwargs["max_retries"] = 0 - resp = self.invoke("CreateVPCIntercom", d, **kwargs) - return apis.CreateVPCIntercomResponseSchema().loads(resp) - - def delete_route_table(self, req=None, **kwargs): - """ DeleteRouteTable - 删除自定义路由表 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **RouteTableId** (str) - (Required) 路由ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteRouteTableRequestSchema().dumps(d) - resp = self.invoke("DeleteRouteTable", d, **kwargs) - return apis.DeleteRouteTableResponseSchema().loads(resp) - - def delete_subnet(self, req=None, **kwargs): - """ DeleteSubnet - 删除子网 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SubnetId** (str) - (Required) 子网ID - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteSubnetRequestSchema().dumps(d) - resp = self.invoke("DeleteSubnet", d, **kwargs) - return apis.DeleteSubnetResponseSchema().loads(resp) - - def delete_vpc(self, req=None, **kwargs): - """ DeleteVPC - 删除VPC - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **VPCId** (str) - (Required) VPC资源Id - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteVPCRequestSchema().dumps(d) - resp = self.invoke("DeleteVPC", d, **kwargs) - return apis.DeleteVPCResponseSchema().loads(resp) - - def delete_vpc_intercom(self, req=None, **kwargs): - """ DeleteVPCIntercom - 删除VPC互通关系 - - **Request** - - - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 `_ - - **DstVPCId** (str) - (Required) 目的VPC短ID - - **VPCId** (str) - (Required) 源VPC短ID - - **DstProjectId** (str) - 目的VPC所在项目ID,默认为源VPC所在项目ID - - **DstRegion** (str) - 目的VPC所在地域,默认为源VPC所在地域 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DeleteVPCIntercomRequestSchema().dumps(d) - resp = self.invoke("DeleteVPCIntercom", d, **kwargs) - return apis.DeleteVPCIntercomResponseSchema().loads(resp) - - def describe_route_table(self, req=None, **kwargs): - """ DescribeRouteTable - 获取路由表详细信息(包括路由策略) - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BusinessId** (str) - 业务组ID - - **Limit** (int) - Limit - - **OffSet** (int) - OffSet - - **RouteTableId** (str) - 路由表ID - - **VPCId** (str) - VPC ID - - **Response** - - - **RouteTables** (list) - 见 **RouteTableInfo** 模型定义 - - **TotalCount** (int) - RouteTables字段的数量 - - **Response Model** - - **RouteRuleInfo** - - - **DstAddr** (str) - 目的地址,比如10.10.8/24 - - **NexthopId** (str) - 路由下一跳ID,比如uvnet-3eljvj - - **NexthopType** (str) - 下一跳类型,比如local、vnet - - **Remark** (str) - 路由规则备注 - - **RouteRuleId** (str) - 规则ID - - **RuleType** (int) - 路由规则类型(0表示系统路由,1表示自定义路由) - - **RouteTableInfo** - - - **CreateTime** (int) - 创建时间戳 - - **Remark** (str) - 路由表备注 - - **RouteRules** (list) - 见 **RouteRuleInfo** 模型定义 - - **RouteTableId** (str) - 路由表ID - - **RouteTableType** (int) - 路由表类型,1为默认,0为自定义 - - **SubnetCount** (str) - 绑定了该路由表的子网数量 - - **Tag** (str) - 业务组 - - **VPCId** (str) - 路由表所属vpc - - **VPCName** (str) - vpc名称 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeRouteTableRequestSchema().dumps(d) - resp = self.invoke("DescribeRouteTable", d, **kwargs) - return apis.DescribeRouteTableResponseSchema().loads(resp) - - def describe_subnet(self, req=None, **kwargs): - """ DescribeSubnet - 获取子网信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **BusinessId** (str) - 业务组 - - **Limit** (int) - 列表长度,默认为20 - - **Offset** (int) - 偏移量,默认为0 - - **RouteTableId** (str) - 路由表Id - - **ShowAvailableIPs** (bool) - 是否返回子网的可用IP数,true为是,false为否,默认不返回 - - **SubnetId** (str) - 子网id,适用于一次查询一个子网信息 - - **SubnetIds** (list) - 子网id数组,适用于一次查询多个子网信息 - - **Tag** (str) - 业务组名称,默认为Default - - **VPCId** (str) - VPC资源id - - **Response** - - - **DataSet** (list) - 见 **SubnetInfo** 模型定义 - - **TotalCount** (int) - 子网总数量 - - **Response Model** - - **SubnetInfo** - - - **AvailableIPs** (int) - 可用IP数量 - - **CreateTime** (int) - 创建时间 - - **Gateway** (str) - 子网网关 - - **HasNATGW** (bool) - 是否有natgw - - **IPv6Network** (str) - 子网关联的IPv6网段 - - **Netmask** (str) - 子网掩码 - - **Remark** (str) - 备注 - - **RouteTableId** (str) - 路由表Id - - **Subnet** (str) - 子网网段 - - **SubnetId** (str) - 子网Id - - **SubnetName** (str) - 子网名称 - - **SubnetType** (int) - 子网类型 - - **Tag** (str) - 业务组 - - **VPCId** (str) - VPCId - - **VPCName** (str) - VPC名称 - - **Zone** (str) - 可用区名称 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeSubnetRequestSchema().dumps(d) - resp = self.invoke("DescribeSubnet", d, **kwargs) - return apis.DescribeSubnetResponseSchema().loads(resp) - - def describe_subnet_resource(self, req=None, **kwargs): - """ DescribeSubnetResource - 展示子网资源 - **Request** - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SubnetId** (str) - (Required) 子网id - - **Limit** (int) - 单页返回数据长度,默认为20 - - **Offset** (int) - 列表起始位置偏移量,默认为0 - - **ResourceType** (str) - 资源类型,默认为全部资源类型。枚举值为:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP. - - **Response** - - **DataSet** (list) - 见 **SubnetResource** 模型定义 - - **TotalCount** (int) - 总数 - - **Response Model** - - **SubnetResource** - - - **IP** (str) - 资源ip - - **IPv6Address** (str) - 资源的IPv6地址 - - **Name** (str) - 资源名称 - - **ResourceId** (str) - 资源Id - - **ResourceType** (str) - 资源类型。对应的资源类型:UHOST,云主机;PHOST,物理云主机;ULB,负载均衡;UHADOOP_HOST,hadoop节点;UFORTRESS_HOST,堡垒机;UNATGW,NAT网关;UKAFKA,Kafka消息队列;UMEM,内存存储;DOCKER,容器集群;UDB,数据库;UDW,数据仓库;VIP,内网VIP. - - **SubResourceId** (str) - 资源绑定的虚拟网卡的实例ID - - **SubResourceName** (str) - 资源绑定的虚拟网卡的实例名称 - - **SubResourceType** (str) - 资源绑定的虚拟网卡的类型 - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeSubnetResourceRequestSchema().dumps(d) - resp = self.invoke("DescribeSubnetResource", d, **kwargs) - return apis.DescribeSubnetResourceResponseSchema().loads(resp) - - def describe_vpc(self, req=None, **kwargs): - """ DescribeVPC - 获取VPC信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Limit** (int) - - - **Offset** (int) - - - **Tag** (str) - 业务组名称 - - **VPCIds** (list) - VPCId - - **Response** - - - **DataSet** (list) - 见 **VPCInfo** 模型定义 - - **Response Model** - - **VPCNetworkInfo** - - - **Network** (str) - vpc地址空间 - - **SubnetCount** (int) - 地址空间中子网数量 - - **VPCInfo** - - - **CreateTime** (int) - - - **IPv6Network** (str) - VPC关联的IPv6网段 - - **Name** (str) - - - **Network** (list) - - - **NetworkInfo** (list) - 见 **VPCNetworkInfo** 模型定义 - - **OperatorName** (str) - VPC关联的IPv6网段所属运营商 - - **SubnetCount** (int) - - - **Tag** (str) - - - **UpdateTime** (int) - - - **VPCId** (str) - VPCId - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeVPCRequestSchema().dumps(d) - resp = self.invoke("DescribeVPC", d, **kwargs) - return apis.DescribeVPCResponseSchema().loads(resp) - - def describe_vpc_intercom(self, req=None, **kwargs): - """ DescribeVPCIntercom - 获取VPC互通信息 - - **Request** - - - **ProjectId** (str) - (Config) 源VPC所在项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 源VPC所在地域。 参见 `地域和可用区列表 `_ - - **VPCId** (str) - (Required) VPC短ID - - **DstProjectId** (str) - 目的项目ID,默认为全部项目 - - **DstRegion** (str) - 目的VPC所在地域,默认为全部地域 - - **Response** - - - **DataSet** (list) - 见 **VPCIntercomInfo** 模型定义 - - **Response Model** - - **VPCIntercomInfo** - - - **DstRegion** (str) - 所属地域 - - **Name** (str) - VPC名字 - - **Network** (list) - VPC的地址空间 - - **ProjectId** (str) - 项目Id - - **Tag** (str) - 业务组(未分组显示为 Default) - - **VPCId** (str) - VPCId - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.DescribeVPCIntercomRequestSchema().dumps(d) - resp = self.invoke("DescribeVPCIntercom", d, **kwargs) - return apis.DescribeVPCIntercomResponseSchema().loads(resp) - - def modify_route_rule(self, req=None, **kwargs): - """ ModifyRouteRule - 路由策略增、删、改 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **RouteRule** (list) - (Required) 格式: RouteRuleId | 目的网段 | 下一跳类型 | 下一跳 |优先级| 备注 | 增、删、改标志 (下一跳类型为instance或者vip,下一跳为云主机id或者vip的id,优先级使用0,动作标志为add/delete/update) 。"添加"示例: test_id | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| add (添加的RouteRuleId填任意非空字符串) 。"删除"示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-xd8ja | 0 | Default Route Rule| delete (RouteRuleId来自DescribeRouteTable中) 。“修改”示例: routerule-xk3jxa | 10.8.0.0/16 | instance | uhost-cjksa2 | 0 | Default Route Rule| update (RouteRuleId来自DescribeRouteTable中) - - **RouteTableId** (str) - (Required) 通过DescribeRouteTable拿到 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.ModifyRouteRuleRequestSchema().dumps(d) - resp = self.invoke("ModifyRouteRule", d, **kwargs) - return apis.ModifyRouteRuleResponseSchema().loads(resp) - - def update_route_table_attribute(self, req=None, **kwargs): - """ UpdateRouteTableAttribute - 更新路由表基本信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **RouteTableId** (str) - (Required) 路由表ID - - **Name** (str) - 名称 - - **Remark** (str) - 备注 - - **Tag** (str) - 业务组名称 - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateRouteTableAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateRouteTableAttribute", d, **kwargs) - return apis.UpdateRouteTableAttributeResponseSchema().loads(resp) - - def update_subnet_attribute(self, req=None, **kwargs): - """ UpdateSubnetAttribute - 更新子网信息 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **SubnetId** (str) - (Required) 子网ID - - **Name** (str) - 子网名称(如果Name不填写,Tag必须填写) - - **Tag** (str) - 业务组名称(如果Tag不填写,Name必须填写) - - **Response** - - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateSubnetAttributeRequestSchema().dumps(d) - resp = self.invoke("UpdateSubnetAttribute", d, **kwargs) - return apis.UpdateSubnetAttributeResponseSchema().loads(resp) - - def update_vpc_network(self, req=None, **kwargs): - """ UpdateVPCNetwork - 更新VPC网段 - - **Request** - - - **ProjectId** (str) - (Config) 项目ID。不填写为默认项目,子帐号必须填写。 请参考 `GetProjectList接口 `_ - - **Region** (str) - (Config) 地域。 参见 `地域和可用区列表 `_ - - **Network** (list) - (Required) 需要保留的VPC网段。当前仅支持删除VPC网段,添加网段请参考 `AddVPCNetwork `_ - - **VPCId** (str) - (Required) VPC的ID - - **Response** - - - **Message** (str) - 错误信息 - - """ - d = {"ProjectId": self.config.project_id, "Region": self.config.region} - req and d.update(req) - d = apis.UpdateVPCNetworkRequestSchema().dumps(d) - resp = self.invoke("UpdateVPCNetwork", d, **kwargs) - return apis.UpdateVPCNetworkResponseSchema().loads(resp) diff --git a/ucloud/services/vpc/schemas/__init__.py b/ucloud/services/vpc/schemas/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/services/vpc/schemas/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/services/vpc/schemas/apis.py b/ucloud/services/vpc/schemas/apis.py deleted file mode 100644 index 3986831..0000000 --- a/ucloud/services/vpc/schemas/apis.py +++ /dev/null @@ -1,582 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields -from ucloud.services.vpc.schemas import models - -""" VPC API Schema -""" -""" -API: AddVPCNetwork - -添加VPC网段 -""" - - -class AddVPCNetworkRequestSchema(schema.RequestSchema): - """ AddVPCNetwork - 添加VPC网段 - """ - - fields = { - "Network": fields.List(fields.Str()), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class AddVPCNetworkResponseSchema(schema.ResponseSchema): - """ AddVPCNetwork - 添加VPC网段 - """ - - fields = {} - - -""" -API: AssociateRouteTable - -绑定子网的路由表 -""" - - -class AssociateRouteTableRequestSchema(schema.RequestSchema): - """ AssociateRouteTable - 绑定子网的路由表 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RouteTableId": fields.Str(required=True, dump_to="RouteTableId"), - "SubnetId": fields.Str(required=True, dump_to="SubnetId"), - } - - -class AssociateRouteTableResponseSchema(schema.ResponseSchema): - """ AssociateRouteTable - 绑定子网的路由表 - """ - - fields = {} - - -""" -API: CloneRouteTable - -根据一张现有路由表复制一张新的路由表 -""" - - -class CloneRouteTableRequestSchema(schema.RequestSchema): - """ CloneRouteTable - 根据一张现有路由表复制一张新的路由表 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=False, dump_to="Region"), - "RouteTableId": fields.Str(required=True, dump_to="RouteTableId"), - } - - -class CloneRouteTableResponseSchema(schema.ResponseSchema): - """ CloneRouteTable - 根据一张现有路由表复制一张新的路由表 - """ - - fields = {} - - -""" -API: CreateRouteTable - -创建路由表 -""" - - -class CreateRouteTableRequestSchema(schema.RequestSchema): - """ CreateRouteTable - 创建路由表 - """ - - fields = { - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class CreateRouteTableResponseSchema(schema.ResponseSchema): - """ CreateRouteTable - 创建路由表 - """ - - fields = { - "RouteTableId": fields.Str(required=False, load_from="RouteTableId") - } - - -""" -API: CreateSubnet - -创建子网 -""" - - -class CreateSubnetRequestSchema(schema.RequestSchema): - """ CreateSubnet - 创建子网 - """ - - fields = { - "Netmask": fields.Int(required=False, dump_to="Netmask"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Subnet": fields.Str(required=True, dump_to="Subnet"), - "SubnetName": fields.Str(required=False, dump_to="SubnetName"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class CreateSubnetResponseSchema(schema.ResponseSchema): - """ CreateSubnet - 创建子网 - """ - - fields = {"SubnetId": fields.Str(required=False, load_from="SubnetId")} - - -""" -API: CreateVPC - -创建VPC -""" - - -class CreateVPCRequestSchema(schema.RequestSchema): - """ CreateVPC - 创建VPC - """ - - fields = { - "Name": fields.Str(required=True, dump_to="Name"), - "Network": fields.List(fields.Str()), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "Type": fields.Int(required=False, dump_to="Type"), - } - - -class CreateVPCResponseSchema(schema.ResponseSchema): - """ CreateVPC - 创建VPC - """ - - fields = {"VPCId": fields.Str(required=False, load_from="VPCId")} - - -""" -API: CreateVPCIntercom - -新建VPC互通关系 -""" - - -class CreateVPCIntercomRequestSchema(schema.RequestSchema): - """ CreateVPCIntercom - 新建VPC互通关系 - """ - - fields = { - "DstProjectId": fields.Str(required=False, dump_to="DstProjectId"), - "DstRegion": fields.Str(required=False, dump_to="DstRegion"), - "DstVPCId": fields.Str(required=True, dump_to="DstVPCId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class CreateVPCIntercomResponseSchema(schema.ResponseSchema): - """ CreateVPCIntercom - 新建VPC互通关系 - """ - - fields = {} - - -""" -API: DeleteRouteTable - -删除自定义路由表 -""" - - -class DeleteRouteTableRequestSchema(schema.RequestSchema): - """ DeleteRouteTable - 删除自定义路由表 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RouteTableId": fields.Str(required=True, dump_to="RouteTableId"), - } - - -class DeleteRouteTableResponseSchema(schema.ResponseSchema): - """ DeleteRouteTable - 删除自定义路由表 - """ - - fields = {} - - -""" -API: DeleteSubnet - -删除子网 -""" - - -class DeleteSubnetRequestSchema(schema.RequestSchema): - """ DeleteSubnet - 删除子网 - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetId": fields.Str(required=True, dump_to="SubnetId"), - } - - -class DeleteSubnetResponseSchema(schema.ResponseSchema): - """ DeleteSubnet - 删除子网 - """ - - fields = {} - - -""" -API: DeleteVPC - -删除VPC -""" - - -class DeleteVPCRequestSchema(schema.RequestSchema): - """ DeleteVPC - 删除VPC - """ - - fields = { - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class DeleteVPCResponseSchema(schema.ResponseSchema): - """ DeleteVPC - 删除VPC - """ - - fields = {} - - -""" -API: DeleteVPCIntercom - -删除VPC互通关系 -""" - - -class DeleteVPCIntercomRequestSchema(schema.RequestSchema): - """ DeleteVPCIntercom - 删除VPC互通关系 - """ - - fields = { - "DstProjectId": fields.Str(required=False, dump_to="DstProjectId"), - "DstRegion": fields.Str(required=False, dump_to="DstRegion"), - "DstVPCId": fields.Str(required=True, dump_to="DstVPCId"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class DeleteVPCIntercomResponseSchema(schema.ResponseSchema): - """ DeleteVPCIntercom - 删除VPC互通关系 - """ - - fields = {} - - -""" -API: DescribeRouteTable - -获取路由表详细信息(包括路由策略) -""" - - -class DescribeRouteTableRequestSchema(schema.RequestSchema): - """ DescribeRouteTable - 获取路由表详细信息(包括路由策略) - """ - - fields = { - "BusinessId": fields.Str(required=False, dump_to="BusinessId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "OffSet": fields.Int(required=False, dump_to="OffSet"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RouteTableId": fields.Str(required=False, dump_to="RouteTableId"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - } - - -class DescribeRouteTableResponseSchema(schema.ResponseSchema): - """ DescribeRouteTable - 获取路由表详细信息(包括路由策略) - """ - - fields = { - "RouteTables": fields.List( - models.RouteTableInfoSchema(), - required=False, - load_from="RouteTables", - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeSubnet - -获取子网信息 -""" - - -class DescribeSubnetRequestSchema(schema.RequestSchema): - """ DescribeSubnet - 获取子网信息 - """ - - fields = { - "BusinessId": fields.Str(required=False, dump_to="BusinessId"), - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RouteTableId": fields.Str(required=False, dump_to="RouteTableId"), - "ShowAvailableIPs": fields.Bool( - required=False, dump_to="ShowAvailableIPs" - ), - "SubnetId": fields.Str(required=False, dump_to="SubnetId"), - "SubnetIds": fields.List(fields.Str()), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCId": fields.Str(required=False, dump_to="VPCId"), - } - - -class DescribeSubnetResponseSchema(schema.ResponseSchema): - """ DescribeSubnet - 获取子网信息 - """ - - fields = { - "DataSet": fields.List( - models.SubnetInfoSchema(), required=True, load_from="DataSet" - ), - "TotalCount": fields.Int(required=True, load_from="TotalCount"), - } - - -""" -API: DescribeSubnetResource - -展示子网资源 -""" - - -class DescribeSubnetResourceRequestSchema(schema.RequestSchema): - """ DescribeSubnetResource - 展示子网资源 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "ResourceType": fields.Str(required=False, dump_to="ResourceType"), - "SubnetId": fields.Str(required=True, dump_to="SubnetId"), - } - - -class DescribeSubnetResourceResponseSchema(schema.ResponseSchema): - """ DescribeSubnetResource - 展示子网资源 - """ - - fields = { - "DataSet": fields.List( - models.SubnetResourceSchema(), required=False, load_from="DataSet" - ), - "TotalCount": fields.Int(required=False, load_from="TotalCount"), - } - - -""" -API: DescribeVPC - -获取VPC信息 -""" - - -class DescribeVPCRequestSchema(schema.RequestSchema): - """ DescribeVPC - 获取VPC信息 - """ - - fields = { - "Limit": fields.Int(required=False, dump_to="Limit"), - "Offset": fields.Int(required=False, dump_to="Offset"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Tag": fields.Str(required=False, dump_to="Tag"), - "VPCIds": fields.List(fields.Str()), - } - - -class DescribeVPCResponseSchema(schema.ResponseSchema): - """ DescribeVPC - 获取VPC信息 - """ - - fields = { - "DataSet": fields.List( - models.VPCInfoSchema(), required=False, load_from="DataSet" - ) - } - - -""" -API: DescribeVPCIntercom - -获取VPC互通信息 -""" - - -class DescribeVPCIntercomRequestSchema(schema.RequestSchema): - """ DescribeVPCIntercom - 获取VPC互通信息 - """ - - fields = { - "DstProjectId": fields.Str(required=False, dump_to="DstProjectId"), - "DstRegion": fields.Str(required=False, dump_to="DstRegion"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class DescribeVPCIntercomResponseSchema(schema.ResponseSchema): - """ DescribeVPCIntercom - 获取VPC互通信息 - """ - - fields = { - "DataSet": fields.List( - models.VPCIntercomInfoSchema(), required=False, load_from="DataSet" - ) - } - - -""" -API: ModifyRouteRule - -路由策略增、删、改 -""" - - -class ModifyRouteRuleRequestSchema(schema.RequestSchema): - """ ModifyRouteRule - 路由策略增、删、改 - """ - - fields = { - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "RouteRule": fields.List(fields.Str()), - "RouteTableId": fields.Str(required=True, dump_to="RouteTableId"), - } - - -class ModifyRouteRuleResponseSchema(schema.ResponseSchema): - """ ModifyRouteRule - 路由策略增、删、改 - """ - - fields = {} - - -""" -API: UpdateRouteTableAttribute - -更新路由表基本信息 -""" - - -class UpdateRouteTableAttributeRequestSchema(schema.RequestSchema): - """ UpdateRouteTableAttribute - 更新路由表基本信息 - """ - - fields = { - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "Remark": fields.Str(required=False, dump_to="Remark"), - "RouteTableId": fields.Str(required=True, dump_to="RouteTableId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class UpdateRouteTableAttributeResponseSchema(schema.ResponseSchema): - """ UpdateRouteTableAttribute - 更新路由表基本信息 - """ - - fields = {} - - -""" -API: UpdateSubnetAttribute - -更新子网信息 -""" - - -class UpdateSubnetAttributeRequestSchema(schema.RequestSchema): - """ UpdateSubnetAttribute - 更新子网信息 - """ - - fields = { - "Name": fields.Str(required=False, dump_to="Name"), - "ProjectId": fields.Str(required=False, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "SubnetId": fields.Str(required=True, dump_to="SubnetId"), - "Tag": fields.Str(required=False, dump_to="Tag"), - } - - -class UpdateSubnetAttributeResponseSchema(schema.ResponseSchema): - """ UpdateSubnetAttribute - 更新子网信息 - """ - - fields = {} - - -""" -API: UpdateVPCNetwork - -更新VPC网段 -""" - - -class UpdateVPCNetworkRequestSchema(schema.RequestSchema): - """ UpdateVPCNetwork - 更新VPC网段 - """ - - fields = { - "Network": fields.List(fields.Str()), - "ProjectId": fields.Str(required=True, dump_to="ProjectId"), - "Region": fields.Str(required=True, dump_to="Region"), - "VPCId": fields.Str(required=True, dump_to="VPCId"), - } - - -class UpdateVPCNetworkResponseSchema(schema.ResponseSchema): - """ UpdateVPCNetwork - 更新VPC网段 - """ - - fields = {"Message": fields.Str(required=True, load_from="Message")} diff --git a/ucloud/services/vpc/schemas/models.py b/ucloud/services/vpc/schemas/models.py deleted file mode 100644 index 51ec466..0000000 --- a/ucloud/services/vpc/schemas/models.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Code is generated by ucloud-model, DO NOT EDIT IT. """ -from ucloud.core.typesystem import schema, fields - - -class RouteRuleInfoSchema(schema.ResponseSchema): - """ RouteRuleInfo - 路由规则信息 - """ - - fields = { - "DstAddr": fields.Str(required=False, load_from="DstAddr"), - "NexthopId": fields.Str(required=False, load_from="NexthopId"), - "NexthopType": fields.Str(required=False, load_from="NexthopType"), - "Remark": fields.Str(required=False, load_from="Remark"), - "RouteRuleId": fields.Str(required=False, load_from="RouteRuleId"), - "RuleType": fields.Int(required=False, load_from="RuleType"), - } - - -class RouteTableInfoSchema(schema.ResponseSchema): - """ RouteTableInfo - 路由表信息 - """ - - fields = { - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Remark": fields.Str(required=False, load_from="Remark"), - "RouteRules": fields.List(RouteRuleInfoSchema()), - "RouteTableId": fields.Str(required=False, load_from="RouteTableId"), - "RouteTableType": fields.Int( - required=False, load_from="RouteTableType" - ), - "SubnetCount": fields.Str(required=False, load_from="SubnetCount"), - "Tag": fields.Str(required=False, load_from="Tag"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "VPCName": fields.Str(required=False, load_from="VPCName"), - } - - -class SubnetInfoSchema(schema.ResponseSchema): - """ SubnetInfo - 子网信息 - """ - - fields = { - "AvailableIPs": fields.Int(required=False, load_from="AvailableIPs"), - "CreateTime": fields.Int(required=False, load_from="CreateTime"), - "Gateway": fields.Str(required=False, load_from="Gateway"), - "HasNATGW": fields.Bool(required=False, load_from="HasNATGW"), - "IPv6Network": fields.Str(required=False, load_from="IPv6Network"), - "Netmask": fields.Str(required=False, load_from="Netmask"), - "Remark": fields.Str(required=False, load_from="Remark"), - "RouteTableId": fields.Str(required=False, load_from="RouteTableId"), - "Subnet": fields.Str(required=False, load_from="Subnet"), - "SubnetId": fields.Str(required=False, load_from="SubnetId"), - "SubnetName": fields.Str(required=False, load_from="SubnetName"), - "SubnetType": fields.Int(required=False, load_from="SubnetType"), - "Tag": fields.Str(required=False, load_from="Tag"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - "VPCName": fields.Str(required=False, load_from="VPCName"), - "Zone": fields.Str(required=False, load_from="Zone"), - } - - -class SubnetResourceSchema(schema.ResponseSchema): - """ SubnetResource - 子网下资源 - """ - - fields = { - "IP": fields.Str(required=False, load_from="IP"), - "IPv6Address": fields.Str(required=False, load_from="IPv6Address"), - "Name": fields.Str(required=False, load_from="Name"), - "ResourceId": fields.Str(required=False, load_from="ResourceId"), - "ResourceType": fields.Str(required=False, load_from="ResourceType"), - "SubResourceId": fields.Str(required=False, load_from="SubResourceId"), - "SubResourceName": fields.Str( - required=False, load_from="SubResourceName" - ), - "SubResourceType": fields.Str( - required=False, load_from="SubResourceType" - ), - } - - -class VPCNetworkInfoSchema(schema.ResponseSchema): - """ VPCNetworkInfo - vpc地址空间信息 - """ - - fields = { - "Network": fields.Str(required=False, load_from="Network"), - "SubnetCount": fields.Int(required=False, load_from="SubnetCount"), - } - - -class VPCInfoSchema(schema.ResponseSchema): - """ VPCInfo - VPC信息 - """ - - fields = { - "CreateTime": fields.Int(required=True, load_from="CreateTime"), - "IPv6Network": fields.Str(required=False, load_from="IPv6Network"), - "Name": fields.Str(required=True, load_from="Name"), - "Network": fields.List(fields.Str()), - "NetworkInfo": fields.List(VPCNetworkInfoSchema()), - "OperatorName": fields.Str(required=False, load_from="OperatorName"), - "SubnetCount": fields.Int(required=True, load_from="SubnetCount"), - "Tag": fields.Str(required=True, load_from="Tag"), - "UpdateTime": fields.Int(required=True, load_from="UpdateTime"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - } - - -class VPCIntercomInfoSchema(schema.ResponseSchema): - """ VPCIntercomInfo - - """ - - fields = { - "DstRegion": fields.Str(required=False, load_from="DstRegion"), - "Name": fields.Str(required=False, load_from="Name"), - "Network": fields.List(fields.Str()), - "ProjectId": fields.Str(required=False, load_from="ProjectId"), - "Tag": fields.Str(required=False, load_from="Tag"), - "VPCId": fields.Str(required=False, load_from="VPCId"), - } diff --git a/ucloud/testing/__init__.py b/ucloud/testing/__init__.py deleted file mode 100644 index 40a96af..0000000 --- a/ucloud/testing/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/ucloud/testing/driver/__init__.py b/ucloud/testing/driver/__init__.py deleted file mode 100644 index 4a6d914..0000000 --- a/ucloud/testing/driver/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- - -from ._specification import Specification -from ._scenario import Scenario -from ._step import Step - -spec = Specification() diff --git a/ucloud/testing/driver/_scenario.py b/ucloud/testing/driver/_scenario.py deleted file mode 100644 index 201b099..0000000 --- a/ucloud/testing/driver/_scenario.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- - -import functools -from ucloud.testing.driver import _step - - -class Scenario(object): - def __init__(self, spec, id_, title=None, owners=None): - self.id = id_ - self.title = title - self.store = {} - self.errors = [] - self.steps = [] - self.spec = spec - self.owners = owners - - def step(self, invoker, *args, **kwargs): - step = _step.Step(self, invoker, *args, **kwargs) - self.steps.append(step) - return step - - def api(self, **step_kwargs): - def deco(fn): - step = self.step(fn, **step_kwargs) - - @functools.wraps(fn) - def wrapped(*args, **kwargs): - return step.run_api(*args, **kwargs) - - return wrapped - - return deco - - def func(self, **step_kwargs): - def deco(fn): - step = self.step(fn, **step_kwargs) - - @functools.wraps(fn) - def wrapped(*args, **kwargs): - return step.run_func(*args, **kwargs) - - return wrapped - - return deco - - @property - def status(self): - if all([(item.status == "skipped") for item in self.steps]): - status = "skipped" - elif any([(item.status == "failed") for item in self.steps]): - status = "failed" - else: - status = "passed" - return status - - @property - def start_time(self): - times = [ - item.start_time for item in self.steps if item.status != "skipped" - ] - return min(times) if times else 0 - - @property - def end_time(self): - times = [ - item.end_time for item in self.steps if item.status != "skipped" - ] - return max(times) if times else 0 - - def json(self): - return { - "title": self.title, - "status": self.status, - "steps": [item.json() for item in self.steps], - "owners": self.owners, - "execution": { - "duration": self.end_time - self.start_time, - "start_time": self.start_time, - "end_time": self.end_time, - }, - "passed_count": len( - [(1) for item in self.steps if item.status == "passed"] - ), - "failed_count": len( - [(1) for item in self.steps if item.status == "failed"] - ), - "skipped_count": len( - [(1) for item in self.steps if item.status == "skipped"] - ), - } - - def __call__(self, *args, **kwargs): - for step in self.steps: - step(step, *args, **kwargs) diff --git a/ucloud/testing/driver/_specification.py b/ucloud/testing/driver/_specification.py deleted file mode 100644 index ac71279..0000000 --- a/ucloud/testing/driver/_specification.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- - -from ucloud.testing.driver import _scenario - - -class Specification(object): - def __init__(self): - self.scenarios = [] - - def scenario(self, id_, title="", owners=None): - scenario = _scenario.Scenario(self, id_, title, owners) - self.scenarios.append(scenario) - return scenario - - @property - def status(self): - if all([(item.status == "skipped") for item in self.scenarios]): - status = "skipped" - elif any([(item.status == "failed") for item in self.scenarios]): - status = "failed" - else: - status = "passed" - return status - - @property - def start_time(self): - times = [ - item.start_time - for item in self.scenarios - if item.status != "skipped" - ] - return min(times) if times else 0 - - @property - def end_time(self): - times = [ - item.end_time for item in self.scenarios if item.status != "skipped" - ] - return max(times) if times else 0 - - def json(self): - return { - "status": self.status, - "execution": { - "duration": self.end_time - self.start_time, - "start_time": self.start_time, - "end_time": self.end_time, - }, - "scenarios": [item.json() for item in self.scenarios], - "passed_count": len( - [(1) for item in self.scenarios if item.status == "passed"] - ), - "failed_count": len( - [(1) for item in self.scenarios if item.status == "failed"] - ), - "skipped_count": len( - [(1) for item in self.scenarios if item.status == "skipped"] - ), - } diff --git a/ucloud/testing/driver/_step.py b/ucloud/testing/driver/_step.py deleted file mode 100644 index 0b9168d..0000000 --- a/ucloud/testing/driver/_step.py +++ /dev/null @@ -1,150 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import time -from ucloud.core.transport import http -from ucloud.testing import exc, utest, op -from ucloud.testing.exc import ValueNotFoundError, CompareError - -logger = logging.getLogger(__name__) - - -class Step(object): - def __init__( - self, - scenario, - invoker, - max_retries=0, - retry_interval=0, - startup_delay=0, - retry_for=(CompareError, ValueNotFoundError), - fast_fail=False, - validators=None, - title="", - **kwargs - ): - """ Step is the test step in a test scenario - :param invoker: invoker is a callable function - :param max_retries: the maximum retry number by the `retry_for` exception, - it will resolve the flaky testing case - :param retry_interval: the interval between twice retrying - :param retry_for: the exceptions to retrying - :param startup_delay: the delay seconds before any action execution - :param fast_fail: if fast fail is true, the test will fail when got - unexpected exception - :return: - """ - self.invoker = invoker - self.validators = validators or (lambda _: []) - self.max_retries = max_retries - self.retry_interval = retry_interval - self.retry_for = retry_for - self.startup_delay = startup_delay - self.fast_fail = fast_fail - self.start_time = 0 - self.end_time = 0 - self.status = "skipped" - self.title = title - self.type = "api" - self.errors = [] - self.extras = kwargs - self.scenario = scenario - self.store = scenario.store - self.api_retries = [] - - def run_api(self, client, *args, **kwargs): - client.transport.middleware.response(self._handle_response, 0) - try: - result = self._run( - self._set_default_response, client, *args, **kwargs - ) - except Exception as e: - raise e - finally: - client.transport.middleware.response_handlers.pop(0) - return result - - def run_func(self, *args, **kwargs): - return self._run(None, *args, **kwargs) - - def json(self): - return { - "title": self.title, - "type": self.type, - "status": self.status, - "execution": { - "max_retries": self.max_retries, - "retry_interval": self.retry_interval, - "startup_delay": self.startup_delay, - "fast_fail": self.fast_fail, - "duration": self.end_time - self.start_time, - "start_time": self.start_time, - "end_time": self.end_time, - }, - "api_retries": self.api_retries, - "errors": list(set([str(e) for e in self.errors])), - } - - def _handle_response(self, resp): - req = resp.request.payload() - req.pop("Signature", None) - self.api_retries.append( - { - "request": req, - "response": resp.json(), - "request_uuid": resp.headers.get("X-UCLOUD-REQUEST-UUID"), - "request_time": resp.request.request_time, - } - ) - return resp - - def _set_default_response(self, result): - if result is None: - return result - result.setdefault("RetCode", 0) - if "action" in self.extras: - result["Action"] = "{}Response".format(self.extras["action"]) - return result - - def _run(self, invoke_callback=None, *args, **kwargs): - self.start_time = time.time() - try: - result = self._run_with_callback(invoke_callback, *args, **kwargs) - except Exception as e: - raise e - finally: - self.end_time = time.time() - return result - - def _run_with_callback(self, invoke_callback=None, *args, **kwargs): - if self.startup_delay: - time.sleep(self.startup_delay) - for i in range(self.max_retries + 1): - self.errors.clear() - try: - result = self.invoker(self, *args, **kwargs) - except Exception as e: - result = None - self.errors.append(e) - else: - invoke_callback and invoke_callback(result) - for validator in self.validators(self.store): - try: - op.check( - validator[0], - utest.value_at_path(result, validator[1]), - validator[2], - ) - except self.retry_for as e: - self.errors.append(e) - except Exception as e: - self.errors.append(e) - if self.errors: - if i == self.max_retries: - self.status = "failed" - raise exc.ValidateError(self.errors) - if self.retry_interval: - time.sleep(self.retry_interval) - continue - self.status = "passed" - return result or None diff --git a/ucloud/testing/env.py b/ucloud/testing/env.py deleted file mode 100644 index a41ee14..0000000 --- a/ucloud/testing/env.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- - -import os - -ACC_ENV_KEY = "USDKACC" -ACC_SKIP_REASON = "skip test for non-acc environment" - - -def get_skip_reason(): - return ACC_SKIP_REASON - - -def is_acc(): - """ check test env is acceptance testing or not """ - return os.getenv(ACC_ENV_KEY) - - -def is_ut(): - """ check test env is unit testing or not """ - return not is_acc() - - -def pre_check_env(): - """ pre check environment for testing - - NOTE: system environment variables credential is required for test environment - """ - assert os.getenv("UCLOUD_PUBLIC_KEY"), "invalid public key" - assert os.getenv("UCLOUD_PRIVATE_KEY"), "invalid private key" - assert os.getenv("UCLOUD_PROJECT_ID"), "invalid region" diff --git a/ucloud/testing/exc.py b/ucloud/testing/exc.py deleted file mode 100644 index c850fd6..0000000 --- a/ucloud/testing/exc.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- - - -class UTestError(Exception): - pass - - -class ValidateError(UTestError): - def __init__(self, errors): - self.errors = errors - - def __str__(self): - return str(self.errors) - - -class ValueNotFoundError(UTestError): - pass - - -class CompareError(UTestError): - pass diff --git a/ucloud/testing/funcs.py b/ucloud/testing/funcs.py deleted file mode 100644 index 2d5b7ad..0000000 --- a/ucloud/testing/funcs.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- - -import datetime -import time - - -def concat(*args): - """ cancat strings - - >>> concat(42, 'foo', 'bar') - '42foobar' - """ - return "".join([str(s) for s in args]) - - -def concat_without_dot(args): - """ replace blank - - >>> concat_without_dot('42foo bar') - '42foobar' - """ - return "".join([str(s) for s in args.split()]) - - -def search_value(array, origin_key, origin_value, dest_key): - """ given origin key and value,search dest_value form array by dest_key - - >>> d = [{"UHostId": "foo", "Name": "testing"}] - >>> search_value(d, "Name", "testing", "UHostId") - 'foo' - """ - arr = [i.get(dest_key, "") for i in array if i[origin_key] == origin_value] - if arr: - return arr[0] - return "" - - -def timedelta(timestamp, value, typ="days"): - """ given timestamp(10bit) and calculate relative delta time - - >>> timedelta(0, 1, "days") - 86400.0 - - :param timestamp: timestamp (round to second) - :param value: float, can as positive or negative - :param typ: days/hours - :return: timestamp - """ - value = int(value) - dt = datetime.datetime.fromtimestamp(float(timestamp)) - if typ == "days": - dt += datetime.timedelta(days=value) - elif typ == "hours": - dt += datetime.timedelta(hours=value) - return time.mktime(dt.timetuple()) - - -def get_timestamp(length=13): - """ get current timestamp string - - >>> len(str(int(get_timestamp(10)))) - 10 - - :param length: length of timestamp, can only between 0 and 16 - :return: - """ - if isinstance(length, int) and 0 < length < 17: - return int("{:.6f}".format(time.time()).replace(".", "")[:length]) - raise ValueError("timestamp length can only between 0 and 16.") diff --git a/ucloud/testing/mock.py b/ucloud/testing/mock.py deleted file mode 100644 index e99df25..0000000 --- a/ucloud/testing/mock.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -import json -from ucloud.core.transport import Transport, Request, Response - - -class MockedTransport(Transport): - def __init__(self): - super(MockedTransport, self).__init__() - self.transport_handlers = [] - self.client_handler = [] - - def send(self, req, **options): - resp = Response(req.url, req.method) - for handler in self.transport_handlers: - resp = handler(req) - for handler in self.client_handler: - payload = handler(req.payload()) - resp.content = json.dumps(payload).encode("utf-8") - return resp - - def mock(self, handler): - self.transport_handlers.append(handler) - - def mock_data(self, handler): - self.client_handler.append(handler) diff --git a/ucloud/testing/op.py b/ucloud/testing/op.py deleted file mode 100644 index 000beb5..0000000 --- a/ucloud/testing/op.py +++ /dev/null @@ -1,193 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -from ucloud.testing.exc import CompareError - - -def eq(value, expected): - """ value is equal to expected - """ - assert value == expected - - -def ne(value, expected): - """ value is equal to expected - """ - assert value != expected - - -def gt(value, expected): - """ value is greater than expected - """ - assert float(value) > float(expected) - - -def ge(value, expected): - """ value is greater than or equal to expected - """ - assert float(value) >= float(expected) - - -def abs_eq(value, expected): - """ value is approx equal to expected - """ - assert round(float(value), 2) == round(float(expected), 2) - - -def lt(value, expected): - """ value is less than excepted - """ - assert float(value) < float(expected) - - -def le(value, expected): - """ value is less than or equal to excepted - """ - assert float(value) <= float(expected) - - -def str_eq(value, expected): - """ value is equal to excepted as string - """ - assert str(value) == str(expected) - - -def float_eq(value, expected): - """ value is equal to excepted as float - """ - assert round(float(value), 2) == round(float(expected), 2) - - -def len_eq(value, expected): - """ length of value is equal to excepted - """ - assert isinstance(expected, int) - assert len(value) == expected - - -def len_gt(value, expected): - """ length of value is greater than excepted - """ - assert isinstance(expected, int) - assert len(value) > expected - - -def len_ge(value, expected): - """ length of value is greater than or equal to excepted - """ - assert isinstance(expected, int) - assert len(value) >= expected - - -def len_lt(value, expected): - """ length of value is less than excepted - """ - assert isinstance(expected, int) - assert len(value) < expected - - -def len_le(value, expected): - """ length of value is less than or equal to excepted - """ - assert isinstance(expected, int) - assert len(value) <= expected - - -def contains(value, expected): - """ value is contains expected - """ - assert expected in value - - -def contained_by(value, expected): - """ value is contained by expected - """ - assert value in expected - - -def type_eq(value, expected): - assert isinstance(value, expected) - - -def regex(value, expected): - assert isinstance(expected, str) - assert isinstance(value, str) - assert re.match(expected, value) - - -def startswith(value, expected): - assert str(value).startswith(expected) - - -def endswith(value, expected): - assert str(value).endswith(expected) - - -def object_contains(value, expected): - assert str(expected) in str(value) - - -def object_not_contains(value, expected): - assert str(expected) not in str(value) - - -mapper = { - "eq": eq, - "equals": eq, - "==": eq, - "abs_eq": abs_eq, - "abs_equals": abs_eq, - "lt": lt, - "less_than": lt, - "le": le, - "less_than_or_equals": le, - "gt": gt, - "greater_than": gt, - "ge": ge, - "greater_than_or_equals": ge, - "ne": ne, - "not_equals": ne, - "str_eq": str_eq, - "string_equals": str_eq, - "float_eq": float_eq, - "float_equals": float_eq, - "len_eq": len_eq, - "length_equals": len_eq, - "count_eq": len_eq, - "len_gt": len_gt, - "count_gt": len_gt, - "length_greater_than": len_gt, - "count_greater_than": len_gt, - "len_ge": len_ge, - "count_ge": len_ge, - "length_greater_than_or_equals": len_ge, - "count_greater_than_or_equals": len_ge, - "len_lt": len_lt, - "count_lt": len_lt, - "length_less_than": len_lt, - "count_less_than": len_lt, - "len_le": len_le, - "count_le": len_le, - "length_less_than_or_equals": len_le, - "count_less_than_or_equals": len_le, - "contains": contains, - "contained_by": contained_by, - "type": type_eq, - "regex": regex, - "startswith": startswith, - "endswith": endswith, - "object_contains": object_contains, - "object_not_contains": object_not_contains, -} - - -def check(name, value, expected): - if name not in mapper: - raise CompareError("comparator {} is not found".format(name)) - try: - return mapper.get(name)(value, expected) - except AssertionError as e: - msg = "assert error, expect {} {} {}, got error {}".format( - value, name, expected, e - ) - raise CompareError(msg) diff --git a/ucloud/testing/utest.py b/ucloud/testing/utest.py deleted file mode 100644 index d9ca1b0..0000000 --- a/ucloud/testing/utest.py +++ /dev/null @@ -1,177 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging -import time -from ucloud.client import Client -from ucloud.testing import op -from ucloud.testing.exc import ValueNotFoundError, CompareError, ValidateError - -logger = logging.getLogger(__name__) - - -class Step(object): - def __init__( - self, - invoker, - max_retries=0, - retry_interval=0, - startup_delay=0, - retry_for=(CompareError, ValueNotFoundError), - fast_fail=False, - validators=None, - **kwargs - ): - """ Step is the test step in a test scenario - :param invoker: invoker is a callable function - :param max_retries: the maximum retry number by the `retry_for` exception, - it will resolve the flaky testing case - :param retry_interval: the interval between twice retrying - :param retry_for: the exceptions to retrying - :param startup_delay: the delay seconds before any action execution - :param fast_fail: if fast fail is true, the test will fail when got - unexpected exception - :return: - """ - self.invoker = invoker - self.max_retries = max_retries - self.retry_interval = retry_interval - self.startup_delay = startup_delay - self.retry_for = retry_for - self.fast_fail = fast_fail - self.validators = validators or (lambda _: []) - self.extras = kwargs - - def run(self, client, variables): - if self.startup_delay: - time.sleep(self.startup_delay) - for i in range(self.max_retries + 1): - try: - result = self.invoker(client, variables) - except self.retry_for as e: - if i == self.max_retries: - raise e - if self.retry_interval: - time.sleep(self.retry_interval) - continue - else: - result = self.set_default_response(result) - errors = [] - for validator in self.validators(variables): - try: - op.check( - validator[0], - value_at_path(result, validator[1]), - validator[2], - ) - except self.retry_for as e: - errors.append(e) - if errors: - if i == self.max_retries: - raise ValidateError(errors) - if self.retry_interval: - time.sleep(self.retry_interval) - continue - return result - - def set_default_response(self, resp): - resp = resp.copy() - resp.setdefault("RetCode", 0) - if "action" in self.extras: - resp["Action"] = "{}Response".format(self.extras["action"]) - return resp - - -class Scenario(object): - def __init__(self, id_): - self.id = id_ - self.variables = {} - self.errors = [] - self.steps = [] - - def summary(self): - logger.info("=" * 42) - logger.info("TEST SET {}".format(self.id)) - logger.info("=" * 42) - if self.errors: - logger.info("-" * 42) - logger.info("ERRORS") - logger.info("-" * 42) - for err in self.errors: - logger.error(err) - logger.info("Errors!") - else: - logger.info("Success!") - - def step( - self, - max_retries=0, - retry_interval=0, - startup_delay=0, - retry_for=(CompareError, ValueNotFoundError), - fast_fail=False, - validators=None, - **kwargs - ): - def deco(fn): - step = Step( - invoker=fn, - max_retries=max_retries, - retry_interval=retry_interval, - startup_delay=startup_delay, - retry_for=retry_for, - fast_fail=fast_fail, - validators=validators, - **kwargs - ) - self.steps.append(step) - return fn - - return deco - - def run(self, client): - for i, step in enumerate(self.steps): - try: - action = step.extras.get("action", "unknown") - client.logger.info( - "running {} step {} {}".format(self.id, i + 1, action) - ) - step.run(client, self.variables) - except CompareError as e: - self.errors.append(e) - if step.fast_fail: - self.summary() - raise e - client.logger.error(e) - self.summary() - - def initial(self, variables=None): - self.variables = variables - - -def value_at_path(d, path): - """ access value by object path - - :param d: dict or list of dict - :param path: object path like `Data.1.UHostId` - :return: any value access by path - """ - if d is None: - return - indices = path.split(".") - result = d - for i, key in enumerate(indices): - if isinstance(result, list): - if not key.isdigit(): - return - if len(result) <= int(key): - msg = "{} not found".format(".".join(indices[: i + 1])) - raise ValueNotFoundError(msg) - result = result[int(key)] - continue - if isinstance(result, dict): - result = {k.lower(): v for k, v in result.items()}.get(key.lower()) - if result is None: - msg = "{} not found".format(".".join(indices[: i + 1])) - raise ValueNotFoundError(msg) - continue - return result diff --git a/ucloud/version.py b/ucloud/version.py deleted file mode 100644 index 3179213..0000000 --- a/ucloud/version.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -version = "0.9.2" diff --git a/usage.html b/usage.html new file mode 100644 index 0000000..a3137bf --- /dev/null +++ b/usage.html @@ -0,0 +1,182 @@ + + + + + + + + Usage — ucloud-sdk-python3 documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Usage

+
+

Type System

+

UCloud Python SDK has type system for runtime checking.

+

For example:

+
client.uhost().create_uhost_instance({
+    'CPU': "i am not a integer",
+})
+
+
+

it will raise ValidationException with invalid integer and some required field is miss matched.

+
+
+

Wait State Changed

+

SDK also provide state waiter helper to improver usage experience.

+

When using it?

+

Waiter can wait for remote state is achieved to target state. such as,

+
    +
  • create and wait for resource state is completed.
  • +
  • invoke/start/stop a resource and wait for it is finished.
  • +
  • custom retry policies and wait for retrying is finished.
  • +
+

For example:

+
def mget_uhost_states(uhost_ids):
+    resp = client.uhost().describe_uhost_instance({'UHostIds': uhost_ids})
+    return [inst.get('State') for inst in resp.get('UHostSet')]
+
+# Stop all instances
+for uhost_id in uhost_ids:
+    client.uhost().stop_uhost_instance({'UHostId': uhost_id})
+
+# Wait all instances is stopped
+wait.wait_for_state(
+    target=['stopped'], pending=['pending'],
+    timeout=300, # wait 5min
+    refresh=lambda: (
+        'stopped' if all([state == 'Stopped' for state in mget_uhost_states(uhost_ids)]) else 'pending'
+    ),
+)
+
+# Remove all instances
+for uhost_id in uhost_ids:
+    client.uhost().terminate_uhost_instance({'UHostId': uhost_id})
+
+
+

By the default, waiter will use exponential back-off delay between twice request. +it will raise WaitTimeoutException when timeout is reached.

+
+
+

Client/Transport Middleware

+

UCloud SDK provide middleware feature to client or transport level request.

+

It allowed to add custom logic into the lifecycle of request/response.

+

For example:

+
@client.middleware.request
+def log_params(req):
+    print('[REQ]', req)
+
+@client.middleware.response
+def log_response(resp):
+    print('[RESP]', resp)
+
+
+

or transport:

+
from ucloud.core.transport import RequestsTransport
+
+transport = RequestsTransport()
+
+@transport.middleware.request
+def log_request(req):
+    print('[REQ]', req)
+
+@transport.middleware.response
+def log_response(resp):
+    print('[RESP]', resp)
+
+Client({'Region': 'cn-bj2'}, transport=transport)
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file