hyperstack 0.1.23__py3-none-any.whl → 1.41.0a0__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.
Files changed (225) hide show
  1. hyperstack/__init__.py +79 -131
  2. hyperstack/api/__init__.py +2 -0
  3. hyperstack/api/alive_api.py +240 -0
  4. hyperstack/api/api_key_api.py +16 -20
  5. hyperstack/api/assigning_member_role_api.py +15 -17
  6. hyperstack/api/auth_api.py +1050 -5
  7. hyperstack/api/beta_access_api.py +856 -0
  8. hyperstack/api/billing_api.py +6461 -673
  9. hyperstack/api/calculate_api.py +8 -9
  10. hyperstack/api/callbacks_api.py +120 -126
  11. hyperstack/api/cluster_events_api.py +1 -2
  12. hyperstack/api/clusters_api.py +2492 -146
  13. hyperstack/api/compliance_api.py +14 -18
  14. hyperstack/api/credit_api.py +17 -15
  15. hyperstack/api/customer_contract_api.py +30 -33
  16. hyperstack/api/dashboard_api.py +4 -5
  17. hyperstack/api/deployment_api.py +4 -8
  18. hyperstack/api/environment_api.py +285 -16
  19. hyperstack/api/firewall_attachment_api.py +11 -9
  20. hyperstack/api/firewalls_api.py +341 -347
  21. hyperstack/api/flavor_api.py +4 -5
  22. hyperstack/api/floating_ip_api.py +50 -49
  23. hyperstack/api/gpu_api.py +1 -2
  24. hyperstack/api/image_api.py +35 -39
  25. hyperstack/api/invite_api.py +288 -18
  26. hyperstack/api/keypair_api.py +22 -26
  27. hyperstack/api/organization_api.py +12 -15
  28. hyperstack/api/partner_config_api.py +564 -0
  29. hyperstack/api/payment_api.py +299 -18
  30. hyperstack/api/permission_api.py +4 -5
  31. hyperstack/api/policy_api.py +4 -5
  32. hyperstack/api/pricebook_api.py +14 -12
  33. hyperstack/api/profile_api.py +13 -17
  34. hyperstack/api/rbac_role_api.py +20 -25
  35. hyperstack/api/region_api.py +7 -8
  36. hyperstack/api/security_rules_api.py +1 -2
  37. hyperstack/api/snapshot_events_api.py +1 -2
  38. hyperstack/api/snapshots_api.py +166 -172
  39. hyperstack/api/stock_api.py +4 -5
  40. hyperstack/api/template_api.py +14 -19
  41. hyperstack/api/user_api.py +55 -49
  42. hyperstack/api/user_detail_choice_api.py +1 -2
  43. hyperstack/api/user_permission_api.py +8 -10
  44. hyperstack/api/virtual_machine_api.py +1529 -929
  45. hyperstack/api/virtual_machine_events_api.py +21 -22
  46. hyperstack/api/vnc_url_api.py +54 -50
  47. hyperstack/api/volume_api.py +340 -40
  48. hyperstack/api/volume_attachment_api.py +342 -42
  49. hyperstack/api_client.py +1 -1
  50. hyperstack/configuration.py +154 -47
  51. hyperstack/models/__init__.py +76 -130
  52. hyperstack/models/{environment_fieldsfor_volume.py → access_token_field.py} +7 -7
  53. hyperstack/models/attach_volume_fields.py +6 -2
  54. hyperstack/models/attach_volumes_payload.py +4 -2
  55. hyperstack/models/{virtual_machine_usage.py → attachments_fields_for_volume.py} +13 -11
  56. hyperstack/models/{flavor_vm_fields.py → attributes.py} +15 -18
  57. hyperstack/models/auth_get_token_response_model.py +4 -6
  58. hyperstack/models/{future_node_model.py → beta_access_request_fields.py} +27 -25
  59. hyperstack/models/{create_gpu.py → beta_access_request_payload.py} +9 -11
  60. hyperstack/models/{create_discount_response.py → beta_access_request_response_model.py} +11 -11
  61. hyperstack/models/{export_billing_data_request.py → beta_access_status_item.py} +20 -23
  62. hyperstack/models/{get_all_discount_for_all_organization_response.py → beta_access_status_response_model.py} +15 -15
  63. hyperstack/models/{exclude_billing_post_response.py → billing_history.py} +13 -11
  64. hyperstack/models/billing_history_data_synthesis_details.py +105 -0
  65. hyperstack/models/{vm_usage_response.py → billing_history_fine_tuning.py} +23 -19
  66. hyperstack/models/billing_history_model_evalutation_details.py +105 -0
  67. hyperstack/models/{get_all_discounts_fields.py → billing_history_serverless_inference.py} +23 -24
  68. hyperstack/models/billing_history_serverless_inference_details.py +105 -0
  69. hyperstack/models/{billingmetricesfields.py → billing_metrices_fields.py} +4 -4
  70. hyperstack/models/{billingmetricesresponse.py → billing_metrices_response.py} +7 -7
  71. hyperstack/models/cluster_fields.py +27 -9
  72. hyperstack/models/{add_update_flavor_organization_payload.py → cluster_flavor_fields.py} +28 -26
  73. hyperstack/models/{historical_instances_fields.py → cluster_node_fields.py} +24 -22
  74. hyperstack/models/{internal_instance_flavor_fields.py → cluster_node_group_fields.py} +17 -17
  75. hyperstack/models/{create_update_policy_response_model.py → cluster_node_groups_create_response.py} +21 -11
  76. hyperstack/models/{create_update_permission_response_model.py → cluster_node_groups_get_response.py} +11 -11
  77. hyperstack/models/{auth_request_login_response_model.py → cluster_node_groups_list_response.py} +15 -11
  78. hyperstack/models/{contract_eligible_instance_fields.py → cluster_node_instance_fields.py} +13 -11
  79. hyperstack/models/{image_logos.py → cluster_nodes_list_response.py} +14 -14
  80. hyperstack/models/{internal_environment_fields.py → cluster_version.py} +13 -9
  81. hyperstack/models/cluster_versions.py +10 -2
  82. hyperstack/models/{future_nodes_stock_model.py → colors.py} +17 -15
  83. hyperstack/models/contract_discount_plan_fields.py +3 -1
  84. hyperstack/models/contract_instance_fields.py +7 -1
  85. hyperstack/models/{future_node_response_model.py → create_cluster_node_fields.py} +23 -18
  86. hyperstack/models/{update_gpu.py → create_cluster_node_group_payload.py} +12 -11
  87. hyperstack/models/create_cluster_payload.py +31 -8
  88. hyperstack/models/create_environment.py +1 -1
  89. hyperstack/models/create_instances_payload.py +10 -8
  90. hyperstack/models/create_profile_payload.py +1 -1
  91. hyperstack/models/create_snapshot_payload.py +2 -4
  92. hyperstack/models/create_volume_payload.py +1 -1
  93. hyperstack/models/data_synthesis_billing_history_details_response_schema.py +95 -0
  94. hyperstack/models/{deployment_fieldsforstartdeployments.py → deployment_fields_for_start_deployments.py} +4 -4
  95. hyperstack/models/{editlabelofanexisting_vm_payload.py → edit_label_of_an_existing_vm_payload.py} +4 -4
  96. hyperstack/models/environment_features.py +14 -2
  97. hyperstack/models/{node_stocks_payload.py → environment_fields_for_volume.py} +10 -12
  98. hyperstack/models/flavor_fields.py +3 -1
  99. hyperstack/models/{customer_fields.py → flavor_label_fields.py} +7 -7
  100. hyperstack/models/{getcreditandthresholdinfo.py → get_credit_and_threshold_info.py} +4 -4
  101. hyperstack/models/{getcreditandthresholdinfoinresponse.py → get_credit_and_threshold_info_in_response.py} +7 -7
  102. hyperstack/models/{region_payload.py → get_instance_logs_response.py} +7 -9
  103. hyperstack/models/instance_fields.py +14 -4
  104. hyperstack/models/instance_flavor_fields.py +13 -1
  105. hyperstack/models/{flavor_response.py → keypair_environment_features.py} +20 -16
  106. hyperstack/models/{internal_instance_keypair_fields.py → keypair_environment_fields.py} +13 -11
  107. hyperstack/models/keypair_fields.py +6 -2
  108. hyperstack/models/{lastdaycostfields.py → last_day_cost_fields.py} +4 -4
  109. hyperstack/models/{lastdaycostresponse.py → last_day_cost_response.py} +7 -7
  110. hyperstack/models/{export_billing_data_response.py → logos.py} +13 -9
  111. hyperstack/models/{creditrequestresponse.py → master_flavors_response.py} +14 -14
  112. hyperstack/models/{customer_payload.py → mfa_status_fields.py} +8 -10
  113. hyperstack/models/{gpu.py → mfa_status_response.py} +11 -11
  114. hyperstack/models/model_evaluation_billing_history_details_response_schema.py +95 -0
  115. hyperstack/models/{organization_thresholdfields.py → organization_threshold_fields.py} +4 -4
  116. hyperstack/models/{organizationthresholdupdateresponse.py → organization_threshold_update_response.py} +7 -7
  117. hyperstack/models/{organizationthresholdsresponse.py → organization_thresholds_response.py} +7 -7
  118. hyperstack/models/{logo_get_response.py → pagination.py} +12 -12
  119. hyperstack/models/{billing_response.py → partner_config.py} +31 -20
  120. hyperstack/models/payment_details_fields.py +5 -1
  121. hyperstack/models/{logout_payload.py → primary_color.py} +10 -8
  122. hyperstack/models/region_fields.py +16 -2
  123. hyperstack/models/{vm_usage_request_payload.py → request_instance_logs_payload.py} +8 -8
  124. hyperstack/models/{stock_visibility_user_payload.py → request_instance_logs_response.py} +8 -8
  125. hyperstack/models/{contract_billing_history.py → resource_level_billing_bucket_details_resources.py} +10 -10
  126. hyperstack/models/{node_response_model.py → resource_level_billing_history_resources_cluster.py} +21 -11
  127. hyperstack/models/resource_level_billing_history_response_attributes.py +3 -1
  128. hyperstack/models/{get_all_contracts_response_model.py → resource_level_bucket_billing_details_response_model.py} +11 -15
  129. hyperstack/models/{contract_billing_history_response_model.py → resource_level_bucket_billing_history_response_model.py} +11 -11
  130. hyperstack/models/resource_level_cluster_billing_details_response_model.py +95 -0
  131. hyperstack/models/resource_level_cluster_billing_history_response_model.py +95 -0
  132. hyperstack/models/{get_discount_detail_response.py → resource_level_cluster_graph_billing_details_response_model.py} +11 -11
  133. hyperstack/models/{organization_object_response.py → resource_level_graph_billing_details_bucket.py} +18 -14
  134. hyperstack/models/{update_discounts_status_payload.py → secondary_color.py} +10 -8
  135. hyperstack/models/{security_rules_fieldsfor_instance.py → security_rules_fields_for_instance.py} +4 -4
  136. hyperstack/models/serverless_inferenced_billing_history_details_response_schema.py +95 -0
  137. hyperstack/models/snapshot_fields.py +6 -1
  138. hyperstack/models/snapshot_retrieve_fields.py +29 -2
  139. hyperstack/models/start_deployment.py +3 -3
  140. hyperstack/models/{subscribeorunsubscribeupdatepayload.py → subscribe_or_unsubscribe_update_payload.py} +4 -4
  141. hyperstack/models/token_based_billing_history_response.py +95 -0
  142. hyperstack/models/{update_keypairnameresponse.py → update_keypair_name_response.py} +4 -4
  143. hyperstack/models/update_volume_attachment_payload.py +87 -0
  144. hyperstack/models/{verify_api_key_payload.py → update_volume_payload.py} +7 -7
  145. hyperstack/models/{stock_visibility_user_list_response.py → update_volume_response.py} +14 -16
  146. hyperstack/models/{auth_request_login_fields.py → uris.py} +19 -9
  147. hyperstack/models/{userinfopostpayload.py → user_info_post_payload.py} +4 -4
  148. hyperstack/models/{node_stock_response_model.py → user_organizations_response.py} +14 -14
  149. hyperstack/models/users_info_fields.py +3 -1
  150. hyperstack/models/volume_attachment_fields.py +9 -5
  151. hyperstack/models/volume_fields.py +14 -4
  152. hyperstack/models/{volume_fieldsfor_instance.py → volume_fields_for_instance.py} +4 -4
  153. hyperstack/models/volumes.py +17 -11
  154. hyperstack/models/{instances_summary_fields.py → volumes_fields.py} +33 -29
  155. hyperstack/models/workload_billing_history_response.py +95 -0
  156. {hyperstack-0.1.23.dist-info → hyperstack-1.41.0a0.dist-info}/METADATA +9 -2
  157. hyperstack-1.41.0a0.dist-info/RECORD +349 -0
  158. {hyperstack-0.1.23.dist-info → hyperstack-1.41.0a0.dist-info}/WHEEL +1 -1
  159. hyperstack/models/api_key_verify_fields.py +0 -93
  160. hyperstack/models/billing_immune_resources_response.py +0 -95
  161. hyperstack/models/contract_billing_history_response_attributes.py +0 -99
  162. hyperstack/models/contract_change_payload.py +0 -101
  163. hyperstack/models/contract_eligible_instances_response.py +0 -101
  164. hyperstack/models/contract_event_create_model.py +0 -91
  165. hyperstack/models/contract_resource_payload.py +0 -95
  166. hyperstack/models/contractl_billing_history_response_metrics.py +0 -87
  167. hyperstack/models/create_contract_fields.py +0 -110
  168. hyperstack/models/create_contract_payload.py +0 -106
  169. hyperstack/models/create_discounts_payload.py +0 -112
  170. hyperstack/models/create_update_permission_payload.py +0 -93
  171. hyperstack/models/create_update_policy_payload.py +0 -93
  172. hyperstack/models/creditrechargelimitfield.py +0 -93
  173. hyperstack/models/creditrechargelimitresponse.py +0 -99
  174. hyperstack/models/creditrequests.py +0 -96
  175. hyperstack/models/data.py +0 -91
  176. hyperstack/models/discount_entity_model.py +0 -97
  177. hyperstack/models/discount_fields.py +0 -100
  178. hyperstack/models/discount_plan_fields.py +0 -108
  179. hyperstack/models/discount_resource_fields.py +0 -93
  180. hyperstack/models/discount_resource_payload.py +0 -93
  181. hyperstack/models/exclude_billing_post_payload.py +0 -91
  182. hyperstack/models/field_change.py +0 -91
  183. hyperstack/models/flavor_payload.py +0 -101
  184. hyperstack/models/flavor_vms_response.py +0 -99
  185. hyperstack/models/future_node_stock_model.py +0 -93
  186. hyperstack/models/future_node_update_model.py +0 -98
  187. hyperstack/models/get_all_contract_fields.py +0 -100
  188. hyperstack/models/get_discount_response.py +0 -99
  189. hyperstack/models/get_entity_discount_detail_response.py +0 -108
  190. hyperstack/models/get_token_payload.py +0 -89
  191. hyperstack/models/get_version_response.py +0 -91
  192. hyperstack/models/historical_instance.py +0 -101
  193. hyperstack/models/infrahub_resource_object_response.py +0 -119
  194. hyperstack/models/insert_discount_plan_fields.py +0 -112
  195. hyperstack/models/internal_instance_fields.py +0 -156
  196. hyperstack/models/internal_instance_image_fields.py +0 -95
  197. hyperstack/models/internal_instances_response.py +0 -99
  198. hyperstack/models/internal_security_rules_fields_for_instance.py +0 -104
  199. hyperstack/models/internal_volume_attachment_fields.py +0 -98
  200. hyperstack/models/internal_volume_fields.py +0 -95
  201. hyperstack/models/internal_volumes_response.py +0 -99
  202. hyperstack/models/new_stock_update_response_model.py +0 -89
  203. hyperstack/models/node_model.py +0 -114
  204. hyperstack/models/node_payload_model.py +0 -97
  205. hyperstack/models/node_power_usage_model.py +0 -120
  206. hyperstack/models/node_stock_payload_model.py +0 -95
  207. hyperstack/models/organizationcreditrechargelimitresponse.py +0 -95
  208. hyperstack/models/power_usage_model.py +0 -89
  209. hyperstack/models/pricebook_resource_object_response.py +0 -107
  210. hyperstack/models/refresh_token_payload.py +0 -89
  211. hyperstack/models/region_response.py +0 -95
  212. hyperstack/models/set_defaults_payload.py +0 -89
  213. hyperstack/models/single_visibility_user_response.py +0 -91
  214. hyperstack/models/success_response_model.py +0 -89
  215. hyperstack/models/token_fields.py +0 -91
  216. hyperstack/models/update_contract_payload.py +0 -104
  217. hyperstack/models/update_discounts_payload.py +0 -102
  218. hyperstack/models/user_transfer_payload.py +0 -89
  219. hyperstack/models/verify_api_key_response_model.py +0 -95
  220. hyperstack/models/volume_status_change_fields.py +0 -96
  221. hyperstack/models/volumes_last_status_change_response.py +0 -99
  222. hyperstack/models/warning_mail_log_fields.py +0 -99
  223. hyperstack/models/warning_mail_log_response.py +0 -101
  224. hyperstack-0.1.23.dist-info/RECORD +0 -401
  225. {hyperstack-0.1.23.dist-info → hyperstack-1.41.0a0.dist-info}/top_level.txt +0 -0
