twc-cli 2.11.0__tar.gz → 2.12.0__tar.gz

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.

Potentially problematic release.


This version of twc-cli might be problematic. Click here for more details.

Files changed (34) hide show
  1. {twc_cli-2.11.0 → twc_cli-2.12.0}/CHANGELOG.md +11 -0
  2. {twc_cli-2.11.0 → twc_cli-2.12.0}/PKG-INFO +1 -1
  3. {twc_cli-2.11.0 → twc_cli-2.12.0}/pyproject.toml +1 -1
  4. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/__version__.py +1 -1
  5. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/api/client.py +60 -0
  6. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/balancer.py +42 -0
  7. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/storage.py +1 -1
  8. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/vars.py +1 -1
  9. {twc_cli-2.11.0 → twc_cli-2.12.0}/COPYING +0 -0
  10. {twc_cli-2.11.0 → twc_cli-2.12.0}/README.md +0 -0
  11. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/__init__.py +0 -0
  12. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/__main__.py +0 -0
  13. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/api/__init__.py +0 -0
  14. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/api/base.py +0 -0
  15. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/api/exceptions.py +0 -0
  16. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/api/types.py +0 -0
  17. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/apiwrap.py +0 -0
  18. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/__init__.py +0 -0
  19. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/account.py +0 -0
  20. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/common.py +0 -0
  21. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/config.py +0 -0
  22. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/database.py +0 -0
  23. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/domain.py +0 -0
  24. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/firewall.py +0 -0
  25. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/floating_ip.py +0 -0
  26. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/image.py +0 -0
  27. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/kubernetes.py +0 -0
  28. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/project.py +0 -0
  29. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/server.py +0 -0
  30. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/ssh_key.py +0 -0
  31. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/commands/vpc.py +0 -0
  32. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/fmt.py +0 -0
  33. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/typerx.py +0 -0
  34. {twc_cli-2.11.0 → twc_cli-2.12.0}/twc/utils.py +0 -0
@@ -2,6 +2,17 @@
2
2
 
3
3
  В этом файле описаны все значимые изменения в Timeweb Cloud CLI. В выпусках мы придерживается правил [семантического версионирования](https://semver.org/lang/ru/).
4
4
 
5
+ # Версия 2.12.0 (2025.xx.xx)
6
+
7
+ ## Добавлено
8
+
9
+ - Добавлены опции `--max-connections`, `--connect-timeout`, `--client-timeout`, `--server-timeout` в команды `twc balancer create`, `twc balancer set`.
10
+ - В регионе `kz-1` для облачных серверов теперь доступен IPv6.
11
+
12
+ ## Изменено
13
+
14
+ - Стандартный ендпоинт объектного хранилища изменён с `s3.timeweb.cloud` на `s3.twcstorage.ru`.
15
+
5
16
  # Версия 2.11.0 (2025.04.01)
6
17
 
7
18
  ## Добавлено
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: twc-cli
3
- Version: 2.11.0
3
+ Version: 2.12.0
4
4
  Summary: Timeweb Cloud Command Line Interface.
5
5
  Home-page: https://github.com/timeweb-cloud/twc
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "twc-cli"
3
- version = "2.11.0"
3
+ version = "2.12.0"
4
4
  description = "Timeweb Cloud Command Line Interface."
5
5
  authors = ["ge <dev@timeweb.cloud>"]
6
6
  homepage = "https://github.com/timeweb-cloud/twc"
@@ -12,5 +12,5 @@
12
12
  import sys
13
13
 
14
14
 
15
- __version__ = "2.11.0"
15
+ __version__ = "2.12.0"
16
16
  __pyversion__ = sys.version.replace("\n", "")
@@ -1162,6 +1162,11 @@ class TimewebCloud(TimewebCloudBase):
1162
1162
  comment: Optional[str] = None,
1163
1163
  project_id: Optional[int] = None,
1164
1164
  certificates: Optional[dict] = None,
1165
+ max_connections: Optional[int] = None,
1166
+ connect_timeout: Optional[int] = None,
1167
+ client_timeout: Optional[int] = None,
1168
+ server_timeout: Optional[int] = None,
1169
+ http_timeout: Optional[int] = None,
1165
1170
  ):
