python3-core-api-client 8.0__py3-none-any.whl → 9.0__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.
@@ -320,6 +320,18 @@ class CoreApiConnector(CoreApiClient):
320
320
  ) -> resources.security_txt_policies.SecurityTxtPolicies:
321
321
  return resources.security_txt_policies.SecurityTxtPolicies(self)
322
322
 
323
+ @cached_property
324
+ def carbon_txts(self) -> resources.carbon_txts.CarbonTxts:
325
+ return resources.carbon_txts.CarbonTxts(self)
326
+
327
+ @cached_property
328
+ def scheduled_actions(self) -> resources.scheduled_actions.ScheduledActions:
329
+ return resources.scheduled_actions.ScheduledActions(self)
330
+
331
+ @cached_property
332
+ def health_checks(self) -> resources.health_checks.HealthChecks:
333
+ return resources.health_checks.HealthChecks(self)
334
+
323
335
  @cached_property
324
336
  def firewall_groups(self) -> resources.firewall_groups.FirewallGroups:
325
337
  return resources.firewall_groups.FirewallGroups(self)
@@ -531,7 +531,7 @@ class DatabaseUserTotalConnectionMetricResource(BaseCoreApiModel):
531
531
  database_user_name: str
532
532
  node_hostname: str
533
533
  timestamp: int
534
- value: int
534
+ value: float
535
535
 
536
536
 
537
537
  class DatabaseUsersMetricsResource(BaseCoreApiModel):
@@ -570,6 +570,7 @@ class DomainRouterUpdateRequest(BaseCoreApiModel):
570
570
  node_id: Optional[int] = None
571
571
  certificate_id: Optional[int] = None
572
572
  security_txt_policy_id: Optional[int] = None
573
+ carbon_txt_id: Optional[int] = None
573
574
  firewall_groups_ids: Optional[List[int]] = None
574
575
  force_ssl: Optional[bool] = None
575
576
  quic_enabled: Optional[bool] = None
@@ -1197,6 +1198,8 @@ class ObjectModelNameEnum(StrEnum):
1197
1198
  TOMBSTONE = "Tombstone"
1198
1199
  MALWARE = "Malware"
1199
1200
  STANDARDS_SCAN = "StandardsScan"
1201
+ CARBON_TXT = "CarbonTxt"
1202
+ SCHEDULED_ACTION = "ScheduledAction"
1200
1203
 
1201
1204
 
1202
1205
  class PhpExtensionEnum(StrEnum):
@@ -2630,6 +2633,7 @@ class CmsResource(BaseCoreApiModel):
2630
2633
  cluster_id: int
2631
2634
  software_name: CmsSoftwareNameEnum
2632
2635
  is_manually_created: bool
2636
+ version: Optional[constr(pattern=r"^[0-9.]+$", min_length=1, max_length=20)]
2633
2637
  virtual_host_id: int
2634
2638
  includes: CmsIncludes
2635
2639
 
@@ -3291,6 +3295,24 @@ class ClusterUnixUsersPropertiesResource(BaseCoreApiModel):
3291
3295
  includes: ClusterUnixUsersPropertiesIncludes
3292
3296
 
3293
3297
 
3298
+ class ClusterWebhookPropertiesIncludes(BaseCoreApiModel):
3299
+ pass
3300
+
3301
+
3302
+ class ClusterWebhookPropertiesResource(BaseCoreApiModel):
3303
+ id: int
3304
+ created_at: datetime
3305
+ updated_at: datetime
3306
+ callback_url: Optional[AnyUrl]
3307
+ cluster_id: int
3308
+ deployment_status: DeploymentStatusEnum
3309
+ includes: ClusterWebhookPropertiesIncludes
3310
+
3311
+
3312
+ class ClusterWebhookPropertiesUpdateRequest(BaseCoreApiModel):
3313
+ callback_url: Optional[AnyUrl] = None
3314
+
3315
+
3294
3316
  class SpecificationModeEnum(StrEnum):
3295
3317
  SINGLE = "Single"
3296
3318
  OR = "Or"
@@ -3432,6 +3454,10 @@ class BorgRepositoriesSearchRequest(BaseCoreApiModel):
3432
3454
  database_id: Optional[int] = None
3433
3455
 
3434
3456
 
3457
+ class CarbonTxtsSearchRequest(BaseCoreApiModel):
3458
+ cluster_id: Optional[int] = None
3459
+
3460
+
3435
3461
  class CertificatesSearchRequest(BaseCoreApiModel):
3436
3462
  main_common_name: Optional[str] = None
3437
3463
  common_names: Optional[str] = None
@@ -3585,6 +3611,7 @@ class DomainRoutersSearchRequest(BaseCoreApiModel):
3585
3611
  node_id: Optional[int] = None
3586
3612
  certificate_id: Optional[int] = None
3587
3613
  security_txt_policy_id: Optional[int] = None
3614
+ carbon_txt_id: Optional[int] = None
3588
3615
  firewall_group_id: Optional[int] = None
3589
3616
  force_ssl: Optional[bool] = None
3590
3617
  quic_enabled: Optional[bool] = None
@@ -3725,12 +3752,73 @@ class N8nInstanceResource(BaseCoreApiModel):
3725
3752
  includes: N8nInstanceIncludes
3726
3753
 
3727
3754
 
