byteplus-python-sdk-v2 3.0.61__py2.py3-none-any.whl → 3.0.62__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {byteplus_python_sdk_v2-3.0.61.dist-info → byteplus_python_sdk_v2-3.0.62.dist-info}/METADATA +1 -1
- {byteplus_python_sdk_v2-3.0.61.dist-info → byteplus_python_sdk_v2-3.0.62.dist-info}/RECORD +61 -42
- byteplussdkcore/api_client.py +36 -8
- byteplussdkcore/auth/provider_binding.py +42 -0
- byteplussdkcore/auth/providers/sts_oidc_provider.py +23 -3
- byteplussdkcore/auth/providers/sts_provider.py +32 -3
- byteplussdkcore/auth/providers/sts_saml_provider.py +23 -3
- byteplussdkcore/auth/sts_http_config.py +133 -0
- byteplussdkcore/configuration.py +1 -1
- byteplussdkcore/feature/rds/connect_utils.py +6 -8
- byteplussdkcore/interceptor/interceptors/request.py +5 -0
- byteplussdkcore/rest.py +27 -0
- byteplussdkcore/retryer/retry_condition.py +29 -1
- byteplussdkvpc/__init__.py +17 -0
- byteplussdkvpc/api/vpc_api.py +582 -0
- byteplussdkvpc/models/__init__.py +17 -0
- byteplussdkvpc/models/authorize_security_group_egress_batch_request.py +150 -0
- byteplussdkvpc/models/authorize_security_group_egress_batch_response.py +149 -0
- byteplussdkvpc/models/authorize_security_group_ingress_batch_request.py +150 -0
- byteplussdkvpc/models/authorize_security_group_ingress_batch_response.py +149 -0
- byteplussdkvpc/models/create_flow_log_request.py +27 -1
- byteplussdkvpc/models/create_flow_log_response.py +29 -3
- byteplussdkvpc/models/create_ipam_pool_request.py +2 -5
- byteplussdkvpc/models/create_ipam_request.py +0 -3
- byteplussdkvpc/models/create_ipam_resource_discovery_request.py +9 -0
- byteplussdkvpc/models/create_ipam_scope_request.py +2 -5
- byteplussdkvpc/models/create_network_interface_request.py +81 -3
- byteplussdkvpc/models/describe_ipam_pools_request.py +6 -0
- byteplussdkvpc/models/describe_ipam_resource_cidrs_request.py +27 -1
- byteplussdkvpc/models/describe_ipam_resource_discoveries_request.py +6 -0
- byteplussdkvpc/models/describe_ipam_scopes_request.py +6 -0
- byteplussdkvpc/models/describe_ipams_request.py +2 -2
- byteplussdkvpc/models/describe_network_interface_attributes_response.py +79 -1
- byteplussdkvpc/models/ipam_resource_cidr_for_describe_ipam_resource_cidrs_output.py +53 -1
- byteplussdkvpc/models/modify_flow_log_attribute_request.py +27 -1
- byteplussdkvpc/models/modify_flow_log_attribute_response.py +29 -3
- byteplussdkvpc/models/modify_ipam_pool_request.py +2 -5
- byteplussdkvpc/models/modify_ipam_request.py +2 -5
- byteplussdkvpc/models/modify_ipam_resource_discovery_request.py +61 -6
- byteplussdkvpc/models/modify_ipam_resource_discovery_response.py +27 -1
- byteplussdkvpc/models/modify_ipam_scope_request.py +2 -5
- byteplussdkvpc/models/modify_network_interface_attributes_request.py +81 -3
- byteplussdkvpc/models/modify_security_group_egress_batch_request.py +150 -0
- byteplussdkvpc/models/modify_security_group_egress_batch_response.py +149 -0
- byteplussdkvpc/models/modify_security_group_ingress_batch_request.py +150 -0
- byteplussdkvpc/models/modify_security_group_ingress_batch_response.py +149 -0
- byteplussdkvpc/models/network_interface_set_for_describe_network_interfaces_output.py +79 -1
- byteplussdkvpc/models/overlap_detail_for_describe_ipam_resource_cidrs_output.py +175 -0
- byteplussdkvpc/models/permission_for_authorize_security_group_egress_batch_input.py +412 -0
- byteplussdkvpc/models/permission_for_authorize_security_group_ingress_batch_input.py +412 -0
- byteplussdkvpc/models/permission_for_describe_security_group_attributes_output.py +27 -1
- byteplussdkvpc/models/permission_for_modify_security_group_egress_batch_input.py +439 -0
- byteplussdkvpc/models/permission_for_modify_security_group_ingress_batch_input.py +439 -0
- byteplussdkvpc/models/revoke_security_group_egress_batch_request.py +150 -0
- byteplussdkvpc/models/revoke_security_group_egress_batch_response.py +149 -0
- byteplussdkvpc/models/revoke_security_group_ingress_batch_request.py +150 -0
- byteplussdkvpc/models/revoke_security_group_ingress_batch_response.py +149 -0
- {byteplus_python_sdk_v2-3.0.61.dist-info → byteplus_python_sdk_v2-3.0.62.dist-info}/WHEEL +0 -0
- {byteplus_python_sdk_v2-3.0.61.dist-info → byteplus_python_sdk_v2-3.0.62.dist-info}/licenses/LICENSE.txt +0 -0
- {byteplus_python_sdk_v2-3.0.61.dist-info → byteplus_python_sdk_v2-3.0.62.dist-info}/licenses/NOTICE.md +0 -0
- {byteplus_python_sdk_v2-3.0.61.dist-info → byteplus_python_sdk_v2-3.0.62.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
"""Proxy / TLS customization shared by the STS credential providers.
|
|
3
|
+
|
|
4
|
+
This mirrors the Go SDK's ``ProxyConfig`` (see ``byteplus/credentials/
|
|
5
|
+
http_client.go``). It bundles the three public knobs used when reaching the
|
|
6
|
+
STS endpoint and knows how to project them onto an SDK ``Configuration``:
|
|
7
|
+
|
|
8
|
+
proxy_url -> configuration.proxy
|
|
9
|
+
ca_file -> configuration.ssl_ca_cert
|
|
10
|
+
insecure_skip_verify -> configuration.verify_ssl (inverted)
|
|
11
|
+
|
|
12
|
+
Unlike the Go SDK -- which builds a dedicated ``*http.Transport`` -- the
|
|
13
|
+
Python SDK already routes every request (including STS federation calls)
|
|
14
|
+
through ``RESTClientObject``, which reads these ``Configuration`` fields
|
|
15
|
+
directly. So the only thing this helper needs to do is set the fields.
|
|
16
|
+
|
|
17
|
+
An explicit provider ``proxy_url`` wins over its client-local fallback.
|
|
18
|
+
When both are empty, the transport retains default configuration and
|
|
19
|
+
``HTTP_PROXY`` / ``HTTPS_PROXY`` lookup; it does not implement ``NO_PROXY``.
|
|
20
|
+
|
|
21
|
+
TLS priority also matches Go's ``tls.Config``: ``insecure_skip_verify``
|
|
22
|
+
takes precedence over ``ca_file`` (when verification is skipped the custom
|
|
23
|
+
CA is irrelevant).
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import absolute_import
|
|
27
|
+
|
|
28
|
+
import base64
|
|
29
|
+
|
|
30
|
+
import six
|
|
31
|
+
from six.moves.urllib.parse import unquote, urlparse
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class StsHttpConfig(object):
|
|
35
|
+
"""Carries proxy / TLS options for a single STS request path.
|
|
36
|
+
|
|
37
|
+
:param proxy_url: Forward proxy address, ``scheme://[user:password@]host:port``.
|
|
38
|
+
Empty preserves default configuration and environment lookup.
|
|
39
|
+
:param ca_file: Path to a custom CA bundle (PEM) used to verify the STS
|
|
40
|
+
server certificate. Restores verification unless skipped.
|
|
41
|
+
Empty inherits ssl_ca_cert, otherwise REST uses certifi.
|
|
42
|
+
:param insecure_skip_verify: When True, skip TLS certificate/hostname
|
|
43
|
+
verification. For debugging only; never use in production.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def __init__(self, proxy_url=None, ca_file=None, insecure_skip_verify=False):
|
|
47
|
+
self.proxy_url = proxy_url or None
|
|
48
|
+
self.ca_file = ca_file or None
|
|
49
|
+
self.insecure_skip_verify = bool(insecure_skip_verify)
|
|
50
|
+
|
|
51
|
+
def is_empty(self):
|
|
52
|
+
"""True when no proxy/TLS option is configured.
|
|
53
|
+
|
|
54
|
+
Callers use this to leave the underlying ``Configuration`` untouched,
|
|
55
|
+
so existing behavior (including BYTEPLUS env-var proxies) is
|
|
56
|
+
preserved when the user did not opt in. Mirrors Go's ``IsZero``.
|
|
57
|
+
"""
|
|
58
|
+
return (not self.proxy_url) and (not self.ca_file) and (not self.insecure_skip_verify)
|
|
59
|
+
|
|
60
|
+
def apply_to_configuration(self, configuration):
|
|
61
|
+
"""Project the configured options onto ``configuration`` in place.
|
|
62
|
+
|
|
63
|
+
No-op when :meth:`is_empty` is True.
|
|
64
|
+
"""
|
|
65
|
+
if self.is_empty():
|
|
66
|
+
return configuration
|
|
67
|
+
|
|
68
|
+
if self.proxy_url:
|
|
69
|
+
# Highest-priority proxy source; RESTClientObject honors this over
|
|
70
|
+
# http_proxy / https_proxy / env vars.
|
|
71
|
+
configuration.proxy = self.proxy_url
|
|
72
|
+
|
|
73
|
+
# TLS: insecure_skip_verify wins over ca_file (same as Go's tls.Config,
|
|
74
|
+
# where RootCAs is ignored once InsecureSkipVerify is set).
|
|
75
|
+
if self.insecure_skip_verify:
|
|
76
|
+
configuration.verify_ssl = False
|
|
77
|
+
configuration.ssl_ca_cert = None
|
|
78
|
+
elif self.ca_file:
|
|
79
|
+
configuration.verify_ssl = True
|
|
80
|
+
configuration.ssl_ca_cert = self.ca_file
|
|
81
|
+
|
|
82
|
+
return configuration
|
|
83
|
+
|
|
84
|
+
def proxy_authorization_header(self):
|
|
85
|
+
"""Return the ``Proxy-Authorization`` header value, or None.
|
|
86
|
+
|
|
87
|
+
Delegates to :func:`build_proxy_authorization_header` using this
|
|
88
|
+
config's ``proxy_url``.
|
|
89
|
+
"""
|
|
90
|
+
return build_proxy_authorization_header(self.proxy_url)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def build_proxy_authorization_header(proxy_url):
|
|
94
|
+
"""Build a ``Basic`` ``Proxy-Authorization`` value from an embedded userinfo.
|
|
95
|
+
|
|
96
|
+
urllib3 (v2) does NOT automatically forward the ``user:password@`` embedded
|
|
97
|
+
in a proxy URL as a ``Proxy-Authorization`` header, whereas Go's
|
|
98
|
+
``http.ProxyURL`` / ``http.ProxyFromEnvironment`` do. To keep behavior
|
|
99
|
+
aligned with the Go SDK, callers extract this header explicitly and pass it
|
|
100
|
+
to ``ProxyManager(proxy_headers=...)``.
|
|
101
|
+
|
|
102
|
+
Returns None when ``proxy_url`` is empty or carries no userinfo. Raises
|
|
103
|
+
``ValueError`` when ``proxy_url`` cannot be parsed.
|
|
104
|
+
"""
|
|
105
|
+
if not proxy_url:
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
try:
|
|
109
|
+
parsed = urlparse(proxy_url)
|
|
110
|
+
except (ValueError, AttributeError) as e:
|
|
111
|
+
raise ValueError("invalid proxy url {0!r}: {1}".format(proxy_url, e))
|
|
112
|
+
|
|
113
|
+
username = parsed.username
|
|
114
|
+
if username is None:
|
|
115
|
+
return None
|
|
116
|
+
password = parsed.password or ""
|
|
117
|
+
|
|
118
|
+
# Go's http.Transport derives proxy Basic auth from url.Userinfo, whose
|
|
119
|
+
# Username()/Password() return the PERCENT-DECODED values. urlparse keeps
|
|
120
|
+
# userinfo raw, so decode here to stay byte-for-byte identical with the Go
|
|
121
|
+
# SDK (e.g. a "p%40ss" password must be sent as "p@ss").
|
|
122
|
+
# Python 2 unquote accepts UTF-8 bytes; Python 3 accepts text.
|
|
123
|
+
if six.PY2:
|
|
124
|
+
username = username.encode("utf-8") if isinstance(username, six.text_type) else username
|
|
125
|
+
password = password.encode("utf-8") if isinstance(password, six.text_type) else password
|
|
126
|
+
username = unquote(username)
|
|
127
|
+
password = unquote(password)
|
|
128
|
+
if isinstance(username, six.text_type):
|
|
129
|
+
username = username.encode("utf-8")
|
|
130
|
+
if isinstance(password, six.text_type):
|
|
131
|
+
password = password.encode("utf-8")
|
|
132
|
+
# urllib3.make_headers uses Latin-1, which cannot encode UTF-8 userinfo.
|
|
133
|
+
return "Basic " + base64.b64encode(username + b":" + password).decode("ascii")
|
byteplussdkcore/configuration.py
CHANGED
|
@@ -302,7 +302,7 @@ class Configuration(six.with_metaclass(TypeWithDefault, object)):
|
|
|
302
302
|
"OS: {env}\n" \
|
|
303
303
|
"Python Version: {pyversion}\n" \
|
|
304
304
|
"Version of the API: 0.1.0\n" \
|
|
305
|
-
"SDK Package Version: 3.0.
|
|
305
|
+
"SDK Package Version: 3.0.62".\
|
|
306
306
|
format(env=sys.platform, pyversion=sys.version)
|
|
307
307
|
|
|
308
308
|
@property
|
|
@@ -6,9 +6,8 @@ This module provides utilities for generating authentication tokens for RDS MySQ
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
from byteplussdkcore.endpoint.providers.standard_provider import StandardEndpointResolver
|
|
9
|
-
from byteplussdkcore.interceptor import InterceptorChain, InterceptorContext,
|
|
9
|
+
from byteplussdkcore.interceptor import InterceptorChain, InterceptorContext, \
|
|
10
10
|
ResolveEndpointInterceptor
|
|
11
|
-
from byteplussdkcore.interceptor import Request
|
|
12
11
|
|
|
13
12
|
DEFAULT_SERVICE = 'rds_mysql'
|
|
14
13
|
DEFAULT_API_VERSION = '2022-01-01'
|
|
@@ -58,11 +57,10 @@ def build_auth_token(api_client, db_user, instance_id, expires=None):
|
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
# Create Request with presign mode
|
|
61
|
-
request =
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
query_params=query)
|
|
60
|
+
request = api_client._create_request(
|
|
61
|
+
resource_path='/{}/{}/{}/get/text_plain/'.format(
|
|
62
|
+
DEFAULT_API, DEFAULT_API_VERSION, DEFAULT_SERVICE),
|
|
63
|
+
method='GET', query_params=query)
|
|
66
64
|
request.endpoint_provider = StandardEndpointResolver()
|
|
67
65
|
request.service = DEFAULT_SERVICE
|
|
68
66
|
request.is_presign = True
|
|
@@ -82,7 +80,7 @@ def build_auth_token(api_client, db_user, instance_id, expires=None):
|
|
|
82
80
|
|
|
83
81
|
# Step 3: Sign request (host is None, won't be included in signature)
|
|
84
82
|
sign_chain = InterceptorChain()
|
|
85
|
-
sign_chain.append_request_interceptor(
|
|
83
|
+
sign_chain.append_request_interceptor(api_client.sign_request_interceptor)
|
|
86
84
|
context = sign_chain.execute_request(context)
|
|
87
85
|
|
|
88
86
|
return context.request.signed_query
|
|
@@ -57,6 +57,10 @@ class Request(object):
|
|
|
57
57
|
self.session_token = configuration.session_token
|
|
58
58
|
self.region = configuration.region
|
|
59
59
|
self.scheme = configuration.scheme
|
|
60
|
+
# Business proxy snapshot; credential routing belongs to ApiClient's binding.
|
|
61
|
+
self.proxy = configuration.proxy
|
|
62
|
+
self.http_proxy = configuration.http_proxy
|
|
63
|
+
self.https_proxy = configuration.https_proxy
|
|
60
64
|
self.endpoint_provider = configuration.endpoint_provider
|
|
61
65
|
self.custom_bootstrap_region = configuration.custom_bootstrap_region
|
|
62
66
|
self.use_dual_stack = configuration.use_dual_stack
|
|
@@ -64,6 +68,7 @@ class Request(object):
|
|
|
64
68
|
# ApiClient injects its private base retryer before interception.
|
|
65
69
|
self.auto_retry = configuration.auto_retry
|
|
66
70
|
self.retryer = None
|
|
71
|
+
# ApiClient replaces this with its persistent binding before signing.
|
|
67
72
|
self.credential_provider = configuration.credential_provider
|
|
68
73
|
self.invocation_id = str(uuid.uuid4())
|
|
69
74
|
self.retry_count = 0
|
byteplussdkcore/rest.py
CHANGED
|
@@ -147,6 +147,11 @@ class RESTClientObject(object):
|
|
|
147
147
|
)
|
|
148
148
|
|
|
149
149
|
if proxy_url:
|
|
150
|
+
# urllib3 (v2) does not forward the ``user:password@`` embedded in
|
|
151
|
+
# the proxy URL as a Proxy-Authorization header, unlike Go's
|
|
152
|
+
# http.ProxyURL. Extract it explicitly so proxies requiring Basic
|
|
153
|
+
# auth work the same way across SDKs.
|
|
154
|
+
proxy_headers = self.__proxy_authorization_headers(proxy_url)
|
|
150
155
|
self.pool_manager = urllib3.ProxyManager(
|
|
151
156
|
num_pools=pools_size,
|
|
152
157
|
maxsize=maxsize,
|
|
@@ -155,6 +160,7 @@ class RESTClientObject(object):
|
|
|
155
160
|
cert_file=configuration.cert_file,
|
|
156
161
|
key_file=configuration.key_file,
|
|
157
162
|
proxy_url=proxy_url,
|
|
163
|
+
proxy_headers=proxy_headers,
|
|
158
164
|
timeout=timeout,
|
|
159
165
|
retries=Retry(total=False),
|
|
160
166
|
**addition_pool_args
|
|
@@ -191,6 +197,27 @@ class RESTClientObject(object):
|
|
|
191
197
|
proxy_url = os.getenv('https_proxy')
|
|
192
198
|
return proxy_url
|
|
193
199
|
|
|
200
|
+
@staticmethod
|
|
201
|
+
def __proxy_authorization_headers(proxy_url):
|
|
202
|
+
"""Build proxy_headers carrying Proxy-Authorization, or None.
|
|
203
|
+
|
|
204
|
+
Returns a dict ``{'Proxy-Authorization': 'Basic ...'}`` when the proxy
|
|
205
|
+
URL embeds a ``user:password@`` userinfo, otherwise None (so urllib3
|
|
206
|
+
keeps its default empty proxy headers). Never raises: a malformed proxy
|
|
207
|
+
URL simply yields no auth header and lets the connection attempt (and
|
|
208
|
+
its clearer downstream error) proceed.
|
|
209
|
+
"""
|
|
210
|
+
try:
|
|
211
|
+
from byteplussdkcore.auth.sts_http_config import (
|
|
212
|
+
build_proxy_authorization_header,
|
|
213
|
+
)
|
|
214
|
+
value = build_proxy_authorization_header(proxy_url)
|
|
215
|
+
except Exception:
|
|
216
|
+
return None
|
|
217
|
+
if not value:
|
|
218
|
+
return None
|
|
219
|
+
return {"Proxy-Authorization": value}
|
|
220
|
+
|
|
194
221
|
def request(self, method, url, query_params=None, headers=None,
|
|
195
222
|
body=None, post_params=None, _preload_content=True,
|
|
196
223
|
_request_timeout=None):
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import errno
|
|
1
2
|
import json
|
|
2
3
|
import logging
|
|
3
4
|
import socket
|
|
5
|
+
import ssl
|
|
4
6
|
import traceback
|
|
5
7
|
from abc import abstractmethod
|
|
6
8
|
|
|
7
9
|
import urllib3
|
|
10
|
+
from six.moves.http_client import BadStatusLine
|
|
8
11
|
|
|
9
12
|
from byteplussdkcore.observability.debugger import sdk_core_logger
|
|
10
13
|
from byteplussdkcore.rest import ApiException, RESTResponse
|
|
@@ -73,7 +76,7 @@ class DefaultRetryCondition(RetryCondition):
|
|
|
73
76
|
Returns:
|
|
74
77
|
bool: True if the request should be retried, False otherwise.
|
|
75
78
|
"""
|
|
76
|
-
if err is not None and
|
|
79
|
+
if err is not None and self._is_retryable_exception(err):
|
|
77
80
|
sdk_core_logger.debug_retry("retry for retryable exception, err: %s", err)
|
|
78
81
|
return True
|
|
79
82
|
|
|
@@ -105,6 +108,31 @@ class DefaultRetryCondition(RetryCondition):
|
|
|
105
108
|
sdk_core_logger.debug_retry("no need to retry")
|
|
106
109
|
return False
|
|
107
110
|
|
|
111
|
+
@classmethod
|
|
112
|
+
def _is_retryable_exception(cls, err):
|
|
113
|
+
# Retry the underlying connection failure, not every proxy failure.
|
|
114
|
+
# In particular, a CONNECT 407 or a TLS/configuration error must stop.
|
|
115
|
+
seen = set()
|
|
116
|
+
while isinstance(err, (urllib3.exceptions.ProxyError, urllib3.exceptions.MaxRetryError)):
|
|
117
|
+
if id(err) in seen:
|
|
118
|
+
return False
|
|
119
|
+
seen.add(id(err))
|
|
120
|
+
if isinstance(err, urllib3.exceptions.ProxyError):
|
|
121
|
+
err = err.original_error
|
|
122
|
+
else:
|
|
123
|
+
err = err.reason
|
|
124
|
+
if isinstance(err, (ssl.SSLError, urllib3.exceptions.SSLError)):
|
|
125
|
+
return False
|
|
126
|
+
if isinstance(err, cls.__retry_exceptions):
|
|
127
|
+
return True
|
|
128
|
+
# RemoteDisconnected on Python 3, empty BadStatusLine on Python 2.
|
|
129
|
+
if isinstance(err, BadStatusLine) and err.line in ("", "''"):
|
|
130
|
+
return True
|
|
131
|
+
return isinstance(err, socket.error) and err.errno in (
|
|
132
|
+
errno.ECONNRESET, errno.ECONNREFUSED, errno.ECONNABORTED,
|
|
133
|
+
errno.EPIPE, errno.ETIMEDOUT, errno.ENETUNREACH, errno.EHOSTUNREACH,
|
|
134
|
+
)
|
|
135
|
+
|
|
108
136
|
@staticmethod
|
|
109
137
|
def __json_loads(data):
|
|
110
138
|
"""
|
byteplussdkvpc/__init__.py
CHANGED
|
@@ -59,8 +59,12 @@ from byteplussdkvpc.models.attach_network_interface_request import AttachNetwork
|
|
|
59
59
|
from byteplussdkvpc.models.attach_network_interface_response import AttachNetworkInterfaceResponse
|
|
60
60
|
from byteplussdkvpc.models.attachment_for_describe_network_interface_attributes_output import AttachmentForDescribeNetworkInterfaceAttributesOutput
|
|
61
61
|
from byteplussdkvpc.models.attachment_for_describe_network_interfaces_output import AttachmentForDescribeNetworkInterfacesOutput
|
|
62
|
+
from byteplussdkvpc.models.authorize_security_group_egress_batch_request import AuthorizeSecurityGroupEgressBatchRequest
|
|
63
|
+
from byteplussdkvpc.models.authorize_security_group_egress_batch_response import AuthorizeSecurityGroupEgressBatchResponse
|
|
62
64
|
from byteplussdkvpc.models.authorize_security_group_egress_request import AuthorizeSecurityGroupEgressRequest
|
|
63
65
|
from byteplussdkvpc.models.authorize_security_group_egress_response import AuthorizeSecurityGroupEgressResponse
|
|
66
|
+
from byteplussdkvpc.models.authorize_security_group_ingress_batch_request import AuthorizeSecurityGroupIngressBatchRequest
|
|
67
|
+
from byteplussdkvpc.models.authorize_security_group_ingress_batch_response import AuthorizeSecurityGroupIngressBatchResponse
|
|
64
68
|
from byteplussdkvpc.models.authorize_security_group_ingress_request import AuthorizeSecurityGroupIngressRequest
|
|
65
69
|
from byteplussdkvpc.models.authorize_security_group_ingress_response import AuthorizeSecurityGroupIngressResponse
|
|
66
70
|
from byteplussdkvpc.models.bandwidth_package_for_describe_bandwidth_packages_output import BandwidthPackageForDescribeBandwidthPackagesOutput
|
|
@@ -384,6 +388,10 @@ from byteplussdkvpc.models.modify_route_table_attributes_request import ModifyRo
|
|
|
384
388
|
from byteplussdkvpc.models.modify_route_table_attributes_response import ModifyRouteTableAttributesResponse
|
|
385
389
|
from byteplussdkvpc.models.modify_security_group_attributes_request import ModifySecurityGroupAttributesRequest
|
|
386
390
|
from byteplussdkvpc.models.modify_security_group_attributes_response import ModifySecurityGroupAttributesResponse
|
|
391
|
+
from byteplussdkvpc.models.modify_security_group_egress_batch_request import ModifySecurityGroupEgressBatchRequest
|
|
392
|
+
from byteplussdkvpc.models.modify_security_group_egress_batch_response import ModifySecurityGroupEgressBatchResponse
|
|
393
|
+
from byteplussdkvpc.models.modify_security_group_ingress_batch_request import ModifySecurityGroupIngressBatchRequest
|
|
394
|
+
from byteplussdkvpc.models.modify_security_group_ingress_batch_response import ModifySecurityGroupIngressBatchResponse
|
|
387
395
|
from byteplussdkvpc.models.modify_security_group_rule_descriptions_egress_request import ModifySecurityGroupRuleDescriptionsEgressRequest
|
|
388
396
|
from byteplussdkvpc.models.modify_security_group_rule_descriptions_egress_response import ModifySecurityGroupRuleDescriptionsEgressResponse
|
|
389
397
|
from byteplussdkvpc.models.modify_security_group_rule_descriptions_ingress_request import ModifySecurityGroupRuleDescriptionsIngressRequest
|
|
@@ -403,7 +411,12 @@ from byteplussdkvpc.models.modify_vpc_attributes_response import ModifyVpcAttrib
|
|
|
403
411
|
from byteplussdkvpc.models.network_acl_attribute_for_describe_network_acl_attributes_output import NetworkAclAttributeForDescribeNetworkAclAttributesOutput
|
|
404
412
|
from byteplussdkvpc.models.network_acl_for_describe_network_acls_output import NetworkAclForDescribeNetworkAclsOutput
|
|
405
413
|
from byteplussdkvpc.models.network_interface_set_for_describe_network_interfaces_output import NetworkInterfaceSetForDescribeNetworkInterfacesOutput
|
|
414
|
+
from byteplussdkvpc.models.overlap_detail_for_describe_ipam_resource_cidrs_output import OverlapDetailForDescribeIpamResourceCidrsOutput
|
|
415
|
+
from byteplussdkvpc.models.permission_for_authorize_security_group_egress_batch_input import PermissionForAuthorizeSecurityGroupEgressBatchInput
|
|
416
|
+
from byteplussdkvpc.models.permission_for_authorize_security_group_ingress_batch_input import PermissionForAuthorizeSecurityGroupIngressBatchInput
|
|
406
417
|
from byteplussdkvpc.models.permission_for_describe_security_group_attributes_output import PermissionForDescribeSecurityGroupAttributesOutput
|
|
418
|
+
from byteplussdkvpc.models.permission_for_modify_security_group_egress_batch_input import PermissionForModifySecurityGroupEgressBatchInput
|
|
419
|
+
from byteplussdkvpc.models.permission_for_modify_security_group_ingress_batch_input import PermissionForModifySecurityGroupIngressBatchInput
|
|
407
420
|
from byteplussdkvpc.models.prefix_list_association_for_describe_prefix_list_associations_output import PrefixListAssociationForDescribePrefixListAssociationsOutput
|
|
408
421
|
from byteplussdkvpc.models.prefix_list_entry_for_create_prefix_list_input import PrefixListEntryForCreatePrefixListInput
|
|
409
422
|
from byteplussdkvpc.models.prefix_list_entry_for_describe_prefix_list_entries_output import PrefixListEntryForDescribePrefixListEntriesOutput
|
|
@@ -430,8 +443,12 @@ from byteplussdkvpc.models.resource_for_describe_network_acls_output import Reso
|
|
|
430
443
|
from byteplussdkvpc.models.resource_for_disassociate_network_acl_input import ResourceForDisassociateNetworkAclInput
|
|
431
444
|
from byteplussdkvpc.models.resource_tag_for_list_tags_for_ipam_resources_output import ResourceTagForListTagsForIpamResourcesOutput
|
|
432
445
|
from byteplussdkvpc.models.resource_tag_for_list_tags_for_resources_output import ResourceTagForListTagsForResourcesOutput
|
|
446
|
+
from byteplussdkvpc.models.revoke_security_group_egress_batch_request import RevokeSecurityGroupEgressBatchRequest
|
|
447
|
+
from byteplussdkvpc.models.revoke_security_group_egress_batch_response import RevokeSecurityGroupEgressBatchResponse
|
|
433
448
|
from byteplussdkvpc.models.revoke_security_group_egress_request import RevokeSecurityGroupEgressRequest
|
|
434
449
|
from byteplussdkvpc.models.revoke_security_group_egress_response import RevokeSecurityGroupEgressResponse
|
|
450
|
+
from byteplussdkvpc.models.revoke_security_group_ingress_batch_request import RevokeSecurityGroupIngressBatchRequest
|
|
451
|
+
from byteplussdkvpc.models.revoke_security_group_ingress_batch_response import RevokeSecurityGroupIngressBatchResponse
|
|
435
452
|
from byteplussdkvpc.models.revoke_security_group_ingress_request import RevokeSecurityGroupIngressRequest
|
|
436
453
|
from byteplussdkvpc.models.revoke_security_group_ingress_response import RevokeSecurityGroupIngressResponse
|
|
437
454
|
from byteplussdkvpc.models.route_entry_for_describe_route_entry_list_output import RouteEntryForDescribeRouteEntryListOutput
|