@@ -17,19 +17,30 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
- from ..models.future_node_model import FutureNodeModel
22
+ from typing_extensions import Annotated
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
26
- class FutureNodeResponseModel(BaseModel):
26
+ class CreateClusterNodeFields(BaseModel):
27
27
  """
28
- FutureNodeResponseModel
28
+ CreateClusterNodeFields
29
29
  """ # noqa: E501
30
- nodes: Optional[List[FutureNodeModel]] = None
31
- region: Optional[StrictStr] = None
32
- __properties: ClassVar[List[str]] = ["nodes", "region"]
30
+ count: Optional[Annotated[int, Field(strict=True, ge=1)]] = None
31
+ node_group: Optional[StrictStr] = None
32
+ role: Optional[StrictStr] = None
33
+ __properties: ClassVar[List[str]] = ["count", "node_group", "role"]
34
+
35
+ @field_validator('role')
36
+ def role_validate_enum(cls, value):
37
+ """Validates the enum"""
38
+ if value is None:
39
+ return value
40
+
41
+ if value not in set(['worker', 'master']):
42
+ raise ValueError("must be one of enum values ('worker', 'master')")
43
+ return value
33
44
 
34
45
  model_config = ConfigDict(
35
46
  populate_by_name=True,
@@ -49,7 +60,7 @@ class FutureNodeResponseModel(BaseModel):
49
60
 
50
61
  @classmethod
51
62
  def from_json(cls, json_str: str) -> Optional[Self]:
52
- """Create an instance of FutureNodeResponseModel from a JSON string"""
63
+ """Create an instance of CreateClusterNodeFields from a JSON string"""
53
64
  return cls.from_dict(json.loads(json_str))
54
65
 
55
66
  def to_dict(self) -> Dict[str, Any]:
@@ -70,18 +81,11 @@ class FutureNodeResponseModel(BaseModel):
70
81
  exclude=excluded_fields,
71
82
  exclude_none=True,
72
83
  )