3755
+ class CarbonTxtDisclosureDocTypeEnum(StrEnum):
3756
+ WEB_PAGE = "web-page"
3757
+ ANNUAL_REPORT = "annual-report"
3758
+ SUSTAINABILITY_PAGE = "sustainability-page"
3759
+ CERTIFICATE = "certificate"
3760
+ CSRD_REPORT = "csrd-report"
3761
+ AI_MODEL_CARD = "ai-model-card"
3762
+ OTHER = "other"
3763
+
3764
+
3765
+ class CarbonTxtDisclosure(BaseCoreApiModel):
3766
+ doc_type: CarbonTxtDisclosureDocTypeEnum
3767
+ url: AnyUrl
3768
+ valid_until: Optional[datetime] = None
3769
+ title: Optional[constr(min_length=1, max_length=255)] = None
3770
+
3771
+
3772
+ class CarbonTxtUpstreamService(BaseCoreApiModel):
3773
+ domain: constr(min_length=1, max_length=255)
3774
+ service_type: Union[str, List[str]]
3775
+
3776
+
3777
+ class CarbonTxtCreateRequest(BaseCoreApiModel):
3778
+ cluster_id: int
3779
+ name: constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=32)
3780
+ is_default: bool
3781
+ disclosures: List[CarbonTxtDisclosure] = Field(
3782
+ [],
3783
+ )
3784
+ upstream_services: List[CarbonTxtUpstreamService] = Field(
3785
+ [],
3786
+ )
3787
+
3788
+
3789
+ class CarbonTxtUpdateRequest(BaseCoreApiModel):
3790
+ name: Optional[
3791
+ constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=32)
3792
+ ] = None
3793
+ disclosures: Optional[List[CarbonTxtDisclosure]] = None
3794
+ upstream_services: Optional[List[CarbonTxtUpstreamService]] = None
3795
+ is_default: Optional[bool] = None
3796
+
3797
+
3798
+ class CarbonTxtIncludes(BaseCoreApiModel):
3799
+ cluster: Optional[ClusterResource]
3800
+
3801
+
3802
+ class CarbonTxtResource(BaseCoreApiModel):
3803
+ id: int
3804
+ created_at: datetime
3805
+ updated_at: datetime
3806
+ cluster_id: int
3807
+ name: constr(pattern=r"^[a-zA-Z0-9-_ ]+$", min_length=1, max_length=32)
3808
+ disclosures: List[CarbonTxtDisclosure]
3809
+ upstream_services: List[CarbonTxtUpstreamService]
3810
+ is_default: bool
3811
+ deployment_status: DeploymentStatusEnum
3812
+ includes: CarbonTxtIncludes
3813
+
3814
+
3728
3815
  class DomainRouterIncludes(BaseCoreApiModel):
3729
3816
  virtual_host: Optional[VirtualHostResource]
3730
3817
  url_redirect: Optional[UrlRedirectResource]
3731
3818
  node: Optional[NodeResource]
3732
3819
  certificate: Optional[CertificateResource]
3733
3820
  security_txt_policy: Optional[SecurityTxtPolicyResource]
3821
+ carbon_txt: Optional[CarbonTxtResource]
3734
3822
  n8n_instance: Optional[N8nInstanceResource]
3735
3823
  cluster: Optional[ClusterResource]
3736
3824
 
@@ -3748,6 +3836,7 @@ class DomainRouterResource(BaseCoreApiModel):
3748
3836
  node_id: Optional[int]
3749
3837
  certificate_id: Optional[int]
3750
3838
  security_txt_policy_id: Optional[int]
3839
+ carbon_txt_id: Optional[int]
3751
3840
  firewall_groups_ids: Optional[List[int]]
3752
3841
  force_ssl: bool
3753
3842
  quic_enabled: bool
@@ -3885,6 +3974,10 @@ class ClustersUnixUsersPropertiesSearchRequest(BaseCoreApiModel):
3885
3974
  cluster_id: Optional[int] = None
3886
3975
 
3887
3976
 
3977
+ class ClustersWebhookPropertiesSearchRequest(BaseCoreApiModel):
3978
+ cluster_id: Optional[int] = None
3979
+
3980
+
3888
3981
  class CustomConfigSnippetsSearchRequest(BaseCoreApiModel):
3889
3982
  name: Optional[str] = None
3890
3983
  server_software_name: Optional[VirtualHostServerSoftwareNameEnum] = None
@@ -4151,6 +4244,177 @@ class StandardsScansSearchRequest(BaseCoreApiModel):
4151
4244
  cluster_id: Optional[int] = None
4152
4245
 
4153
4246
 