1166
1171
  """Create load balancer."""
1167
1172
  payload = {
@@ -1183,6 +1188,31 @@ class TimewebCloud(TimewebCloudBase):
1183
1188
  **({"comment": comment} if comment else {}),
1184
1189
  **({"project_id": project_id} if project_id else {}),
1185
1190
  **({"certificates": certificates} if certificates else {}),
1191
+ **(
1192
+ {"maxconn": max_connections}
1193
+ if max_connections is not None
1194
+ else {}
1195
+ ),
1196
+ **(
1197
+ {"connect_timeout": connect_timeout}
1198
+ if connect_timeout is not None
1199
+ else {}
1200
+ ),
1201
+ **(
1202
+ {"client_timeout": client_timeout}
1203
+ if client_timeout is not None
1204
+ else {}
1205
+ ),
1206
+ **(
1207
+ {"server_timeout": server_timeout}
1208
+ if server_timeout is not None
1209
+ else {}
1210
+ ),
1211
+ **(
1212
+ {"httprequest_timeout": http_timeout}
1213
+ if http_timeout is not None
1214
+ else {}
1215
+ ),
1186
1216
  }
1187
1217
  return self._request("POST", f"{self.api_url}/balancers", json=payload)
1188
1218
 
@@ -1203,6 +1233,11 @@ class TimewebCloud(TimewebCloudBase):
1203
1233
  proxy_protocol: Optional[bool] = None,
1204
1234
  force_https: Optional[bool] = None,
1205
1235
  backend_keepalive: Optional[bool] = None,
1236
+ max_connections: Optional[int] = None,
1237
+ connect_timeout: Optional[int] = None,
1238
+ client_timeout: Optional[int] = None,
1239
+ server_timeout: Optional[int] = None,
1240
+ http_timeout: Optional[int] = None,
1206
1241
  ):
1207
1242
  """Update load balancer settings."""
1208
1243
  payload = {
@@ -1228,6 +1263,31 @@ class TimewebCloud(TimewebCloudBase):
1228
1263
  if backend_keepalive is not None
1229
1264
  else {}
1230
1265
  ),
1266
+ **(
1267
+ {"maxconn": max_connections}
1268
+ if max_connections is not None
1269
+ else {}
1270
+ ),
1271
+ **(
1272
+ {"connect_timeout": connect_timeout}
1273
+ if connect_timeout is not None
1274
+ else {}
1275
+ ),
1276
+ **(
1277
+ {"client_timeout": client_timeout}
1278
+ if client_timeout is not None
1279
+ else {}
1280
+ ),
1281
+ **(
1282
+ {"server_timeout": server_timeout}
1283
+ if server_timeout is not None
1284
+ else {}
1285
+ ),
1286
+ **(
1287
+ {"httprequest_timeout": http_timeout}
1288
+ if http_timeout is not None
1289
+ else {}
1290
+ ),
1231
1291
  }