73
- # override the default output from pydantic by calling `to_dict()` of each item in nodes (list)
74
- _items = []
75
- if self.nodes:
76
- for _item_nodes in self.nodes:
77
- if _item_nodes:
78
- _items.append(_item_nodes.to_dict())
79
- _dict['nodes'] = _items
80
84
  return _dict
81
85
 
82
86
  @classmethod
83
87
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
84
- """Create an instance of FutureNodeResponseModel from a dict"""
88
+ """Create an instance of CreateClusterNodeFields from a dict"""
85
89
  if obj is None:
86
90
  return None
87
91
 
@@ -89,8 +93,9 @@ class FutureNodeResponseModel(BaseModel):
89
93
  return cls.model_validate(obj)
90
94
 
91
95
  _obj = cls.model_validate({
92
- "nodes": [FutureNodeModel.from_dict(_item) for _item in obj["nodes"]] if obj.get("nodes") is not None else None,
93
- "region": obj.get("region")
96
+ "count": obj.get("count"),
97
+ "node_group": obj.get("node_group"),
98
+ "role": obj.get("role")
94
99
  })
95
100
  return _obj
96
101
 
@@ -19,17 +19,18 @@ import json
19
19
 
20
20
  from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing_extensions import Annotated
22
23
  from typing import Optional, Set
23
24
  from typing_extensions import Self
24
25
 
25
- class UpdateGPU(BaseModel):
26
+ class CreateClusterNodeGroupPayload(BaseModel):
26
27
  """
27
- UpdateGPU
28
+ CreateClusterNodeGroupPayload
28
29
  """ # noqa: E501
29
- example_metadata: Optional[StrictStr] = Field(default=None, description="A valid JSON string.")
30
- name: Optional[StrictStr] = None
31
- regions: Optional[List[StrictStr]] = None
32
- __properties: ClassVar[List[str]] = ["example_metadata", "name", "regions"]
30
+ count: Optional[Annotated[int, Field(strict=True, ge=1)]] = None
31
+ flavor_name: StrictStr
32
+ name: Annotated[str, Field(strict=True, max_length=20)]
33
+ __properties: ClassVar[List[str]] = ["count", "flavor_name", "name"]
33
34
 
34
35
  model_config = ConfigDict(
35
36
  populate_by_name=True,
@@ -49,7 +50,7 @@ class UpdateGPU(BaseModel):
49
50
 
50
51
  @classmethod
51
52
  def from_json(cls, json_str: str) -> Optional[Self]:
52
- """Create an instance of UpdateGPU from a JSON string"""
53
+ """Create an instance of CreateClusterNodeGroupPayload from a JSON string"""
53
54
  return cls.from_dict(json.loads(json_str))
54
55
 
55
56
  def to_dict(self) -> Dict[str, Any]:
@@ -74,7 +75,7 @@ class UpdateGPU(BaseModel):
74
75
 
75
76
  @classmethod
76
77
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
77
- """Create an instance of UpdateGPU from a dict"""
78
+ """Create an instance of CreateClusterNodeGroupPayload from a dict"""
78
79
  if obj is None:
79
80
  return None
80
81
 
@@ -82,9 +83,9 @@ class UpdateGPU(BaseModel):
82
83
  return cls.model_validate(obj)
83
84
 
84
85
  _obj = cls.model_validate({
85
- "example_metadata": obj.get("example_metadata"),
86
- "name": obj.get("name"),
87
- "regions": obj.get("regions")
86
+ "count": obj.get("count"),
87
+ "flavor_name": obj.get("flavor_name"),
88
+ "name": obj.get("name")
88
89
  })
89
90
  return _obj
90
91
 
@@ -17,8 +17,10 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
21
- from typing import Any, ClassVar, Dict, List
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing_extensions import Annotated
23
+ from ..models.create_cluster_node_group_payload import CreateClusterNodeGroupPayload
22
24
  from typing import Optional, Set
23
25
  from typing_extensions import Self
24
26
 
@@ -26,15 +28,27 @@ class CreateClusterPayload(BaseModel):
26
28
  """
27
29
  CreateClusterPayload
28
30
  """ # noqa: E501
31
+ deployment_mode: Optional[StrictStr] = 'full'
29
32
  environment_name: StrictStr
30
- image_name: StrictStr
31
33
  keypair_name: StrictStr
32
34
  kubernetes_version: StrictStr
35
+ master_count: Optional[Annotated[int, Field(le=3, strict=True, ge=2)]] = None
33
36
  master_flavor_name: StrictStr
34
37
  name: StrictStr
35
- node_count: StrictInt
36
- node_flavor_name: StrictStr
37
- __properties: ClassVar[List[str]] = ["environment_name", "image_name", "keypair_name", "kubernetes_version", "master_flavor_name", "name", "node_count", "node_flavor_name"]
38
+ node_count: Optional[StrictInt] = None
39
+ node_flavor_name: Optional[StrictStr] = None
40
+ node_groups: Optional[List[CreateClusterNodeGroupPayload]] = None
41
+ __properties: ClassVar[List[str]] = ["deployment_mode", "environment_name", "keypair_name", "kubernetes_version", "master_count", "master_flavor_name", "name", "node_count", "node_flavor_name", "node_groups"]
42
+
43
+ @field_validator('deployment_mode')
44
+ def deployment_mode_validate_enum(cls, value):
45
+ """Validates the enum"""
46
+ if value is None:
47
+ return value
48
+
49
+ if value not in set(['full', 'standard']):
50
+ raise ValueError("must be one of enum values ('full', 'standard')")
51
+ return value
38
52
 
39
53
  model_config = ConfigDict(
40
54
  populate_by_name=True,
@@ -75,6 +89,13 @@ class CreateClusterPayload(BaseModel):
75
89
  exclude=excluded_fields,
76
90
  exclude_none=True,
77
91
  )
92
+ # override the default output from pydantic by calling `to_dict()` of each item in node_groups (list)
93
+ _items = []
94
+ if self.node_groups:
95
+ for _item_node_groups in self.node_groups:
96
+ if _item_node_groups:
97
+ _items.append(_item_node_groups.to_dict())
98
+ _dict['node_groups'] = _items
78
99
  return _dict
79
100
 
80
101
  @classmethod
@@ -87,14 +108,16 @@ class CreateClusterPayload(BaseModel):
87
108
  return cls.model_validate(obj)
88
109
 
89
110
  _obj = cls.model_validate({
111
+ "deployment_mode": obj.get("deployment_mode") if obj.get("deployment_mode") is not None else 'full',
90
112
  "environment_name": obj.get("environment_name"),
91
- "image_name": obj.get("image_name"),
92
113
  "keypair_name": obj.get("keypair_name"),
93
114
  "kubernetes_version": obj.get("kubernetes_version"),
115
+ "master_count": obj.get("master_count"),
94
116
  "master_flavor_name": obj.get("master_flavor_name"),
95
117
  "name": obj.get("name"),
96
118
  "node_count": obj.get("node_count"),
97
- "node_flavor_name": obj.get("node_flavor_name")
119
+ "node_flavor_name": obj.get("node_flavor_name"),
120
+ "node_groups": [CreateClusterNodeGroupPayload.from_dict(_item) for _item in obj["node_groups"]] if obj.get("node_groups") is not None else None
98
121
  })
99
122
  return _obj
100
123
 
@@ -28,7 +28,7 @@ class CreateEnvironment(BaseModel):
28
28
  CreateEnvironment
29
29
  """ # noqa: E501
30
30
  name: Annotated[str, Field(strict=True, max_length=50)] = Field(description="The name of the environment being created.")
31
- region: StrictStr = Field(description="The geographic location of the data center where the environment is being created. To learn more about regions, [**click here**](https://infrahub-doc.nexgencloud.com/docs/features/regions).")
31
+ region: StrictStr = Field(description="The geographic location of the data center where the environment is being created. To learn more about regions, [**click here**]({Config.INFRAHUB_DOCS_BASE}/docs/features/regions).")
32
32
  __properties: ClassVar[List[str]] = ["name", "region"]
33
33
 
34
34
  model_config = ConfigDict(
@@ -30,22 +30,23 @@ class CreateInstancesPayload(BaseModel):
30
30
  """
31
31
  CreateInstancesPayload
32
32
  """ # noqa: E501
33
- assign_floating_ip: Optional[StrictBool] = Field(default=None, description="When this field is set to `true`, it attaches a [public IP address](https://infrahub-doc.nexgencloud.com/docs/virtual-machines/public-ip)to the virtual machine, enabling internet accessibility.")
34
- callback_url: Optional[Annotated[str, Field(strict=True, max_length=250)]] = Field(default=None, description="An optional URL where actions performed on the virtual machine will be sent. For additional information on event callbacks, [**click here**](https://infrahub-doc.nexgencloud.com/docs/features/webhooks-callbacks).")
33
+ assign_floating_ip: Optional[StrictBool] = Field(default=None, description="When this field is set to `true`, it attaches a [public IP address](https://docs...cloud/docs/api-reference/core-resources/virtual-machines/floating-ip/) to the virtual machine, enabling internet accessibility.")
34
+ callback_url: Optional[Annotated[str, Field(strict=True, max_length=250)]] = Field(default=None, description="An optional URL where actions performed on the virtual machine will be sent. For additional information on event callbacks, [**click here**](https://docs...cloud/docs/api-reference/core-resources/virtual-machines/callbacks-vms/).")
35
35
  count: StrictInt = Field(description="The number of virtual machines to be created.")
36
36
  create_bootable_volume: Optional[StrictBool] = Field(default=None, description="Indicates whether to create a bootable volume for the virtual machine. When set to `true`, a bootable volume will be created; the default value is `false`.")
37
- environment_name: StrictStr = Field(description="The name of the [environment](https://infrahub-doc.nexgencloud.com/docs/features/environments-available-features) in which the virtual machine is to be created.")
37
+ enable_port_randomization: Optional[StrictBool] = Field(default=True, description="Indicates whether to enable port randomization.This setting is only effective if 'assign_floating_ip' is true. Defaults to true.")
38
+ environment_name: StrictStr = Field(description="The name of the [environment](https://docs...cloud/docs/api-reference/core-resources/environments/) in which the virtual machine is to be created.")
38
39
  flavor: Optional[FlavorObjectFields] = None
39
- flavor_name: StrictStr = Field(description="The name of the GPU hardware configuration ([flavor](https://infrahub-doc.nexgencloud.com/docs/hardware/flavors)) for the virtual machines being created.")
40
- image_name: Optional[StrictStr] = Field(default=None, description="The [operating system (OS) image](https://infrahub-doc.nexgencloud.com/docs/virtual-machines/images) name designated for installation on the virtual machine.It also accepts custom, private images, created from [existing snapshots](https://infrahub-doc.nexgencloud.com/docs/virtual-machines/custom-images).")
41
- key_name: StrictStr = Field(description="The name of the existing SSH key pair to be used for secure access to the virtual machine. For additional information on SSH key pairs, [**click here**](https://infrahub-doc.nexgencloud.com/docs/getting-started/create-keypair).")
40
+ flavor_name: StrictStr = Field(description="The name of the GPU hardware configuration ([flavor](https://docs...cloud/docs/hardware/flavors)) for the virtual machines being created.")
41
+ image_name: Optional[StrictStr] = Field(default=None, description="The [operating system (OS) image](https://docs...cloud/docs/virtual-machines/images) name designated for installation on the virtual machine.It also accepts custom, private images, created from [existing snapshots](https://docs.hyperstack.cloud/docs/virtual-machines/custom-images).")
42
+ key_name: StrictStr = Field(description="The name of the existing SSH key pair to be used for secure access to the virtual machine. For additional information on SSH key pairs, [**click here**](https://docs...cloud/docs/api-reference/core-resources/keypairs/).")
42
43
  labels: Optional[List[StrictStr]] = None
43
44
  name: Annotated[str, Field(strict=True, max_length=50)] = Field(description="The name of the virtual machine being created.")
44
45
  profile: Optional[ProfileObjectFields] = None
45
46
  security_rules: Optional[List[CreateSecurityRulePayload]] = None
46
- user_data: Optional[StrictStr] = Field(default=None, description="Optional initialization configuration commands to manage the configuration of a virtual machine at launch using cloud-init scripts. For more information about custom VM configuration using cloud-init, [**click here**](https://infrahub-doc.nexgencloud.com/docs/virtual-machines/initialization-configuration).")
47
+ user_data: Optional[StrictStr] = Field(default=None, description="Optional initialization configuration commands to manage the configuration of a virtual machine at launch using cloud-init scripts. For more information about custom VM configuration using cloud-init, [**click here**](https://docs...cloud/docs/virtual-machines/initialization-configuration).")
47
48
  volume_name: Optional[StrictStr] = Field(default=None, description="The names of the volume(s) to be attached to the virtual machine being created.")
48
- __properties: ClassVar[List[str]] = ["assign_floating_ip", "callback_url", "count", "create_bootable_volume", "environment_name", "flavor", "flavor_name", "image_name", "key_name", "labels", "name", "profile", "security_rules", "user_data", "volume_name"]
49
+ __properties: ClassVar[List[str]] = ["assign_floating_ip", "callback_url", "count", "create_bootable_volume", "enable_port_randomization", "environment_name", "flavor", "flavor_name", "image_name", "key_name", "labels", "name", "profile", "security_rules", "user_data", "volume_name"]
49
50
 
50
51
  model_config = ConfigDict(
51
52
  populate_by_name=True,
@@ -115,6 +116,7 @@ class CreateInstancesPayload(BaseModel):
115
116
  "callback_url": obj.get("callback_url"),
116
117
  "count": obj.get("count"),
117
118
  "create_bootable_volume": obj.get("create_bootable_volume"),
119
+ "enable_port_randomization": obj.get("enable_port_randomization") if obj.get("enable_port_randomization") is not None else True,
118
120
  "environment_name": obj.get("environment_name"),
119
121
  "flavor": FlavorObjectFields.from_dict(obj["flavor"]) if obj.get("flavor") is not None else None,
120
122
  "flavor_name": obj.get("flavor_name"),
@@ -27,7 +27,7 @@ class CreateProfilePayload(BaseModel):
27
27
  """
28
28
  CreateProfilePayload
29
29
  """ # noqa: E501
30
- data: Dict[str, StrictStr] = Field(description="The data object which contains the configuration of the virtual machine profile being created.")
30
+ data: Dict[str, StrictStr] = Field(description="The data object containing the configuration details of the virtual machine profile being created.")
31
31
  description: Optional[Annotated[str, Field(strict=True, max_length=150)]] = Field(default=None, description="The optional description for the profile being created.")
32
32
  name: Annotated[str, Field(strict=True, max_length=50)] = Field(description="The name of the profile being created.")
33
33
  __properties: ClassVar[List[str]] = ["data", "description", "name"]
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
@@ -27,10 +27,9 @@ class CreateSnapshotPayload(BaseModel):
27
27
  CreateSnapshotPayload
28
28
  """ # noqa: E501
29
29
  description: StrictStr = Field(description="description")
30
- is_image: StrictBool = Field(description="Indicates if the snapshot is an image")
31
30
  labels: Optional[List[StrictStr]] = Field(default=None, description="Labels associated with snapshot")
32
31
  name: StrictStr = Field(description="Snapshot name")
33
- __properties: ClassVar[List[str]] = ["description", "is_image", "labels", "name"]
32
+ __properties: ClassVar[List[str]] = ["description", "labels", "name"]
34
33
 
35
34
  model_config = ConfigDict(
36
35
  populate_by_name=True,
@@ -84,7 +83,6 @@ class CreateSnapshotPayload(BaseModel):
84
83
 
85
84
  _obj = cls.model_validate({
86
85
  "description": obj.get("description"),
87
- "is_image": obj.get("is_image"),
88
86
  "labels": obj.get("labels"),
89
87
  "name": obj.get("name")
90
88
  })
@@ -29,7 +29,7 @@ class CreateVolumePayload(BaseModel):
29
29
  """ # noqa: E501
30
30
  callback_url: Optional[Annotated[str, Field(strict=True, max_length=250)]] = Field(default=None, description="A URL that can be attached to the volume you are creating. This `callback_url` will post any action events that occur to your volume to the provided URL.")
31
31
  description: Optional[StrictStr] = Field(default=None, description="A brief description or comment about the volume.")
32
- environment_name: StrictStr = Field(description="The name of the [environment](https://infrahub-doc.nexgencloud.com/docs/features/environments-available-features) within which the volume is being created.")
32
+ environment_name: StrictStr = Field(description="The name of the [environment](https://docs...cloud/docs/api-reference/core-resources/environments/) within which the volume is being created.")
33
33
  image_id: Optional[StrictInt] = Field(default=None, description="The ID of the operating system image that will be associated with the volume. By providing an `image_id` in the create volume request, you will create a bootable volume.")
34
34
  name: Annotated[str, Field(strict=True, max_length=50)] = Field(description="The name of the volume being created.")
35
35
  size: StrictInt = Field(description="The size of the volume in GB. 1048576GB storage capacity per volume.")
@@ -0,0 +1,95 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Infrahub-API
5
+
6
+ Leverage the Infrahub API and Hyperstack platform to easily create, manage, and scale powerful GPU virtual machines and their associated resources. Access this SDK to automate the deployment of your workloads and streamline your infrastructure management. To contribute, please raise an issue with a bug report, feature request, feedback, or general inquiry.
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, StrictBool, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from ..models.billing_history_data_synthesis_details import BillingHistoryDataSynthesisDetails
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class DataSynthesisBillingHistoryDetailsResponseSchema(BaseModel):
27
+ """
28
+ DataSynthesisBillingHistoryDetailsResponseSchema
29
+ """ # noqa: E501
30
+ billing_history_data_synthesis_details: Optional[BillingHistoryDataSynthesisDetails] = None
31
+ message: Optional[StrictStr] = None
32
+ status: Optional[StrictBool] = None
33
+ __properties: ClassVar[List[str]] = ["billing_history_data_synthesis_details", "message", "status"]
34
+
35
+ model_config = ConfigDict(
36
+ populate_by_name=True,
37
+ validate_assignment=True,
38
+ protected_namespaces=(),
39
+ )
40
+
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> Optional[Self]:
53
+ """Create an instance of DataSynthesisBillingHistoryDetailsResponseSchema from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ """Return the dictionary representation of the model using alias.
58
+
59
+ This has the following differences from calling pydantic's
60
+ `self.model_dump(by_alias=True)`:
61
+
62
+ * `None` is only added to the output dict for nullable fields that
63
+ were set at model initialization. Other fields with value `None`
64
+ are ignored.
65
+ """
66
+ excluded_fields: Set[str] = set([
67
+ ])
68
+
69
+ _dict = self.model_dump(
70
+ by_alias=True,
71
+ exclude=excluded_fields,
72
+ exclude_none=True,
73
+ )
74
+ # override the default output from pydantic by calling `to_dict()` of billing_history_data_synthesis_details
75
+ if self.billing_history_data_synthesis_details:
76
+ _dict['billing_history_data_synthesis_details'] = self.billing_history_data_synthesis_details.to_dict()
77
+ return _dict
78
+
79
+ @classmethod
80
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
81
+ """Create an instance of DataSynthesisBillingHistoryDetailsResponseSchema from a dict"""
82
+ if obj is None:
83
+ return None
84
+
85
+ if not isinstance(obj, dict):
86
+ return cls.model_validate(obj)
87
+
88
+ _obj = cls.model_validate({
89
+ "billing_history_data_synthesis_details": BillingHistoryDataSynthesisDetails.from_dict(obj["billing_history_data_synthesis_details"]) if obj.get("billing_history_data_synthesis_details") is not None else None,
90
+ "message": obj.get("message"),
91
+ "status": obj.get("status")
92
+ })
93
+ return _obj
94
+
95
+
@@ -23,9 +23,9 @@ from typing import Any, ClassVar, Dict, List, Optional
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
26
- class DeploymentFieldsforstartdeployments(BaseModel):
26
+ class DeploymentFieldsForStartDeployments(BaseModel):
27
27
  """
28
- DeploymentFieldsforstartdeployments
28
+ DeploymentFieldsForStartDeployments
29
29
  """ # noqa: E501
30
30
  created_at: Optional[datetime] = None
31
31
  description: Optional[StrictStr] = None
@@ -54,7 +54,7 @@ class DeploymentFieldsforstartdeployments(BaseModel):
54
54
 
55
55
  @classmethod
56
56
  def from_json(cls, json_str: str) -> Optional[Self]:
57
- """Create an instance of DeploymentFieldsforstartdeployments from a JSON string"""
57
+ """Create an instance of DeploymentFieldsForStartDeployments from a JSON string"""
58
58
  return cls.from_dict(json.loads(json_str))
59
59
 
60
60
  def to_dict(self) -> Dict[str, Any]:
@@ -79,7 +79,7 @@ class DeploymentFieldsforstartdeployments(BaseModel):
79
79
 
80
80
  @classmethod
81
81
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
82
- """Create an instance of DeploymentFieldsforstartdeployments from a dict"""
82
+ """Create an instance of DeploymentFieldsForStartDeployments from a dict"""
83
83
  if obj is None:
84
84
  return None
85
85
 
@@ -22,9 +22,9 @@ from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
25
- class EditlabelofanexistingVMPayload(BaseModel):
25
+ class EditLabelOfAnExistingVMPayload(BaseModel):
26
26
  """
27
- EditlabelofanexistingVMPayload
27
+ EditLabelOfAnExistingVMPayload
28
28
  """ # noqa: E501
29
29
  labels: Optional[List[StrictStr]] = Field(default=None, description="Multiple labels can be added by separating with spaces")
30
30
  __properties: ClassVar[List[str]] = ["labels"]
@@ -47,7 +47,7 @@ class EditlabelofanexistingVMPayload(BaseModel):
47
47
 
48
48
  @classmethod
49
49
  def from_json(cls, json_str: str) -> Optional[Self]:
50
- """Create an instance of EditlabelofanexistingVMPayload from a JSON string"""
50
+ """Create an instance of EditLabelOfAnExistingVMPayload from a JSON string"""
51
51
  return cls.from_dict(json.loads(json_str))
52
52
 
53
53
  def to_dict(self) -> Dict[str, Any]:
@@ -72,7 +72,7 @@ class EditlabelofanexistingVMPayload(BaseModel):
72
72
 
73
73
  @classmethod
74
74
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
75
- """Create an instance of EditlabelofanexistingVMPayload from a dict"""
75
+ """Create an instance of EditLabelOfAnExistingVMPayload from a dict"""
76
76
  if obj is None:
77
77
  return None
78
78
 
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictBool
20
+ from pydantic import BaseModel, ConfigDict, StrictBool, StrictStr, field_validator
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
@@ -26,8 +26,19 @@ class EnvironmentFeatures(BaseModel):
26
26
  """
27
27
  EnvironmentFeatures
28
28
  """ # noqa: E501
29
+ green_status: Optional[StrictStr] = None
29
30
  network_optimised: Optional[StrictBool] = None
30
- __properties: ClassVar[List[str]] = ["network_optimised"]
31
+ __properties: ClassVar[List[str]] = ["green_status", "network_optimised"]
32
+
33
+ @field_validator('green_status')
34
+ def green_status_validate_enum(cls, value):
35
+ """Validates the enum"""
36
+ if value is None:
37
+ return value
38
+
39
+ if value not in set(['GREEN', 'PARTIALLY_GREEN', 'NOT_GREEN']):
40
+ raise ValueError("must be one of enum values ('GREEN', 'PARTIALLY_GREEN', 'NOT_GREEN')")
41
+ return value
31
42
 
32
43
  model_config = ConfigDict(
33
44
  populate_by_name=True,
@@ -80,6 +91,7 @@ class EnvironmentFeatures(BaseModel):
80
91
  return cls.model_validate(obj)
81
92
 
82
93
  _obj = cls.model_validate({
94
+ "green_status": obj.get("green_status"),
83
95
  "network_optimised": obj.get("network_optimised")
84
96
  })
85
97
  return _obj
@@ -17,20 +17,19 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, StrictInt, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
25
- class NodeStocksPayload(BaseModel):
25
+ class EnvironmentFieldsForVolume(BaseModel):
26
26
  """
27
- NodeStocksPayload
27
+ EnvironmentFieldsForVolume
28
28
  """ # noqa: E501
29
- in_use: StrictInt
29
+ features: Optional[Dict[str, Any]] = None
30
30
  name: Optional[StrictStr] = None
31
- total: StrictInt
32
- type: StrictStr
33
- __properties: ClassVar[List[str]] = ["in_use", "name", "total", "type"]
31
+ region: Optional[StrictStr] = None
32
+ __properties: ClassVar[List[str]] = ["features", "name", "region"]
34
33
 
35
34
  model_config = ConfigDict(
36
35
  populate_by_name=True,
@@ -50,7 +49,7 @@ class NodeStocksPayload(BaseModel):
50
49
 
51
50
  @classmethod
52
51
  def from_json(cls, json_str: str) -> Optional[Self]:
53
- """Create an instance of NodeStocksPayload from a JSON string"""
52
+ """Create an instance of EnvironmentFieldsForVolume from a JSON string"""
54
53
  return cls.from_dict(json.loads(json_str))
55
54
 
56
55
  def to_dict(self) -> Dict[str, Any]:
@@ -75,7 +74,7 @@ class NodeStocksPayload(BaseModel):
75
74
 
76
75
  @classmethod
77
76
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
78
- """Create an instance of NodeStocksPayload from a dict"""
77
+ """Create an instance of EnvironmentFieldsForVolume from a dict"""
79
78
  if obj is None:
80
79
  return None
81
80
 
@@ -83,10 +82,9 @@ class NodeStocksPayload(BaseModel):
83
82
  return cls.model_validate(obj)
84
83
 
85
84
  _obj = cls.model_validate({
86
- "in_use": obj.get("in_use"),
85
+ "features": obj.get("features"),
87
86
  "name": obj.get("name"),
88
- "total": obj.get("total"),
89
- "type": obj.get("type")
87
+ "region": obj.get("region")
90
88
  })
91
89
  return _obj
92
90
 
@@ -33,6 +33,7 @@ class FlavorFields(BaseModel):
33
33
  disk: Optional[StrictInt] = None
34
34
  display_name: Optional[StrictStr] = None
35
35
  ephemeral: Optional[StrictInt] = None
36
+ features: Optional[Dict[str, Any]] = None
36
37
  gpu: Optional[StrictStr] = None
37
38
  gpu_count: Optional[StrictInt] = None
38
39
  id: Optional[StrictInt] = None
@@ -41,7 +42,7 @@ class FlavorFields(BaseModel):
41
42
  ram: Optional[Union[StrictFloat, StrictInt]] = None
42
43
  region_name: Optional[StrictStr] = None
43
44
  stock_available: Optional[StrictBool] = None
44
- __properties: ClassVar[List[str]] = ["cpu", "created_at", "disk", "display_name", "ephemeral", "gpu", "gpu_count", "id", "labels", "name", "ram", "region_name", "stock_available"]
45
+ __properties: ClassVar[List[str]] = ["cpu", "created_at", "disk", "display_name", "ephemeral", "features", "gpu", "gpu_count", "id", "labels", "name", "ram", "region_name", "stock_available"]
45
46
 
46
47
  model_config = ConfigDict(
47
48
  populate_by_name=True,
@@ -106,6 +107,7 @@ class FlavorFields(BaseModel):
106
107
  "disk": obj.get("disk"),
107
108
  "display_name": obj.get("display_name"),
108
109
  "ephemeral": obj.get("ephemeral"),
110
+ "features": obj.get("features"),
109
111
  "gpu": obj.get("gpu"),
110
112
  "gpu_count": obj.get("gpu_count"),
111
113
  "id": obj.get("id"),
@@ -22,13 +22,13 @@ from typing import Any, ClassVar, Dict, List, Optional
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
25
- class CustomerFields(BaseModel):
25
+ class FlavorLabelFields(BaseModel):
26
26
  """
27
- CustomerFields
27
+ FlavorLabelFields
28
28
  """ # noqa: E501
29
29
  id: Optional[StrictInt] = None
30
- plan_type: Optional[StrictStr] = None
31
- __properties: ClassVar[List[str]] = ["id", "plan_type"]
30
+ label: Optional[StrictStr] = None
31
+ __properties: ClassVar[List[str]] = ["id", "label"]
32
32
 
33
33
  model_config = ConfigDict(
34
34
  populate_by_name=True,
@@ -48,7 +48,7 @@ class CustomerFields(BaseModel):
48
48
 
49
49
  @classmethod
50
50
  def from_json(cls, json_str: str) -> Optional[Self]:
51
- """Create an instance of CustomerFields from a JSON string"""
51
+ """Create an instance of FlavorLabelFields from a JSON string"""
52
52
  return cls.from_dict(json.loads(json_str))
53
53
 
54
54
  def to_dict(self) -> Dict[str, Any]:
@@ -73,7 +73,7 @@ class CustomerFields(BaseModel):
73
73
 
74
74
  @classmethod
75
75
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
76
- """Create an instance of CustomerFields from a dict"""
76
+ """Create an instance of FlavorLabelFields from a dict"""
77
77
  if obj is None:
78
78
  return None
79
79
 
@@ -82,7 +82,7 @@ class CustomerFields(BaseModel):
82
82
 
83
83
  _obj = cls.model_validate({
84
84
  "id": obj.get("id"),
85
- "plan_type": obj.get("plan_type")
85
+ "label": obj.get("label")
86
86
  })
87
87
  return _obj
88
88