4247
+ class ScheduledActionEnum(StrEnum):
4248
+ XGRADE_NODE = "xgrade_node"
4249
+ CREATE_NODE_ADD_ON = "create_node_add_on"
4250
+ UPDATE_CLUSTER_NODES = "update_cluster_nodes"
4251
+
4252
+
4253
+ class ScheduledActionDataXgradeNode(BaseCoreApiModel):
4254
+ data_type: Literal["xgrade_node"] = "xgrade_node"
4255
+ node_id: int
4256
+ product_id: int
4257
+ original_product_id: int
4258
+
4259
+
4260
+ class ScheduledActionDataCreateNodeAddOn(BaseCoreApiModel):
4261
+ data_type: Literal["create_node_add_on"] = "create_node_add_on"
4262
+ node_id: int
4263
+ product_id: int
4264
+ quantity: conint(gt=0, le=4294967295)
4265
+
4266
+
4267
+ class ScheduledActionDataUpdateClusterNodes(BaseCoreApiModel):
4268
+ data_type: Literal["update_cluster_nodes"] = "update_cluster_nodes"
4269
+
4270
+
4271
+ class ScheduledActionIncludes(BaseCoreApiModel):
4272
+ cluster: Optional[ClusterResource]
4273
+
4274
+
4275
+ class ScheduledActionResource(BaseCoreApiModel):
4276
+ id: int
4277
+ created_at: datetime
4278
+ updated_at: datetime
4279
+ action: ScheduledActionEnum
4280
+ data: Union[
4281
+ ScheduledActionDataXgradeNode,
4282
+ ScheduledActionDataCreateNodeAddOn,
4283
+ ScheduledActionDataUpdateClusterNodes,
4284
+ ] = Field(..., discriminator="data_type")
4285
+ scheduled_at: datetime
4286
+ cluster_id: int
4287
+ task_collection_uuid: Optional[UUID4]
4288
+ deployment_status: DeploymentStatusEnum
4289
+ includes: ScheduledActionIncludes
4290
+
4291
+
4292
+ class ScheduledActionUpdateRequest(BaseCoreApiModel):
4293
+ scheduled_at: Optional[datetime] = None
4294
+
4295
+
4296
+ class ScheduledActionsSearchRequest(BaseCoreApiModel):
4297
+ action: Optional[ScheduledActionEnum] = None
4298
+ task_collection_uuid: Optional[UUID4] = None
4299
+
4300
+
4301
+ class HealthCheckCategoryEnum(StrEnum):
4302
+ HOSTING_SECURITY = "hosting_security"
4303
+ APPLICATION_SECURITY = "application_security"
4304
+ PERFORMANCE = "performance"
4305
+
4306
+
4307
+ class HealthCheckSeverityEnum(StrEnum):
4308
+ RECOMMENDATION = "recommendation"
4309
+ WARNING = "warning"
4310
+ CRITICAL = "critical"
4311
+
4312
+
4313
+ class HealthCheckTypeEnum(StrEnum):
4314
+ INNODB_BUFFER_POOL_SIZE_SUFFICIENT = "InnoDB buffer pool size sufficient"
4315
+ FPM_POOL_PHP_VERSION_UP_TO_DATE = "FPM pool PHP version up to date"
4316
+ UNIX_USER_PHP_VERSION_UP_TO_DATE = "UNIX user PHP version up to date"
4317
+ DATABASE_ENCRYPTION_AT_REST_ENABLED = "Database encryption at rest enabled"
4318
+ SSH_RESTRICTED_TO_SPECIFIC_IP_NETWORKS = "SSH restricted to specific IP networks"
4319
+ AUTOMATIC_OS_UPGRADES_ENABLED = "Automatic OS upgrades enabled"
4320
+ OPTIMISING_FOR_DATABASE_ENABLED = "Optimising for database enabled"
4321
+ QUIC_ENABLED_FOR_DOMAIN_ROUTER = "QUIC enabled for domain router"
4322
+ DATABASE_INDEXES_CREATED = "Database indexes created"
4323
+ WOOCOMMERCE_HPOS_ENABLED = "WooCommerce HPOS enabled"
4324
+
4325
+
4326
+ class HealthCheckDataInnodbBufferPoolSizeSufficient(BaseCoreApiModel):
4327
+ check_type: Literal["InnoDB buffer pool size sufficient"] = (
4328
+ "InnoDB buffer pool size sufficient"
4329
+ )
4330
+ current_bytes: int
4331
+ target_bytes: int
4332
+
4333
+
4334
+ class HealthCheckDataFpmPoolPhpVersionUpToDate(BaseCoreApiModel):
4335
+ check_type: Literal["FPM pool PHP version up to date"] = (
4336
+ "FPM pool PHP version up to date"
4337
+ )
4338
+
4339
+
4340
+ class HealthCheckDataUnixUserPhpVersionUpToDate(BaseCoreApiModel):
4341
+ check_type: Literal["UNIX user PHP version up to date"] = (
4342
+ "UNIX user PHP version up to date"
4343
+ )
4344
+
4345
+
4346
+ class HealthCheckDataDatabaseEncryptionAtRestEnabled(BaseCoreApiModel):
4347
+ check_type: Literal["Database encryption at rest enabled"] = (
4348
+ "Database encryption at rest enabled"
4349
+ )
4350
+
4351
+
4352
+ class HealthCheckDataSshRestrictedToSpecificIpNetworks(BaseCoreApiModel):
4353
+ check_type: Literal["SSH restricted to specific IP networks"] = (
4354
+ "SSH restricted to specific IP networks"
4355
+ )
4356
+
4357
+
4358
+ class HealthCheckDataAutomaticOsUpgradesEnabled(BaseCoreApiModel):
4359
+ check_type: Literal["Automatic OS upgrades enabled"] = (
4360
+ "Automatic OS upgrades enabled"
4361
+ )
4362
+
4363
+
4364
+ class HealthCheckDataOptimisingForDatabaseEnabled(BaseCoreApiModel):
4365
+ check_type: Literal["Optimising for database enabled"] = (
4366
+ "Optimising for database enabled"
4367
+ )
4368
+
4369
+
4370
+ class HealthCheckDataQuicEnabledForDomainRouter(BaseCoreApiModel):
4371
+ check_type: Literal["QUIC enabled for domain router"] = (
4372
+ "QUIC enabled for domain router"
4373
+ )
4374
+
4375
+
4376
+ class HealthCheckDataDatabaseIndexesCreated(BaseCoreApiModel):
4377
+ check_type: Literal["Database indexes created"] = "Database indexes created"
4378
+
4379
+
4380
+ class HealthCheckDataWoocommerceHposEnabled(BaseCoreApiModel):
4381
+ check_type: Literal["WooCommerce HPOS enabled"] = "WooCommerce HPOS enabled"
4382
+
4383
+
4384
+ class HealthCheckIncludes(BaseCoreApiModel):
4385
+ cluster: Optional[ClusterResource]
4386
+
4387
+
4388
+ class HealthCheckResource(BaseCoreApiModel):
4389
+ id: int
4390
+ created_at: datetime
4391
+ updated_at: datetime
4392
+ cluster_id: int
4393
+ check_type: HealthCheckTypeEnum
4394
+ category: HealthCheckCategoryEnum
4395
+ healthy: bool
4396
+ since: datetime
4397
+ severity: HealthCheckSeverityEnum
4398
+ silenced_at: Optional[datetime]
4399
+ object_model_name: ObjectModelNameEnum
4400
+ object_id: int
4401
+ data: Union[
4402
+ HealthCheckDataInnodbBufferPoolSizeSufficient,
4403
+ HealthCheckDataFpmPoolPhpVersionUpToDate,
4404
+ HealthCheckDataUnixUserPhpVersionUpToDate,
4405
+ HealthCheckDataDatabaseEncryptionAtRestEnabled,
4406
+ HealthCheckDataSshRestrictedToSpecificIpNetworks,
4407
+ HealthCheckDataAutomaticOsUpgradesEnabled,
4408
+ HealthCheckDataOptimisingForDatabaseEnabled,
4409
+ HealthCheckDataQuicEnabledForDomainRouter,
4410
+ HealthCheckDataDatabaseIndexesCreated,
4411
+ HealthCheckDataWoocommerceHposEnabled,
4412
+ ] = Field(..., discriminator="check_type")
4413
+ motivation: constr(pattern=r"^[ -~\n]+$", min_length=1, max_length=65535)
4414
+ deployment_status: DeploymentStatusEnum
4415
+ includes: HealthCheckIncludes
4416
+
4417
+
4154
4418
  NestedPathsDict.model_rebuild()
4155
4419
  CompositeSpecificationSatisfyResult.model_rebuild()
4156
4420
  CompositeSpecificationSatisfyResultResource.model_rebuild()
@@ -39,6 +39,7 @@ from . import (
39
39
  hosts_entries,
40
40
  database_users,
41
41
  security_txt_policies,
42
+ carbon_txts,
42
43
  customers,
43
44
  basic_authentication_realms,
44
45
  root_ssh_keys,
@@ -48,6 +49,8 @@ from . import (
48
49
  mail_domains,
49
50
  standards_scans,
50
51
  available_versions,
52
+ scheduled_actions,
53
+ health_checks,
51
54
  )
52
55
 
53
56
  __all__ = [
@@ -91,9 +94,12 @@ __all__ = [
91
94
  "n8n_instances",
92
95
  "root_ssh_keys",
93
96
  "security_txt_policies",
97
+ "carbon_txts",
94
98
  "regions",
95
99
  "ssh_keys",
96
100
  "standards_scans",
101
+ "scheduled_actions",
102
+ "health_checks",
97
103
  "task_collections",
98
104
  "unix_users",
99
105
  "url_redirects",
@@ -0,0 +1,83 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from cyberfusion.CoreApiClient.interfaces import Resource
3
+ from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
4
+ from cyberfusion.CoreApiClient.http import DtoResponse
5
+
6
+
7
+ class CarbonTxts(Resource):
8
+ def create_carbon_txt_policy(
9
+ self,
10
+ request: models.CarbonTxtCreateRequest,
11
+ ) -> DtoResponse[models.CarbonTxtResource]:
12
+ local_response = self.api_connector.send_or_fail(
13
+ "POST",
14
+ "/api/v1/carbon-txts",
15
+ data=request.model_dump(exclude_unset=True),
16
+ query_parameters={},
17
+ )
18
+
19
+ return DtoResponse.from_responses(local_response, models.CarbonTxtResource)
20
+
21
+ def list_carbon_txt_policies(
22
+ self,
23
+ *,
24
+ include_filters: models.CarbonTxtsSearchRequest | None = None,
25
+ includes: list[str] | None = None,
26
+ ) -> DtoResponse[list[models.CarbonTxtResource]]:
27
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
28
+ "GET",
29
+ "/api/v1/carbon-txts",
30
+ data=None,
31
+ query_parameters=(
32
+ include_filters.model_dump(exclude_unset=True)
33
+ if include_filters
34
+ else {}
35
+ )
36
+ | construct_includes_query_parameter(includes),
37
+ )
38
+
39
+ return DtoResponse.from_responses(local_responses, models.CarbonTxtResource)
40
+
41
+ def read_carbon_txt_policy(
42
+ self,
43
+ *,
44
+ id_: int,
45
+ includes: list[str] | None = None,
46
+ ) -> DtoResponse[models.CarbonTxtResource]:
47
+ local_response = self.api_connector.send_or_fail(
48
+ "GET",
49
+ f"/api/v1/carbon-txts/{id_}",
50
+ data=None,
51
+ query_parameters=construct_includes_query_parameter(includes),
52
+ )
53
+
54
+ return DtoResponse.from_responses(local_response, models.CarbonTxtResource)
55
+
56
+ def update_carbon_txt_policy(
57
+ self,
58
+ request: models.CarbonTxtUpdateRequest,
59
+ *,
60
+ id_: int,
61
+ ) -> DtoResponse[models.CarbonTxtResource]:
62
+ local_response = self.api_connector.send_or_fail(
63
+ "PATCH",
64
+ f"/api/v1/carbon-txts/{id_}",
65
+ data=request.model_dump(exclude_unset=True),
66
+ query_parameters={},
67
+ )
68
+
69
+ return DtoResponse.from_responses(local_response, models.CarbonTxtResource)
70
+
71
+ def delete_carbon_txt_policy(
72
+ self,
73
+ *,
74
+ id_: int,
75
+ ) -> DtoResponse[models.DetailMessage]:
76
+ local_response = self.api_connector.send_or_fail(
77
+ "DELETE",
78
+ f"/api/v1/carbon-txts/{id_}",
79
+ data=None,
80
+ query_parameters={},
81
+ )
82
+
83
+ return DtoResponse.from_responses(local_response, models.DetailMessage)
@@ -482,6 +482,20 @@ class Clusters(Resource):
482
482
  local_response, models.ClusterUnixUsersPropertiesResource
483
483
  )
484
484
 
485
+ def read_webhook_properties(
486
+ self, *, id_: int, includes: list[str] | None = None
487
+ ) -> DtoResponse[models.ClusterWebhookPropertiesResource]:
488
+ local_response = self.api_connector.send_or_fail(
489
+ "GET",
490
+ f"/api/v1/clusters/{id_}/properties/webhook",
491
+ data=None,
492
+ query_parameters=construct_includes_query_parameter(includes),
493
+ )
494
+
495
+ return DtoResponse.from_responses(
496
+ local_response, models.ClusterWebhookPropertiesResource
497
+ )
498
+
485
499
  def create_borg_properties(
486
500
  self,
487
501
  request: models.ClusterBorgPropertiesCreateRequest,
@@ -1154,6 +1168,28 @@ class Clusters(Resource):
1154
1168
  local_responses, models.ClusterUnixUsersPropertiesResource
1155
1169
  )
1156
1170
 
1171
+ def list_webhook_properties(
1172
+ self,
1173
+ *,
1174
+ include_filters: models.ClustersWebhookPropertiesSearchRequest | None = None,
1175
+ includes: list[str] | None = None,
1176
+ ) -> DtoResponse[list[models.ClusterWebhookPropertiesResource]]:
1177
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
1178
+ "GET",
1179
+ "/api/v1/clusters/properties/webhook",
1180
+ data=None,
1181
+ query_parameters=(
1182
+ include_filters.model_dump(exclude_unset=True)
1183
+ if include_filters
1184
+ else {}
1185
+ )
1186
+ | construct_includes_query_parameter(includes),
1187
+ )
1188
+
1189
+ return DtoResponse.from_responses(
1190
+ local_responses, models.ClusterWebhookPropertiesResource
1191
+ )
1192
+
1157
1193
  def update_borg_properties(
1158
1194
  self,
1159
1195
  request: models.ClusterBorgPropertiesUpdateRequest,
@@ -1443,6 +1479,35 @@ class Clusters(Resource):
1443
1479
  local_response, models.ClusterRabbitmqPropertiesResource
1444
1480
  )
1445
1481
 
1482
+ def update_webhook_properties(
1483
+ self,
1484
+ request: models.ClusterWebhookPropertiesUpdateRequest,
1485
+ *,
1486
+ id_: int,
1487
+ ) -> DtoResponse[models.ClusterWebhookPropertiesResource]:
1488
+ local_response = self.api_connector.send_or_fail(
1489
+ "PATCH",
1490
+ f"/api/v1/clusters/{id_}/properties/webhook",
1491
+ data=request.model_dump(exclude_unset=True),
1492
+ query_parameters={},
1493
+ )
1494
+
1495
+ return DtoResponse.from_responses(
1496
+ local_response, models.ClusterWebhookPropertiesResource
1497
+ )
1498
+
1499
+ def read_current_deployment_task_collection(
1500
+ self, *, id_: int, includes: list[str] | None = None
1501
+ ) -> DtoResponse[models.TaskCollectionResource]:
1502
+ local_response = self.api_connector.send_or_fail(
1503
+ "GET",
1504
+ f"/api/v1/clusters/{id_}/deployments/current/task-collection",
1505
+ data=None,
1506
+ query_parameters=construct_includes_query_parameter(includes),
1507
+ )
1508
+
1509
+ return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
1510
+
1446
1511
  def read_daemons_metrics_experimental(
1447
1512
  self,
1448
1513
  *,
@@ -1496,3 +1561,20 @@ class Clusters(Resource):
1496
1561
  )
1497
1562
 
1498
1563
  return DtoResponse.from_responses(local_response, models.DatabaseInnodbReport)
1564
+
1565
+ def refresh_cluster_health_checks(
1566
+ self,
1567
+ *,
1568
+ id_: int,
1569
+ callback_url: Optional[str] = None,
1570
+ ) -> DtoResponse[models.TaskCollectionResource]:
1571
+ local_response = self.api_connector.send_or_fail(
1572
+ "POST",
1573
+ f"/api/v1/clusters/{id_}/health-checks/refresh",
1574
+ data=None,
1575
+ query_parameters={
1576
+ "callback_url": callback_url,
1577
+ },
1578
+ )
1579
+
1580
+ return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
@@ -0,0 +1,19 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from cyberfusion.CoreApiClient.interfaces import Resource
3
+ from cyberfusion.CoreApiClient.http import DtoResponse
4
+
5
+
6
+ class HealthChecks(Resource):
7
+ def read_health_check(
8
+ self,
9
+ *,
10
+ id_: int,
11
+ ) -> DtoResponse[models.HealthCheckResource]:
12
+ local_response = self.api_connector.send_or_fail(
13
+ "GET",
14
+ f"/api/v1/health-checks/{id_}",
15
+ data=None,
16
+ query_parameters={},
17
+ )
18
+
19
+ return DtoResponse.from_responses(local_response, models.HealthCheckResource)
@@ -1,4 +1,5 @@
1
1
  from cyberfusion.CoreApiClient import models
2
+ from datetime import datetime
2
3
  from typing import Optional
3
4
 
4
5
  from cyberfusion.CoreApiClient.interfaces import Resource
@@ -23,6 +24,25 @@ class NodeAddOns(Resource):
23
24
 
24
25
  return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
25
26
 