1232
1292
  return self._request(
1233
1293
  "PATCH", f"{self.api_url}/balancers/{balancer_id}", json=payload
@@ -198,6 +198,22 @@ def balancer_create(
198
198
  proxy_protocol: bool = typer.Option(False),
199
199
  force_https: bool = typer.Option(False),
200
200
  backend_keepalive: bool = typer.Option(False),
201
+ max_connections: Optional[int] = typer.Option(
202
+ None, help="Backend server's maximum number of concurrent connections."
203
+ ),
204
+ connect_timeout: Optional[int] = typer.Option(
205
+ None,
206
+ help="Maximum time to wait for a connection attempt to a backend server to succeed.",
207
+ ),
208
+ client_timeout: Optional[int] = typer.Option(
209
+ None, help="Maximum inactivity time on the client side."
210
+ ),
211
+ server_timeout: Optional[int] = typer.Option(
212
+ None, help="Maximum time for pending data staying into output buffer."
213
+ ),
214
+ http_timeout: Optional[int] = typer.Option(
215
+ None, help="Maximum allowed time to wait for a complete HTTP request."
216
+ ),
201
217
  project_id: Optional[int] = typer.Option(
202
218
  None,
203
219
  envvar="TWC_PROJECT",
@@ -259,6 +275,11 @@ def balancer_create(
259
275
  "network": {},
260
276
  "project_id": project_id,
261
277
  "certificates": {},
278
+ "max_connections": max_connections,
279
+ "connect_timeout": connect_timeout,
280
+ "client_timeout": client_timeout,
281
+ "server_timeout": server_timeout,
282
+ "http_timeout": http_timeout,
262
283
  }
263
284
 
264
285
  if cert_type == CertType.CUSTOM:
@@ -412,6 +433,22 @@ def balancer_set(
412
433
  proxy_protocol: Optional[bool] = typer.Option(None),
413
434
  force_https: Optional[bool] = typer.Option(None),
414
435
  backend_keepalive: Optional[bool] = typer.Option(None),
436
+ max_connections: Optional[int] = typer.Option(
437
+ None, help="Backend server's maximum number of concurrent connections."
438
+ ),
439
+ connect_timeout: Optional[int] = typer.Option(
440
+ None,
441
+ help="Maximum time to wait for a connection attempt to a backend server to succeed.",
442
+ ),
443
+ client_timeout: Optional[int] = typer.Option(
444
+ None, help="Maximum inactivity time on the client side."
445
+ ),
446
+ server_timeout: Optional[int] = typer.Option(
447
+ None, help="Maximum time for pending data staying into output buffer."
448
+ ),
449
+ http_timeout: Optional[int] = typer.Option(
450
+ None, help="Maximum allowed time to wait for a complete HTTP request."
451
+ ),
415
452
  ):
416
453
  """Change load balancer parameters."""
417
454
  client = create_client(config, profile)
@@ -442,6 +479,11 @@ def balancer_set(
442
479
  proxy_protocol=proxy_protocol,
443
480
  force_https=force_https,
444
481
  backend_keepalive=backend_keepalive,
482
+ max_connections=max_connections,
483
+ connect_timeout=connect_timeout,
484
+ client_timeout=client_timeout,
485
+ server_timeout=server_timeout,
486
+ http_timeout=http_timeout,
445
487
  )
446
488
 
447
489
  fmt.printer(
@@ -611,7 +611,7 @@ def storage_genconfig(
611
611
  "rclone": RCLONE_CONFIG_TEMPLATE.strip(),
612
612
  }
613
613
 
614
- endpoint = "s3.timeweb.cloud"
614
+ endpoint = "s3.twcstorage.ru"
615
615
  if not access_key.isupper():
616
616
  # Legacy object storage service have lowercase usernames only.
617
617
  # New storage, on the contrary, always has keys in uppercase.
@@ -8,7 +8,7 @@ expand or other infrastructure or product changes occur.
8
8
  CONTROL_PANEL_URL = "https://timeweb.cloud/my"
9
9
 
10
10
  # Location specific parameters. May change later.
11
- REGIONS_WITH_IPV6 = ["ru-1", "ru-3", "pl-1", "nl-1"]
11
+ REGIONS_WITH_IPV6 = ["ru-1", "ru-3", "pl-1", "nl-1", "kz-1"]
12
12
  REGIONS_WITH_IMAGES = ["ru-1", "ru-3", "kz-1", "pl-1", "nl-1"]
13
13
  REGIONS_WITH_LAN = ["ru-1", "ru-3", "nl-1", "pl-1", "de-1"]
14
14
  ZONES_WITH_LAN = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes