Skip to content

Commit 326786c

Browse files
feat(cloud): add k8s cluster pools check quotas method
1 parent 130e644 commit 326786c

File tree

7 files changed

+525
-4
lines changed

7 files changed

+525
-4
lines changed

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 640
1+
configured_endpoints: 641
22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-739b0d84ccefaa883a2334ad16738cc87ec625ded28ee0e2e11781f17ba36580.yml
33
openapi_spec_hash: deb6a4c127edd808cfd8c8eb9eb9610b
4-
config_hash: 1607041fe51cd832db709af848355624
4+
config_hash: c6c8ef25ca05ecd4082810d4afd564cf

api.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1046,7 +1046,7 @@ Methods:
10461046
Types:
10471047

10481048
```python
1049-
from gcore.types.cloud.k8s.clusters import K8SClusterPool, K8SClusterPoolList
1049+
from gcore.types.cloud.k8s.clusters import K8SClusterPool, K8SClusterPoolList, K8SClusterPoolQuota
10501050
```
10511051

10521052
Methods:
@@ -1055,6 +1055,7 @@ Methods:
10551055
- <code title="patch /cloud/v2/k8s/clusters/{project_id}/{region_id}/{cluster_name}/pools/{pool_name}">client.cloud.k8s.clusters.pools.<a href="./src/gcore/resources/cloud/k8s/clusters/pools/pools.py">update</a>(pool_name, \*, project_id, region_id, cluster_name, \*\*<a href="src/gcore/types/cloud/k8s/clusters/pool_update_params.py">params</a>) -> <a href="./src/gcore/types/cloud/k8s/clusters/k8s_cluster_pool.py">K8SClusterPool</a></code>
10561056
- <code title="get /cloud/v2/k8s/clusters/{project_id}/{region_id}/{cluster_name}/pools">client.cloud.k8s.clusters.pools.<a href="./src/gcore/resources/cloud/k8s/clusters/pools/pools.py">list</a>(cluster_name, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/k8s/clusters/k8s_cluster_pool_list.py">K8SClusterPoolList</a></code>
10571057
- <code title="delete /cloud/v2/k8s/clusters/{project_id}/{region_id}/{cluster_name}/pools/{pool_name}">client.cloud.k8s.clusters.pools.<a href="./src/gcore/resources/cloud/k8s/clusters/pools/pools.py">delete</a>(pool_name, \*, project_id, region_id, cluster_name) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
1058+
- <code title="post /cloud/v2/k8s/clusters/{project_id}/{region_id}/pools/check_limits">client.cloud.k8s.clusters.pools.<a href="./src/gcore/resources/cloud/k8s/clusters/pools/pools.py">check_quota</a>(\*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/k8s/clusters/pool_check_quota_params.py">params</a>) -> <a href="./src/gcore/types/cloud/k8s/clusters/k8s_cluster_pool_quota.py">K8SClusterPoolQuota</a></code>
10581059
- <code title="get /cloud/v2/k8s/clusters/{project_id}/{region_id}/{cluster_name}/pools/{pool_name}">client.cloud.k8s.clusters.pools.<a href="./src/gcore/resources/cloud/k8s/clusters/pools/pools.py">get</a>(pool_name, \*, project_id, region_id, cluster_name) -> <a href="./src/gcore/types/cloud/k8s/clusters/k8s_cluster_pool.py">K8SClusterPool</a></code>
10591060
- <code title="post /cloud/v2/k8s/clusters/{project_id}/{region_id}/{cluster_name}/pools/{pool_name}/resize">client.cloud.k8s.clusters.pools.<a href="./src/gcore/resources/cloud/k8s/clusters/pools/pools.py">resize</a>(pool_name, \*, project_id, region_id, cluster_name, \*\*<a href="src/gcore/types/cloud/k8s/clusters/pool_resize_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
10601061

src/gcore/resources/cloud/k8s/clusters/pools/pools.py

Lines changed: 173 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,16 @@
2626
async_to_streamed_response_wrapper,
2727
)
2828
from ......_base_client import make_request_options
29-
from ......types.cloud.k8s.clusters import pool_create_params, pool_resize_params, pool_update_params
29+
from ......types.cloud.k8s.clusters import (
30+
pool_create_params,
31+
pool_resize_params,
32+
pool_update_params,
33+
pool_check_quota_params,
34+
)
3035
from ......types.cloud.task_id_list import TaskIDList
3136
from ......types.cloud.k8s.clusters.k8s_cluster_pool import K8SClusterPool
3237
from ......types.cloud.k8s.clusters.k8s_cluster_pool_list import K8SClusterPoolList
38+
from ......types.cloud.k8s.clusters.k8s_cluster_pool_quota import K8SClusterPoolQuota
3339

3440
__all__ = ["PoolsResource", "AsyncPoolsResource"]
3541

@@ -307,6 +313,83 @@ def delete(
307313
cast_to=TaskIDList,
308314
)
309315

316+
def check_quota(
317+
self,
318+
*,
319+
project_id: int | None = None,
320+
region_id: int | None = None,
321+
flavor_id: str,
322+
boot_volume_size: Optional[int] | Omit = omit,
323+
max_node_count: Optional[int] | Omit = omit,
324+
min_node_count: Optional[int] | Omit = omit,
325+
name: Optional[str] | Omit = omit,
326+
node_count: Optional[int] | Omit = omit,
327+
servergroup_policy: Optional[Literal["affinity", "anti-affinity", "soft-anti-affinity"]] | Omit = omit,
328+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
329+
# The extra values given here take precedence over values defined on the client or passed to this method.
330+
extra_headers: Headers | None = None,
331+
extra_query: Query | None = None,
332+
extra_body: Body | None = None,
333+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
334+
) -> K8SClusterPoolQuota:
335+
"""Calculate quota requirements for a new cluster pool before creation.
336+
337+
Returns
338+
exceeded quotas if regional limits would be violated. Use before pool creation
339+
to validate resource availability. Checks: CPU, RAM, volumes, VMs, GPUs, and
340+
baremetal quotas depending on flavor type.
341+
342+
Args:
343+
project_id: Project ID
344+
345+
region_id: Region ID
346+
347+
flavor_id: Flavor ID
348+
349+
boot_volume_size: Boot volume size
350+
351+
max_node_count: Maximum node count
352+
353+
min_node_count: Minimum node count
354+
355+
name: Name of the cluster pool
356+
357+
node_count: Maximum node count
358+
359+
servergroup_policy: Server group policy: anti-affinity, soft-anti-affinity or affinity
360+
361+
extra_headers: Send extra headers
362+
363+
extra_query: Add additional query parameters to the request
364+
365+
extra_body: Add additional JSON properties to the request
366+
367+
timeout: Override the client-level default timeout for this request, in seconds
368+
"""
369+
if project_id is None:
370+
project_id = self._client._get_cloud_project_id_path_param()
371+
if region_id is None:
372+
region_id = self._client._get_cloud_region_id_path_param()
373+
return self._post(
374+
f"/cloud/v2/k8s/clusters/{project_id}/{region_id}/pools/check_limits",
375+
body=maybe_transform(
376+
{
377+
"flavor_id": flavor_id,
378+
"boot_volume_size": boot_volume_size,
379+
"max_node_count": max_node_count,
380+
"min_node_count": min_node_count,
381+
"name": name,
382+
"node_count": node_count,
383+
"servergroup_policy": servergroup_policy,
384+
},
385+
pool_check_quota_params.PoolCheckQuotaParams,
386+
),
387+
options=make_request_options(
388+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
389+
),
390+
cast_to=K8SClusterPoolQuota,
391+
)
392+
310393
def get(
311394
self,
312395
pool_name: str,
@@ -669,6 +752,83 @@ async def delete(
669752
cast_to=TaskIDList,
670753
)
671754

755+
async def check_quota(
756+
self,
757+
*,
758+
project_id: int | None = None,
759+
region_id: int | None = None,
760+
flavor_id: str,
761+
boot_volume_size: Optional[int] | Omit = omit,
762+
max_node_count: Optional[int] | Omit = omit,
763+
min_node_count: Optional[int] | Omit = omit,
764+
name: Optional[str] | Omit = omit,
765+
node_count: Optional[int] | Omit = omit,
766+
servergroup_policy: Optional[Literal["affinity", "anti-affinity", "soft-anti-affinity"]] | Omit = omit,
767+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
768+
# The extra values given here take precedence over values defined on the client or passed to this method.
769+
extra_headers: Headers | None = None,
770+
extra_query: Query | None = None,
771+
extra_body: Body | None = None,
772+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
773+
) -> K8SClusterPoolQuota:
774+
"""Calculate quota requirements for a new cluster pool before creation.
775+
776+
Returns
777+
exceeded quotas if regional limits would be violated. Use before pool creation
778+
to validate resource availability. Checks: CPU, RAM, volumes, VMs, GPUs, and
779+
baremetal quotas depending on flavor type.
780+
781+
Args:
782+
project_id: Project ID
783+
784+
region_id: Region ID
785+
786+
flavor_id: Flavor ID
787+
788+
boot_volume_size: Boot volume size
789+
790+
max_node_count: Maximum node count
791+
792+
min_node_count: Minimum node count
793+
794+
name: Name of the cluster pool
795+
796+
node_count: Maximum node count
797+
798+
servergroup_policy: Server group policy: anti-affinity, soft-anti-affinity or affinity
799+
800+
extra_headers: Send extra headers
801+
802+
extra_query: Add additional query parameters to the request
803+
804+
extra_body: Add additional JSON properties to the request
805+
806+
timeout: Override the client-level default timeout for this request, in seconds
807+
"""
808+
if project_id is None:
809+
project_id = self._client._get_cloud_project_id_path_param()
810+
if region_id is None:
811+
region_id = self._client._get_cloud_region_id_path_param()
812+
return await self._post(
813+
f"/cloud/v2/k8s/clusters/{project_id}/{region_id}/pools/check_limits",
814+
body=await async_maybe_transform(
815+
{
816+
"flavor_id": flavor_id,
817+
"boot_volume_size": boot_volume_size,
818+
"max_node_count": max_node_count,
819+
"min_node_count": min_node_count,
820+
"name": name,
821+
"node_count": node_count,
822+
"servergroup_policy": servergroup_policy,
823+
},
824+
pool_check_quota_params.PoolCheckQuotaParams,
825+
),
826+
options=make_request_options(
827+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
828+
),
829+
cast_to=K8SClusterPoolQuota,
830+
)
831+
672832
async def get(
673833
self,
674834
pool_name: str,
@@ -774,6 +934,9 @@ def __init__(self, pools: PoolsResource) -> None:
774934
self.delete = to_raw_response_wrapper(
775935
pools.delete,
776936
)
937+
self.check_quota = to_raw_response_wrapper(
938+
pools.check_quota,
939+
)
777940
self.get = to_raw_response_wrapper(
778941
pools.get,
779942
)
@@ -802,6 +965,9 @@ def __init__(self, pools: AsyncPoolsResource) -> None:
802965
self.delete = async_to_raw_response_wrapper(
803966
pools.delete,
804967
)
968+
self.check_quota = async_to_raw_response_wrapper(
969+
pools.check_quota,
970+
)
805971
self.get = async_to_raw_response_wrapper(
806972
pools.get,
807973
)
@@ -830,6 +996,9 @@ def __init__(self, pools: PoolsResource) -> None:
830996
self.delete = to_streamed_response_wrapper(
831997
pools.delete,
832998
)
999+
self.check_quota = to_streamed_response_wrapper(
1000+
pools.check_quota,
1001+
)
8331002
self.get = to_streamed_response_wrapper(
8341003
pools.get,
8351004
)
@@ -858,6 +1027,9 @@ def __init__(self, pools: AsyncPoolsResource) -> None:
8581027
self.delete = async_to_streamed_response_wrapper(
8591028
pools.delete,
8601029
)
1030+
self.check_quota = async_to_streamed_response_wrapper(
1031+
pools.check_quota,
1032+
)
8611033
self.get = async_to_streamed_response_wrapper(
8621034
pools.get,
8631035
)

src/gcore/types/cloud/k8s/clusters/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@
88
from .pool_resize_params import PoolResizeParams as PoolResizeParams
99
from .pool_update_params import PoolUpdateParams as PoolUpdateParams
1010
from .k8s_cluster_pool_list import K8SClusterPoolList as K8SClusterPoolList
11+
from .k8s_cluster_pool_quota import K8SClusterPoolQuota as K8SClusterPoolQuota
12+
from .pool_check_quota_params import PoolCheckQuotaParams as PoolCheckQuotaParams

0 commit comments

Comments
 (0)