27
+ def schedule_create_node_add_on(
28
+ self,
29
+ request: models.NodeAddOnCreateRequest,
30
+ *,
31
+ scheduled_at: datetime,
32
+ ) -> DtoResponse[models.ScheduledActionResource]:
33
+ local_response = self.api_connector.send_or_fail(
34
+ "POST",
35
+ "/api/v1/node-add-ons/schedule",
36
+ data=request.model_dump(exclude_unset=True),
37
+ query_parameters={
38
+ "scheduled_at": scheduled_at,
39
+ },
40
+ )
41
+
42
+ return DtoResponse.from_responses(
43
+ local_response, models.ScheduledActionResource
44
+ )
45
+
26
46
  def list_node_add_ons(
27
47
  self,
28
48
  *,
@@ -1,4 +1,5 @@
1
1
  from cyberfusion.CoreApiClient import models
2
+ from datetime import datetime
2
3
  from typing import Optional
3
4
 
4
5
  from cyberfusion.CoreApiClient.interfaces import Resource
@@ -119,6 +120,27 @@ class Nodes(Resource):
119
120
 
120
121
  return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
121
122
 
123
+ def schedule_upgrade_downgrade_node(
124
+ self,
125
+ *,
126
+ id_: int,
127
+ product: str,
128
+ scheduled_at: datetime,
129
+ ) -> DtoResponse[models.ScheduledActionResource]:
130
+ local_response = self.api_connector.send_or_fail(
131
+ "POST",
132
+ f"/api/v1/nodes/{id_}/xgrade/schedule",
133
+ data=None,
134
+ query_parameters={
135
+ "product": product,
136
+ "scheduled_at": scheduled_at,
137
+ },
138
+ )
139
+
140
+ return DtoResponse.from_responses(
141
+ local_response, models.ScheduledActionResource
142
+ )
143
+
122
144
  def add_node_groups(
123
145
  self,
124
146
  *,
@@ -0,0 +1,77 @@
1
+ from cyberfusion.CoreApiClient import models
2
+ from cyberfusion.CoreApiClient.interfaces import Resource
3
+ from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
4
+ from cyberfusion.CoreApiClient.http import DtoResponse
5
+
6
+
7
+ class ScheduledActions(Resource):
8
+ def list_scheduled_actions(
9
+ self,
10
+ *,
11
+ include_filters: models.ScheduledActionsSearchRequest | None = None,
12
+ includes: list[str] | None = None,
13
+ ) -> DtoResponse[list[models.ScheduledActionResource]]:
14
+ local_responses = self.api_connector.send_or_fail_with_auto_pagination(
15
+ "GET",
16
+ "/api/v1/scheduled-actions",
17
+ data=None,
18
+ query_parameters=(
19
+ include_filters.model_dump(exclude_unset=True)
20
+ if include_filters
21
+ else {}
22
+ )
23
+ | construct_includes_query_parameter(includes),
24
+ )
25
+
26
+ return DtoResponse.from_responses(
27
+ local_responses, models.ScheduledActionResource
28
+ )
29
+
30
+ def read_scheduled_action(
31
+ self,
32
+ *,
33
+ id_: int,
34
+ includes: list[str] | None = None,
35
+ ) -> DtoResponse[models.ScheduledActionResource]:
36
+ local_response = self.api_connector.send_or_fail(
37
+ "GET",
38
+ f"/api/v1/scheduled-actions/{id_}",
39
+ data=None,
40
+ query_parameters=construct_includes_query_parameter(includes),
41
+ )
42
+
43
+ return DtoResponse.from_responses(
44
+ local_response, models.ScheduledActionResource
45
+ )
46
+
47
+ def delete_scheduled_action(
48
+ self,
49
+ *,
50
+ id_: int,
51
+ ) -> DtoResponse[models.DetailMessage]:
52
+ local_response = self.api_connector.send_or_fail(
53
+ "DELETE",
54
+ f"/api/v1/scheduled-actions/{id_}",
55
+ data=None,
56
+ query_parameters={},
57
+ )
58
+
59
+ return DtoResponse.from_responses(local_response, models.DetailMessage)
60
+
61
+ def update_scheduled_action(
62
+ self,
63
+ request: models.ScheduledActionUpdateRequest,
64
+ *,
65
+ id_: int,
66
+ includes: list[str] | None = None,
67
+ ) -> DtoResponse[models.ScheduledActionResource]:
68
+ local_response = self.api_connector.send_or_fail(
69
+ "PATCH",
70
+ f"/api/v1/scheduled-actions/{id_}",
71
+ data=request.model_dump(exclude_unset=True),
72
+ query_parameters=construct_includes_query_parameter(includes),
73
+ )
74
+
75
+ return DtoResponse.from_responses(
76
+ local_response, models.ScheduledActionResource
77
+ )
@@ -1,5 +1,4 @@
1
1
  from cyberfusion.CoreApiClient import models
2
- from typing import Optional
3
2
 
4
3
  from cyberfusion.CoreApiClient.interfaces import Resource
5
4
  from cyberfusion.CoreApiClient._helpers import construct_includes_query_parameter
@@ -25,17 +24,13 @@ class TaskCollections(Resource):
25
24
  self,
26
25
  *,
27
26
  uuid: str,
28
- callback_url: Optional[str] = None,
29
27
  includes: list[str] | None = None,
30
28
  ) -> DtoResponse[models.TaskCollectionResource]:
31
29
  local_response = self.api_connector.send_or_fail(
32
30
  "POST",
33
31
  f"/api/v1/task-collections/{uuid}/retry",
34
32
  data=None,
35
- query_parameters={
36
- "callback_url": callback_url,
37
- }
38
- | construct_includes_query_parameter(includes),
33
+ query_parameters=construct_includes_query_parameter(includes),
39
34
  )
40
35
 
41
36
  return DtoResponse.from_responses(local_response, models.TaskCollectionResource)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-core-api-client
3
- Version: 8.0
3
+ Version: 9.0
4
4
  Summary: Python client for Core API.
5
5
  Author-email: Cyberfusion <support@cyberfusion.io>
6
6
  Project-URL: Source, https://github.com/CyberfusionIO/python3-core-api-client
@@ -13,7 +13,7 @@ Requires-Dist: pydantic[email]==2.12.5
13
13
 
14
14
  Python client for Core API.
15
15
 
16
- This client was built for and tested on the **1.273.0** version of the API.
16
+ This client was built for and tested on the **1.277.0** version of the API.
17
17
 
18
18
  ## Support
19
19
 
@@ -1,19 +1,20 @@
1
1
  cyberfusion/CoreApiClient/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cyberfusion/CoreApiClient/_encoders.py,sha256=Cf52zbE5vs4WYXRNvFPt9bBo4TV-pOyCLa1IImYnaJU,467
3
3
  cyberfusion/CoreApiClient/_helpers.py,sha256=QZ5OsQB_THFyKOyplR3bbdnVI1YlieiQF2imMOzc5So,241
4
- cyberfusion/CoreApiClient/connector.py,sha256=SLwDSa3fjLJnGx4FUNTvsm5Yt2wBeslMe6fl6FDlQkc,13997
4
+ cyberfusion/CoreApiClient/connector.py,sha256=I8lp9FY6RqVjRQ11iq0XBCOL9mk7tuRlfMKbGJtKoFk,14454
5
5
  cyberfusion/CoreApiClient/exceptions.py,sha256=fNxPtzVL4SzPiVNZmBTu1l8D57dkCxMxflyIXDPLE4Q,204
6
6
  cyberfusion/CoreApiClient/http.py,sha256=I0eNtlqZ1cvhDCL7nJUCUxnV0MmLckNnZoMLj4ot-bk,1577
7
7
  cyberfusion/CoreApiClient/interfaces.py,sha256=P0wCbmSNEpB-eF49PHudc_qXM4blIXm4TsD2AB0z_7Q,269
8
- cyberfusion/CoreApiClient/models.py,sha256=cKhwMPMDBBnQSBfpk-SotailzYpp9GNA2xNZYQbFqP0,120869
9
- cyberfusion/CoreApiClient/resources/__init__.py,sha256=Y2MlLaTGVoqy0uDCZTUZdTML2KniON-rfb3nSzs2RRQ,1985
8
+ cyberfusion/CoreApiClient/models.py,sha256=WeKteOI8pw0iveTs9YsiMZWtoJRX1-t1ateaUwRbb_k,129188
9
+ cyberfusion/CoreApiClient/resources/__init__.py,sha256=_RUmP6a909jBr5AhFvMIG_IKrgFx4-HXeA5hKr5YteY,2109
10
10
  cyberfusion/CoreApiClient/resources/available_versions.py,sha256=vzsTL0j5oaG84_5crC29N3gCMnRvw49qMXuEwpywUCk,1838
11
11
  cyberfusion/CoreApiClient/resources/basic_authentication_realms.py,sha256=XRkECp58sdER3be7z7GON-GO9-zvVk2L1MzeJAdNoDY,3176
12
12
  cyberfusion/CoreApiClient/resources/borg_archives.py,sha256=asHM1dYVEFOB17EzhM7rF39uHAq2FZ5veMJLcsVsHLA,4130
13
13
  cyberfusion/CoreApiClient/resources/borg_repositories.py,sha256=QgOTJBqB3R1Nvi-7thi-CgYIMuGrgJQAzx1MPrfM-yI,4373
14
+ cyberfusion/CoreApiClient/resources/carbon_txts.py,sha256=-BP10iGqe5tKYNl-dXlWOJQt8DXvNJsVyS-S7qUD-aI,2770
14
15
  cyberfusion/CoreApiClient/resources/certificate_managers.py,sha256=U6mfeBRg4d5Hza1QcXkgWqNYakiT_dHp_L_I41tHEeQ,3440
15
16
  cyberfusion/CoreApiClient/resources/certificates.py,sha256=5MPfeMu6Wdvawz7l5EwPjm2kDdACA5PvASbRBzKeJWE,2251
16
- cyberfusion/CoreApiClient/resources/clusters.py,sha256=0Rlbm4nGhGMTz-pj-ROfIcKyt__98nRpqaGpkWWpCXM,51732
17
+ cyberfusion/CoreApiClient/resources/clusters.py,sha256=4yeUJnwjl5pd-Osh8zxv_aou5DjEtH_kWjjc8JvhIv8,54657
17
18
  cyberfusion/CoreApiClient/resources/cmses.py,sha256=G28flYuBmF1LN2cTJgkP3pWTy3DQquRGPUXaLA2LQlE,12096
18
19
  cyberfusion/CoreApiClient/resources/crons.py,sha256=NmWdqk6cArOjpw88JmsIB6l9PdEUGbmTd2kS-xuF6wY,2578
19
20
  cyberfusion/CoreApiClient/resources/custom_config_snippets.py,sha256=EZgPGsd9sjeBfEE2kobhvMf79N4stQAzAaIxHroS1UI,3185
@@ -31,6 +32,7 @@ cyberfusion/CoreApiClient/resources/ftp_users.py,sha256=4_dK5Il2Dr7GDeRvfM5YleoL
31
32
  cyberfusion/CoreApiClient/resources/haproxy_listens.py,sha256=pXi9AYYK4KjwcQP1Qc9cLRlMyHSxPGJddZEKquzRSDQ,2330
32
33
  cyberfusion/CoreApiClient/resources/haproxy_listens_to_nodes.py,sha256=hul_NXSWSJgyUrclbzPx4fZ3V4SKe85qOfyrbWhgH80,2521
33
34
  cyberfusion/CoreApiClient/resources/health.py,sha256=Fis6X6aRThflelWkpTrsBtFnrGGvsT33YEpWccFzzKU,483
35
+ cyberfusion/CoreApiClient/resources/health_checks.py,sha256=692l_sM1jlBD3V_pw0aRtuluooKzUcuLtCWc_J5lgi4,584
34
36
  cyberfusion/CoreApiClient/resources/hosts_entries.py,sha256=szKdTNfQky004HUVGZwAYFdPO-P61i01vUxVUkcowDY,2248
35
37
  cyberfusion/CoreApiClient/resources/htpasswd_files.py,sha256=ogxSQf2bMNvDc1tQ_wAhuFcc-IoxyfSY1tulFWjSa0Q,2313
36
38
  cyberfusion/CoreApiClient/resources/htpasswd_users.py,sha256=KQb28mpIuHkEzOYWCGN03E2xft90oAtveDNTrH7zJu4,2801
@@ -43,20 +45,21 @@ cyberfusion/CoreApiClient/resources/mail_hostnames.py,sha256=aUTbTW0cF7AIJh4_TdR
43
45
  cyberfusion/CoreApiClient/resources/malwares.py,sha256=FsFaAHo-4u4v7TIl7GNjlx26dPw5S6c1_18fR0uhSYk,956
44
46
  cyberfusion/CoreApiClient/resources/mariadb_encryption_keys.py,sha256=Hw-A2Y_b3mUxruHbxCmxwydzfjWPu4inAeh8GQvPMCU,2115
45
47
  cyberfusion/CoreApiClient/resources/n8n_instances.py,sha256=pbGIUlYjq5e52KPLnq0hG-W1rM2EaILIEOIaBVpoLXA,2926
46
- cyberfusion/CoreApiClient/resources/node_add_ons.py,sha256=H-_93V-rKpSJbz79EiKIjrHCEaHJlXXDwx7Tisd3-1s,2867
47
- cyberfusion/CoreApiClient/resources/nodes.py,sha256=NPmvQqoKWUQdh_4nQIP-6eWgofPFBfANxmQBkbheaos,4399
48
+ cyberfusion/CoreApiClient/resources/node_add_ons.py,sha256=BxhL4uNx3QjVyR000lVxp9o9D_MbYtcf8CvsQ-0DtkU,3489
49
+ cyberfusion/CoreApiClient/resources/nodes.py,sha256=0fKmLS5w2-QpMAC2NWSzKseV96-mah8--grwWpcU2yo,5026
48
50
  cyberfusion/CoreApiClient/resources/passenger_apps.py,sha256=f2HnASA-byB_34UtpIdXVJcmhDVRSYXqdKp4fqmLyV0,3455
49
51
  cyberfusion/CoreApiClient/resources/redis_instances.py,sha256=60XC7DpZpV8Q__FkQZrSkH8kJMm5IZ7gJm1w8EvzS7g,2970
50
52
  cyberfusion/CoreApiClient/resources/regions.py,sha256=yr8W7JlXzyPr8hWsX18Zj4Zbc7YfcCyunYU2vEps4sQ,950
51
53
  cyberfusion/CoreApiClient/resources/root_ssh_keys.py,sha256=bKHxFIC_sEu4OT6TMx95JyBgPJ1TZKLXcQKG1Rd-4MI,2736
54
+ cyberfusion/CoreApiClient/resources/scheduled_actions.py,sha256=dW2_vVNoKtkr8DZbTN0ij2qlK8J_oFVgi3ROhnid_hQ,2551
52
55
  cyberfusion/CoreApiClient/resources/security_txt_policies.py,sha256=5uOPMatxEWs9WXl0rp8djV4Vi2_4ZI8waRrsgcKu66Y,3016
53
56
  cyberfusion/CoreApiClient/resources/ssh_keys.py,sha256=U7OPQWVnCtpGJ3-wybIjWb7dd-oFaXM0Jy-8FJNlE90,2638
54
57
  cyberfusion/CoreApiClient/resources/standards_scans.py,sha256=C6-AE18p33Rw8UDT0Q3N8WYFKCL9tdnyTQrzjm6yTRo,1899
55
- cyberfusion/CoreApiClient/resources/task_collections.py,sha256=XmJ2JqssmWRxl5t_m-kjpJxcL7bmMTrohs7zpIDBZJA,1332
58
+ cyberfusion/CoreApiClient/resources/task_collections.py,sha256=9XKijkqc_DxeA4CQif66uamLsuCP6z_UNaXVol4eUzI,1184
56
59
  cyberfusion/CoreApiClient/resources/unix_users.py,sha256=dJknxliUJpWaKzrZgRhZvnuTRgnC-25vXt1asUPDxmc,4092
57
60
  cyberfusion/CoreApiClient/resources/url_redirects.py,sha256=S113S_8-Xzy040Lt67AetenB-Cjsnyg34prDnr5yf84,2741
58
61
  cyberfusion/CoreApiClient/resources/virtual_hosts.py,sha256=mIFeF17_XJtQKkIDXJfrOFQ9M-uOifBKGRIytOnGjNk,5392
59
- python3_core_api_client-8.0.dist-info/METADATA,sha256=jK-HQOOvskZCdoFxs22Ucj9hrkauzU3mmyeobE7E7FE,8593
60
- python3_core_api_client-8.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
61
- python3_core_api_client-8.0.dist-info/top_level.txt,sha256=ss011q9S6SL_KIIyq7iujFmIYa0grSjlnInO7cDkeag,12
62
- python3_core_api_client-8.0.dist-info/RECORD,,
62
+ python3_core_api_client-9.0.dist-info/METADATA,sha256=enwwTxorg-W11MHg5Jiv-ybfAu5i78cN-dwmjVCtZ3s,8593
63
+ python3_core_api_client-9.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
64
+ python3_core_api_client-9.0.dist-info/top_level.txt,sha256=ss011q9S6SL_KIIyq7iujFmIYa0grSjlnInO7cDkeag,12
65
+ python3_core_api_client-9.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (82.0.1)
2
+ Generator: setuptools (83.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5