diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 71ca4d1..e98a22b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -23,3 +23,10 @@ repos:
- id: flake8
name: flake8 (2/2)
exclude: src/dynamix_sdk/types\.py|.*__init__\.py|.*_api\.py
+ - repo: local
+ hooks:
+ - id: pytest-local-tests
+ name: pytest local tests
+ entry: pytest tests/local
+ language: system
+ pass_filenames: false
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d1ea0a0..3ff2b15 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,28 +1,185 @@
-# Список изменений в версии 1.0.0
+# Список изменений в версии 1.0.1
## Добавлено
-### Глобально
+### Функциональный интерфейс
| Идентификатор
задачи | Описание |
| --- | --- |
-| BPYS-3 | Добавлена возможность авторизации через DECS3O. |
-| BPYS-7 | Добавлена возможность авторизации через BVS. |
+| BPYS-16 | Добавлена функция API `/cloudapi/account/list`. |
+| BPYS-34 | Добавлена функция API `/cloudapi/account/update`. |
+| BPYS-31 | Добавлена функция API `/cloudapi/account/get`. |
+| BPYS-61 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.disks.image_ids` в связи с переименованием из `images`. |
+| BPYS-61 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.disks.image_ids` в связи с переименованием из `images`. |
+| BPYS-22 | Добавлена функция API `/cloudapi/account/listDeleted`. |
+| BPYS-59 | Добавлены функции API `/cloudapi/disks/get`, `/cloudapi/disks/list`, `/cloudapi/disks/listDeleted`, `/cloudapi/disks/listUnattached`. |
+| BPYS-59 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.disks.shared` в связи с переименованием из `shareable`. |
+| BPYS-62 | Функция API `/cloudapi/compute/get`: добавлен параметр `vm_id` в связи с переименованием из `compute_id`. |
+| BPYS-62 | Функция API `/cloudapi/compute/update`: добавлен параметр `vm_id` в связи с переименованием из `compute_id`. |
+| BPYS-62 | Функция API `/cloudapi/compute/delete`: добавлен параметр `vm_id` в связи с переименованием из `compute_id`. |
+| BPYS-36 | Добавлена функция API `/cloudapi/kvmx86/createBlank`. |
+| BPYS-37 | Добавлена функция API `/cloudapi/compute/start`. |
+| BPYS-38 | Добавлена функция API `/cloudapi/compute/stop`. |
+| BPYS-39 | Добавлена функция API `/cloudapi/compute/reboot`. |
+| BPYS-40 | Добавлена функция API `/cloudapi/compute/resize`. |
+| BPYS-41 | Добавлена функция API `/cloudapi/compute/pause`. |
+| BPYS-42 | Добавлена функция API `/cloudapi/compute/resume`. |
+| BPYS-71 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.vm_features` в связи с переименованием из `compute_features`. |
+| BPYS-71 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.vm_features` в связи с переименованием из `compute_features`. |
+| BPYS-68 | Добавлена функция API `/cloudbroker/account/create`. |
+| BPYS-63 | Добавлены функции API `/cloudapi/image/get`, `/cloudapi/image/list`. |
+| BPYS-73 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.vm_ci_id` в связи с переименованием из `compute_ci_id`. |
+| BPYS-73 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.vm_ci_id` в связи с переименованием из `compute_ci_id`. |
+| BPYS-60 | Добавлены функции API `/cloudapi/vins/get`, `/cloudapi/vins/list`, `/cloudapi/vins/listDeleted`. |
+| BPYS-66 | Добавлена функция API `/cloudapi/compute/changeIp`. |
+| BPYS-67 | Добавлены функции API `/cloudapi/compute/netAttach`, `/cloudapi/compute/netDetach`. |
+| BPYS-70 | Добавлены функции API `/cloudapi/bservice/get`, `/cloudapi/bservice/list`, `/cloudapi/bservice/listDeleted`. |
+| BPYS-74 | Добавлена функция API `/cloudapi/bservice/groupGet`. |
+| BPYS-75 | Добавлены функции API `/cloudapi/rg/delete`, `/cloudapi/rg/restore`. |
+| BPYS-82 | Добавлены функции API `/cloudapi/bservice/create`, `/cloudapi/bservice/delete`, `/cloudapi/bservice/restore`. |
+| BPYS-80 | Добавлены функции API `/cloudapi/disks/create`, `/cloudapi/disks/delete`, `/cloudapi/disks/restore`. |
+| BPYS-84 | Добавлены функции API `/cloudapi/bservice/disable`, `/cloudapi/bservice/enable`, `/cloudapi/bservice/start`, `/cloudapi/bservice/stop`. |
+| BPYS-87 | Добавлены функции API `/cloudapi/bservice/groupAdd`, `/cloudapi/bservice/groupRemove`. |
+| BPYS-83 | Добавлены функции API `/cloudapi/image/create`, `/cloudapi/image/createVirtual`, `/cloudapi/image/delete`, `/cloudapi/image/link`, `/cloudapi/image/rename`. |
+| BPYS-85 | Добавлены функции API `/cloudapi/extnet/get`, `/cloudapi/extnet/list`, `/cloudapi/extnet/getDefault`. |
+| BPYS-88 | Добавлены функции API `/cloudapi/flipgroup/computeAdd`, `/cloudapi/flipgroup/computeRemove`, `/cloudapi/flipgroup/create`, `/cloudapi/flipgroup/delete`, `/cloudapi/flipgroup/edit`, `/cloudapi/flipgroup/get`, `/cloudapi/flipgroup/list`. |
+| BPYS-78 | Добавлены функции API `/cloudapi/vins/createInAccount`, `/cloudapi/vins/createInRG`, `/cloudapi/vins/delete`, `/cloudapi/vins/restore`. |
+| BPYS-76 | Добавлена функция API `/cloudapi/rg/update`. |
+| BPYS-91 | Добавлены функции API `/cloudapi/bservice/groupComputeRemove`, `/cloudapi/bservice/groupParentAdd`, `/cloudapi/bservice/groupParentRemove`, `/cloudapi/bservice/groupResize`, `/cloudapi/bservice/groupStart`, `/cloudapi/bservice/groupStop`, `/cloudapi/bservice/groupUpdate`, `/cloudapi/bservice/groupUpdateExtnet`, `/cloudapi/bservice/groupUpdateVins` . |
+| BPYS-77 | Добавлены функции API `/cloudapi/rg/setDefNet`, `/cloudapi/rg/removeDefNet`. |
+| BPYS-81 | Добавлены функции API `/cloudapi/account/delete`, `/cloudapi/account/restore`. |
+| BPYS-119 | Добавлена функция API `/cloudapi/compute/clone`. |
+| BPYS-79 | Добавлены функции API `/cloudapi/lb/get`, `/cloudapi/lb/list`, `/cloudapi/lb/listDeleted`, `cloudapi/lb/create`, `/cloudapi/lb/delete`. |
+| BPYS-95 | Добавлены функции API `/cloudapi/rg/accessGrant`, `/cloudapi/rg/accessRevoke`. |
+| BPYS-93 | Добавлены функции API `/cloudapi/disks/deleteDisks`, `/cloudapi/disks/limitIO`, `/cloudapi/disks/listTypes`, `/cloudapi/disks/rename`, `/cloudapi/disks/resize2`, `/cloudapi/disks/share`, `/cloudapi/disks/snapshotDelete`, `/cloudapi/disks/snapshotRollback`, `/cloudapi/disks/unshare`. |
+| BPYS-98 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.vm` в связи с переименованием из `compute`. |
+| BPYS-98 | Функция API `/cloudapi/compute/get`: для атрибута `CloudapiComputeGetResultModel.affinity_rules.topology` в перечисляемый тип `AffinityTopology` добавлено значение `vm` в связи с переименованием из `compute`. |
+| BPYS-98 | Функция API `/cloudapi/compute/get`: для атрибута `CloudapiComputeGetResultModel.anti_affinity_rules.topology` в перечисляемый тип `AffinityTopology` добавлено значение `vm` в связи с переименованием из `compute`. |
+| BPYS-98 | Функция API `/cloudapi/compute/list`: для атрибута `CloudapiComputeListResultModel.data.affinity_rules.topology` в перечисляемый тип `AffinityTopology` добавлено значение `vm` в связи с переименованием из `compute`. |
+| BPYS-98 | Функция API `/cloudapi/compute/list`: для атрибута `CloudapiComputeListResultModel.data.anti_affinity_rules.topology` в перечисляемый тип `AffinityTopology` добавлено значение `vm` в связи с переименованием из `compute`. |
+| BPYS-98 | Функция API `/cloudapi/rg/get`: для атрибута `CloudapiRgGetResultModel.resource_types` в перечисляемый тип `RGResourceType` добавлено значение `vm` в связи с переименованием из `compute`. |
+| BPYS-98 | Функция API `/cloudapi/rg/list`: для атрибута `CloudapiRgListResultModel.data.resource_types` в перечисляемый тип `RGResourceType` добавлено значение `vm` в связи с переименованием из `compute`. |
+| BPYS-118 | Добавлена функция API `/cloudapi/compute/redeploy`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/create`: добавлен параметр `cpu_count` в связи с переименованием из `cpu`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/create`: добавлен параметр `ram_size_mb` в связи с переименованием из `ram`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.quotas.cpu_count` в связи с переименованием из `cpu`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.quotas.disk_size_gb` в связи с переименованием из `disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.quotas.public_ip_count` в связи с переименованием из `public_ip`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.quotas.ram_size_mb` в связи с переименованием из `ram`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.quotas.storage_size_gb` в связи с переименованием из `storage`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.quotas.cpu_count` в связи с переименованием из `cpu`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.quotas.disk_size_gb` в связи с переименованием из `disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.quotas.public_ip_count` в связи с переименованием из `public_ip`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.quotas.ram_size_mb` в связи с переименованием из `ram`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.quotas.storage_size_gb` в связи с переименованием из `storage`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.cpu_count` в связи с переименованием из `cpu`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.ram_size_mb` в связи с переименованием из `ram`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.cpu_count` в связи с переименованием из `cpu`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.ram_size_mb` в связи с переименованием из `ram`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.boot_disk_size_gb` в связи с переименованием из `boot_disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.boot_disk_size_gb` в связи с переименованием из `boot_disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/create`: добавлен параметр `boot_disk_size_gb` в связи с переименованием из `boot_disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/createBlank`: добавлен параметр `boot_disk_size_gb` в связи с переименованием из `boot_disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: добавлен параметр `cpu_count_quota` в связи с переименованием из `cpu_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: добавлен параметр `public_ip_count_quota` в связи с переименованием из `public_ip_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: добавлен параметр `ram_size_quota_mb` в связи с переименованием из `ram_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: добавлен параметр `storage_size_quota_gb` в связи с переименованием из `storage_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: добавлен атрибут `CloudapiRgGetResultModel.quotas.gpu_count` в связи с переименованием из `gpu`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: добавлен атрибут `CloudapiRgListResultModel.data.quotas.gpu_count` в связи с переименованием из `gpu`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: добавлен параметр `cpu_count_quota` в связи с переименованием из `cpu_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: добавлен параметр `public_ip_count_quota` в связи с переименованием из `public_ip_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: добавлен параметр `ram_size_quota_mb` в связи с переименованием из `ram_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: добавлен параметр `storage_size_quota_gb` в связи с переименованием из `storage_quota`. |
+| BPYS-126 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.vgpus` в связи с переименованием из `gpu_ids`. |
+| BPYS-126 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.vgpus` в связи с переименованием из `gpu_ids`. |
+| BPYS-96 | Добавлены функции API `cloudapi/rg/enable,`, `cloudapi/rg/disable`. |
+| BPYS-138 | Добавлены функции API `/cloudapi/stack/get`, `/cloudapi/stack/list`. |
+| BPYS-133 | Добавлены функции API `/cloudapi/locations/getUrl`, `/cloudapi/locations/list`. |
+| BPYS-136 | Добавлены функции API `/cloudapi/compute/tagAdd`, `/cloudapi/compute/tagRemove`. |
+| BPYS-137 | Добавлены функции API `/cloudapi/compute/cdEject`, `/cloudapi/compute/cdInsert`.|
+| BPYS-134 | Добавлены функции API `/cloudapi/compute/diskAdd`, `/cloudapi/compute/diskAttach`, `/cloudapi/compute/diskDetach`, `/cloudapi/compute/diskResize`. |
+| BPYS-135 | Добавлены функции API `/cloudapi/compute/affinityRelations`, `/cloudapi/compute/affinityLabelRemove`, `/cloudapi/compute/affinityLabelSet`, `/cloudapi/compute/affinityRuleAdd`, `/cloudapi/compute/affinityRuleRemove`, `/cloudapi/compute/affinityRulesClear`, `/cloudapi/compute/antiAffinityRuleAdd`, `/cloudapi/compute/antiAffinityRuleRemove`, `/cloudapi/compute/antiAffinityRulesClear`. |
+| BPYS-131 | Добавлены функции API `/cloudapi/vins/vnfdevRedeploy`, `/cloudapi/vins/vnfdevRestart`. |
+| BPYS-143 | Добавлена функция API `/cloudapi/compute/diskDel`. |
+| BPYS-132 | Добавлены функции API `/cloudapi/tasks/get`, `/cloudapi/tasks/list`. |
+| BPYS-145 | Добавлены функции API `/cloudapi/compute/setCustomFields` `/cloudapi/compute/deleteCustomFields`. |
+| BPYS-144 | Добавлены функции API `/cloudapi/compute/snapshotCreate`, `/cloudapi/compute/snapshotList`, `/cloudapi/compute/snapshotRollback`. |
+| BPYS-130 | Добавлены функции API `/cloudapi/vins/staticRouteAdd`, `/cloudapi/vins/staticRouteDel`, `/cloudapi/vins/staticRouteList`. |
+| BPYS-171 | Добавлены функции API `/cloudapi/lb/backendCreate`, `/cloudapi/lb/backendDelete`, `/cloudapi/lb/backendServerAdd`, `/cloudapi/lb/backendServerDelete`, `/cloudapi/lb/backendServerUpdate`, `/cloudapi/lb/backendUpdate`. |
+| BPYS-146 | Добавлены функции API `/cloudapi/compute/pinToStack`, `/cloudapi/compute/unpinFromStack`. |
+| BPYS-182 | Добавлены функции API `/cloudapi/vins/ipList`, `/cloudapi/vins/ipReserve`, `/cloudapi/vins/ipRelease`. |
+| BPYS-196 | Функция API `/cloudapi/compute/get`: добавлен атрибут `CloudapiComputeGetResultModel.cdrom_image_id` в связи с переименованием из `cd_image_id`. |
+| BPYS-196 | Функция API `/cloudapi/compute/list`: добавлен атрибут `CloudapiComputeListResultModel.data.cdrom_image_id` в связи с переименованием из `cd_image_id`. |
+| BPYS-147 | Добавлены функции API `/cloudapi/compute/pfwAdd`, `/cloudapi/compute/pfwDel`, `/cloudapi/compute/pfwList`. |
+| BPYS-148 | Функция API `/cloudapi/kvmx86/create`: у параметра `data_disks` в модели `DiskAPIParamsNM` добавлен атрибут `size_gb` в связи с переименованием из `size`. |
+
+## Удалено
+
+### Функциональный интерфейс
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BPYS-59 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.disks.shareable` в связи с переименованием в `shared`. |
+| BPYS-61 | Функция API `/cloudapi/compute/get`: удалён атрибут `CloudapiComputeGetResultModel.disks.images` в связи с переименованием в `image_ids`. |
+| BPYS-61 | Функция API `/cloudapi/compute/list`: удалён атрибут `CloudapiComputeListResultModel.data.disks.images` в связи с переименованием в `image_ids`. |
+| BPYS-62 | Функция API `/cloudapi/compute/get`: удалён параметр `compute_id` в связи с переименованием в `vm_id`. |
+| BPYS-62 | Функция API `/cloudapi/compute/update`: удалён параметр `compute_id` в связи с переименованием в `vm_id`. |
+| BPYS-62 | Функция API `/cloudapi/compute/delete`: удалён параметр `compute_id` в связи с переименованием в `vm_id`. |
+| BPYS-71 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.compute_features` в связи с переименованием в `vm_features`. |
+| BPYS-71 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.compute_features` в связи с переименованием в `vm_features`. |
+| BPYS-73 | Функция API `/cloudapi/compute/get`: удалён параметр `CloudapiComputeGetResultModel.compute_ci_id` в связи с переименованием в `vm_ci_id`. |
+| BPYS-73 | Функция API `/cloudapi/compute/list`: удалён параметр `CloudapiComputeListResultModel.data.compute_ci_id` в связи с переименованием в `vm_ci_id`. |
+| BPYS-98 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.acl.compute` в связи с переименованием в `vm`. |
+| BPYS-98 | Функция API `/cloudapi/compute/get`: для атрибута `CloudapiComputeGetResultModel.affinity_rules.topology` из перечисляемого типа `AffinityTopology` удалено значение `compute` в связи с переименованием в `vm`. |
+| BPYS-98 | Функция API `/cloudapi/compute/get`: для атрибута `CloudapiComputeGetResultModel.anti_affinity_rules.topology` из перечисляемого типа `AffinityTopology` удалено значение `compute` в связи с переименованием в `vm`. |
+| BPYS-98 | Функция API `/cloudapi/compute/list`: для атрибута `CloudapiComputeListResultModel.data.affinity_rules.topology` из перечисляемого типа `AffinityTopology` удалено значение `compute` в связи с переименованием в `vm`. |
+| BPYS-98 | Функция API `/cloudapi/compute/list`: для атрибута `CloudapiComputeListResultModel.data.anti_affinity_rules.topology` из перечисляемого типа `AffinityTopology` удалено значение `compute` в связи с переименованием в `vm`. |
+| BPYS-98 | Функция API `/cloudapi/rg/get`: для атрибута `CloudapiRgGetResultModel.resource_types` из перечисляемого типа `RGResourceType` удалено значение `compute` в связи с переименованием в `vm`. |
+| BPYS-98 | Функция API `/cloudapi/rg/list`: для атрибута `CloudapiRgListResultModel.data.resource_types` из перечисляемого типа `RGResourceType` удалено значение `compute` в связи с переименованием в `vm`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/create`: удалён параметр `cpu` в связи с переименованием в `cpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/create`: удалён параметр `ram` в связи с переименованием в `ram_size_mb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.cpu` в связи с переименованием в `cpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.disk_size` в связи с переименованием в `disk_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.public_ip` в связи с переименованием в `public_ip_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.ram` в связи с переименованием в `ram_size_mb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.storage` в связи с переименованием в `storage_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.cpu` в связи с переименованием в `cpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.disk_size` в связи с переименованием в `disk_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.public_ip` в связи с переименованием в `public_ip_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.ram` в связи с переименованием в `ram_size_mb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.storage` в связи с переименованием в `storage_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.cpu` в связи с переименованием в `cpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.ram` в связи с переименованием в `ram_size_mb`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: удален атрибут `CloudapiComputeListResultModel.data.cpu` в связи с переименованием в `cpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: удален атрибут `CloudapiComputeListResultModel.data.ram` в связи с переименованием в `ram_size_mb`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.boot_disk_size` в связи с переименованием в `boot_disk_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.boot_disk_size` в связи с переименованием в `boot_disk_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: удален атрибут `CloudapiComputeListResultModel.data.boot_disk_size` в связи с переименованием в `boot_disk_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/compute/list`: удален атрибут `CloudapiComputeListResultModel.data.boot_disk_size` в связи с переименованием в `boot_disk_size_gb`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/create`: удален параметр `boot_disk_size_gb` в связи с переименованием в `boot_disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/kvmx86/createBlank`: удален параметр `boot_disk_size_gb` в связи с переименованием в `boot_disk_size`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: удален параметр `cpu_quota` в связи с переименованием в `cpu_count_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: удален параметр `public_ip_quota` в связи с переименованием в `public_ip_count_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: удален параметр `ram_quota` в связи с переименованием в `ram_size_quota_mb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/create`: удален параметр `storage_size_quota_gb` в связи с переименованием в `storage_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.gpu` в связи с переименованием в `gpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/get`: удален атрибут `CloudapiRgGetResultModel.quotas.gpu` в связи с переименованием в `gpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.gpu` в связи с переименованием в `gpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/list`: удален атрибут `CloudapiRgListResultModel.data.quotas.gpu` в связи с переименованием в `gpu_count`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: удален параметр `cpu_quota` в связи с переименованием в `cpu_count_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: удален параметр `public_ip_quota` в связи с переименованием в `public_ip_count_quota`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: удален параметр `ram_quota` в связи с переименованием в `ram_size_quota_mb`. |
+| BPYS-116 | Функция API `/cloudapi/rg/update`: удален параметр `storage_quota` в связи с переименованием в `storage_size_quota_gb`. |
+| BPYS-126 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.gpu_ids` в связи с переименованием в `vgpus`. |
+| BPYS-126 | Функция API `/cloudapi/compute/list`: удален атрибут `CloudapiComputeListResultModel.data.gpu_ids` в связи с переименованием в `vgpus`. |
+| BPYS-120 | Добавлены функции API `/cloudapi/compute/userGrant`, `/cloudapi/compute/userList`, `/cloudapi/compute/userRevoke`, `/cloudapi/compute/userUpdate`. |
+| BPYS-196 | Функция API `/cloudapi/compute/get`: удален атрибут `CloudapiComputeGetResultModel.cd_image_id` в связи с переименованием в `cdrom_image_id`. |
+| BPYS-196 | Функция API `/cloudapi/compute/list`: удален атрибут `CloudapiComputeListResultModel.data.cd_image_id` в связи с переименованием в `cdrom_image_id`. |
+| BPYS-148 | Функция API `/cloudapi/kvmx86/create`: у параметра `data_disks` в модели `DiskAPIParamsNM` удален атрибут `size` в связи с переименованием в `size_gb`. |
+
+## Исправлено
### Функциональный интерфейс
| Идентификатор
задачи | Описание |
| --- | --- |
-| BPYS-5 | Добавлена функция API `/system/usermanager/whoami`. |
-| BPYS-4 | Добавлена функция API `/cloudapi/compute/get`. |
-| BPYS-6 | Добавлена функция API `/cloudapi/kvmx86/create`. |
-| BPYS-12 | Добавлена функция API `/cloudapi/compute/delete`. |
-| BPYS-21 | Добавлена функция API `/cloudapi/user/get`. |
-| BPYS-15 | Добавлена функция API `/cloudapi/compute/update`. |
-| BPYS-29 | Добавлена функция API `/cloudapi/account/updateUser`. |
-| BPYS-33 | Добавлена функция API `/cloudapi/account/enable`. |
-| BPYS-32 | Добавлена функция API `/cloudapi/account/disable`. |
-| BPYS-45 | Добавлена функция API `/cloudapi/rg/list`. |
-| BPYS-20 | Добавлена функция API `/cloudapi/account/addUser`. |
-| BPYS-30 | Добавлена функция API `/cloudapi/account/deleteUser`. |
-| BPYS-51 | Добавлена функция API `/cloudapi/rg/get`. |
-| BPYS-52 | Добавлена функция API `/cloudapi/rg/create`. |
-| BPYS-35 | Добавлена функция API `/cloudapi/compute/list`. |
+| BPYS-62 | Функция API `/cloudapi/compute/get`: имя атрибута `CloudapiComputeGetResultModel.vns_password` исправлено на `vnc_password`. |
+| BPYS-126 | Вызов функции `/cloudapi/compute/get` завершался ошибкой валидации атрибута `CloudapiComputeGetResultModel.gpu_ids` при наличии соответствующих данных в ответе API. |
+| BPYS-126 | Вызов функции `/cloudapi/compute/list` завершался ошибкой валидации атрибута `CloudapiComputeListResultModel.data.gpu_ids` при наличии соответствующих данных в ответе API. |
diff --git a/README.md b/README.md
index ef70803..e702940 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,7 @@
- [Способы авторизации](#способы-авторизации)
- [Функции API](#функции-api)
- [Cloudapi](#cloudapi)
+ - [Cloudbroker](#cloudbroker)
- [System](#system)
## Описание
@@ -203,14 +204,14 @@ from dynamix_sdk import Dynamix, types
dx = Dynamix(...)
-data_disk_1 = types.DiskAPIParamsNM(name='data_disk_1', size=10)
+data_disk_1 = types.DiskAPIParamsNM(name='data_disk_1', size_gb=10)
# /cloudapi/kvmx86/create
new_vm_id = dx.api.cloudapi.kvmx86.create(
rg_id=123,
name='new_vm',
- cpu=1,
- ram=1024,
+ cpu_count=1,
+ ram_size_mb=1024,
image_id=456,
data_disks=[data_disk_1],
)
@@ -230,8 +231,8 @@ dx = Dynamix(...)
new_vm_id = dx.api.cloudapi.kvmx86.create(
rg_id=123,
name='new_vm',
- cpu=1,
- ram=1024,
+ cpu_count=1,
+ ram_size_mb=1024,
image_id=456,
chipset=types.Chipset.Q35, # enum
numa_affinity=types.NumaAffinity.none, # enum
@@ -257,7 +258,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/get
-get_result = dx.api.cloudapi.compute.get(compute_id=1)
+get_result = dx.api.cloudapi.compute.get(vm_id=1)
print(type(get_result)) #
@@ -276,7 +277,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/get
-vm_name = dx.api.cloudapi.compute.get(compute_id=1).name
+vm_name = dx.api.cloudapi.compute.get(vm_id=1).name
```
@@ -294,7 +295,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/get
-vm_disk1 = dx.api.cloudapi.compute.get(compute_id=1).disks[0]
+vm_disk1 = dx.api.cloudapi.compute.get(vm_id=1).disks[0]
print(type(vm_disk1)) #
@@ -313,7 +314,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/get
-vm_disk1_id = dx.api.cloudapi.compute.get(compute_id=1).disks[0].id
+vm_disk1_id = dx.api.cloudapi.compute.get(vm_id=1).disks[0].id
```
@@ -331,7 +332,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/get
-get_result = dx.api.cloudapi.compute.get(compute_id=1)
+get_result = dx.api.cloudapi.compute.get(vm_id=1)
# Поле, возвращаемое платформой
print(type(get_result.created_timestamp)) #
@@ -375,7 +376,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/delete
-delete_result = dx.api.cloudapi.compute.delete(compute_id=1)
+delete_result = dx.api.cloudapi.compute.delete(vm_id=1)
print(type(delete_result)) #
print(type(delete_result.value)) #
@@ -391,7 +392,7 @@ from dynamix_sdk import Dynamix
dx = Dynamix(...)
# /cloudapi/compute/delete
-if dx.api.cloudapi.compute.delete(compute_id=1):
+if dx.api.cloudapi.compute.delete(vm_id=1):
print('The VM has been deleted.')
```
@@ -458,7 +459,7 @@ dx = Dynamix(...)
vm_id = 1
try:
- get_result = dx.api.cloudapi.compute.get(compute_id=vm_id)
+ get_result = dx.api.cloudapi.compute.get(vm_id=vm_id)
except HTTPError as e:
resp = e.response
if resp.status_code == 404:
@@ -491,33 +492,209 @@ except RequestException as e:
account
- /cloudapi/account/addUser
+- /cloudapi/account/delete
- /cloudapi/account/deleteUser
- /cloudapi/account/disable
- /cloudapi/account/enable
+- /cloudapi/account/get
+- /cloudapi/account/list
+- /cloudapi/account/listDeleted
+- /cloudapi/account/restore
+- /cloudapi/account/update
- /cloudapi/account/updateUser
+bservice
+
+- /cloudapi/bservice/create
+- /cloudapi/bservice/delete
+- /cloudapi/bservice/disable
+- /cloudapi/bservice/enable
+- /cloudapi/bservice/get
+- /cloudapi/bservice/groupAdd
+- /cloudapi/bservice/groupComputeRemove
+- /cloudapi/bservice/groupGet
+- /cloudapi/bservice/groupParentAdd
+- /cloudapi/bservice/groupParentRemove
+- /cloudapi/bservice/groupRemove
+- /cloudapi/bservice/groupResize
+- /cloudapi/bservice/groupStart
+- /cloudapi/bservice/groupStop
+- /cloudapi/bservice/groupUpdate
+- /cloudapi/bservice/groupUpdateExtnet
+- /cloudapi/bservice/groupUpdateVins
+- /cloudapi/bservice/list
+- /cloudapi/bservice/listDeleted
+- /cloudapi/bservice/restore
+- /cloudapi/bservice/start
+- /cloudapi/bservice/stop
+
+
+
compute
+- /cloudapi/compute/affinityLabelRemove
+- /cloudapi/compute/affinityLabelSet
+- /cloudapi/compute/affinityRelations
+- /cloudapi/compute/affinityRuleAdd
+- /cloudapi/compute/affinityRuleRemove
+- /cloudapi/compute/affinityRulesClear
+- /cloudapi/compute/antiAffinityRuleAdd
+- /cloudapi/compute/antiAffinityRuleRemove
+- /cloudapi/compute/antiAffinityRulesClear
+- /cloudapi/compute/cdEject
+- /cloudapi/compute/cdInsert
+- /cloudapi/compute/changeIp
+- /cloudapi/compute/clone
- /cloudapi/compute/delete
+- /cloudapi/compute/deleteCustomFields
+- /cloudapi/compute/diskAdd
+- /cloudapi/compute/diskAttach
+- /cloudapi/compute/diskDel
+- /cloudapi/compute/diskDetach
+- /cloudapi/compute/diskResize
- /cloudapi/compute/get
- /cloudapi/compute/list
+- /cloudapi/compute/netAttach
+- /cloudapi/compute/netDetach
+- /cloudapi/compute/pause
+- /cloudapi/compute/pfwAdd
+- /cloudapi/compute/pfwDel
+- /cloudapi/compute/pfwList
+- /cloudapi/compute/pinToStack
+- /cloudapi/compute/reboot
+- /cloudapi/compute/redeploy
+- /cloudapi/compute/resize
+- /cloudapi/compute/resume
+- /cloudapi/compute/setCustomFields
+- /cloudapi/compute/snapshotCreate
+- /cloudapi/compute/snapshotList
+- /cloudapi/compute/snapshotRollback
+- /cloudapi/compute/start
+- /cloudapi/compute/stop
+- /cloudapi/compute/tagAdd
+- /cloudapi/compute/tagRemove
+- /cloudapi/compute/unpinFromStack
- /cloudapi/compute/update
+- /cloudapi/compute/userGrant
+- /cloudapi/compute/userList
+- /cloudapi/compute/userRevoke
+- /cloudapi/compute/userUpdate
+
+
+
+disks
+
+- /cloudapi/disks/create
+- /cloudapi/disks/delete
+- /cloudapi/disks/deleteDisks
+- /cloudapi/disks/get
+- /cloudapi/disks/limitIO
+- /cloudapi/disks/list
+- /cloudapi/disks/listDeleted
+- /cloudapi/disks/listTypes
+- /cloudapi/disks/listUnattached
+- /cloudapi/disks/rename
+- /cloudapi/disks/resize2
+- /cloudapi/disks/restore
+- /cloudapi/disks/share
+- /cloudapi/disks/snapshotDelete
+- /cloudapi/disks/snapshotRollback
+- /cloudapi/disks/unshare
+
+
+
+extnet
+
+- /cloudapi/extnet/get
+- /cloudapi/extnet/getDefault
+- /cloudapi/extnet/list
+
+
+
+flipgroup
+
+- /cloudapi/flipgroup/computeAdd
+- /cloudapi/flipgroup/computeRemove
+- /cloudapi/flipgroup/create
+- /cloudapi/flipgroup/delete
+- /cloudapi/flipgroup/edit
+- /cloudapi/flipgroup/get
+- /cloudapi/flipgroup/list
+
+
+
+image
+
+- /cloudapi/image/create
+- /cloudapi/image/createVirtual
+- /cloudapi/image/delete
+- /cloudapi/image/get
+- /cloudapi/image/link
+- /cloudapi/image/list
+- /cloudapi/image/rename
kvmx86
- /cloudapi/kvmx86/create
+- /cloudapi/kvmx86/createBlank
+
+
+
+lb
+
+- /cloudapi/lb/backendCreate
+- /cloudapi/lb/backendDelete
+- /cloudapi/lb/backendServerAdd
+- /cloudapi/lb/backendServerDelete
+- /cloudapi/lb/backendServerUpdate
+- /cloudapi/lb/backendUpdate
+- /cloudapi/lb/create
+- /cloudapi/lb/delete
+- /cloudapi/lb/get
+- /cloudapi/lb/list
+- /cloudapi/lb/listDeleted
+
+
+
+locations
+
+- /cloudapi/locations/getUrl
+- /cloudapi/locations/list
rg
+- /cloudapi/rg/accessGrant
+- /cloudapi/rg/accessRevoke
- /cloudapi/rg/create
+- /cloudapi/rg/delete
+- /cloudapi/rg/disable
+- /cloudapi/rg/enable
- /cloudapi/rg/get
- /cloudapi/rg/list
+- /cloudapi/rg/removeDefNet
+- /cloudapi/rg/restore
+- /cloudapi/rg/setDefNet
+- /cloudapi/rg/update
+
+
+
+stack
+
+- /cloudapi/stack/get
+- /cloudapi/stack/list
+
+
+
+tasks
+
+- /cloudapi/tasks/get
+- /cloudapi/tasks/list
@@ -527,6 +704,34 @@ except RequestException as e:
+vins
+
+- /cloudapi/vins/createInAccount
+- /cloudapi/vins/createInRG
+- /cloudapi/vins/delete
+- /cloudapi/vins/get
+- /cloudapi/vins/ipList
+- /cloudapi/vins/ipRelease
+- /cloudapi/vins/ipReserve
+- /cloudapi/vins/list
+- /cloudapi/vins/listDeleted
+- /cloudapi/vins/restore
+- /cloudapi/vins/staticRouteAdd
+- /cloudapi/vins/staticRouteDel
+- /cloudapi/vins/staticRouteList
+- /cloudapi/vins/vnfdevRedeploy
+- /cloudapi/vins/vnfdevRestart
+
+
+
+#### Cloudbroker
+
+account
+
+- /cloudbroker/account/create
+
+
+
#### System
usermanager
diff --git a/demo/select_api_function_and_passing_params_and_save_result.gif b/demo/select_api_function_and_passing_params_and_save_result.gif
index 012a614..f1709e2 100644
Binary files a/demo/select_api_function_and_passing_params_and_save_result.gif and b/demo/select_api_function_and_passing_params_and_save_result.gif differ
diff --git a/pyproject.toml b/pyproject.toml
index 1476e2a..0b88332 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,7 +1,7 @@
[project]
name = "dynamix-sdk"
authors = [{name = "Dmitriy Smirnov"}]
-version = "1.0.0"
+version = "1.0.1"
readme = "README.md"
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 40a16fa..99819c6 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1 +1,2 @@
pre-commit==4.1.0
+pytest==8.3.5
diff --git a/src/dynamix_sdk/api/_api.py b/src/dynamix_sdk/api/_api.py
index 61279ff..0c8c0d9 100644
--- a/src/dynamix_sdk/api/_api.py
+++ b/src/dynamix_sdk/api/_api.py
@@ -1,8 +1,10 @@
import dynamix_sdk.base as _base
from .cloudapi import *
+from .cloudbroker import *
from .system import *
class API(_base.BaseAPI):
cloudapi: CloudapiAPI
+ cloudbroker: CloudbrokerAPI
system: SystemAPI
diff --git a/src/dynamix_sdk/api/_nested/enums.py b/src/dynamix_sdk/api/_nested/enums.py
index 37dd767..0c6d52c 100644
--- a/src/dynamix_sdk/api/_nested/enums.py
+++ b/src/dynamix_sdk/api/_nested/enums.py
@@ -23,7 +23,7 @@ class AffinityPolicy(str, _AutoNameEnum):
class AffinityTopology(str, _AutoNameEnum):
- compute = _enum_auto()
+ vm = 'compute'
node = _enum_auto()
@@ -51,6 +51,11 @@ class NetType(str, _AutoNameEnum):
VINS = _enum_auto()
+class NetTypeForChangeIP(str, _AutoNameEnum):
+ EXTNET = _enum_auto()
+ VINS = _enum_auto()
+
+
class NumaAffinity(str, _AutoNameEnum):
none = _enum_auto()
strict = _enum_auto()
@@ -93,7 +98,7 @@ class LockStatus(str, _AutoNameEnum):
UNLOCKED = _enum_auto()
-class ComputeFeature(str, _AutoNameEnum):
+class VMFeature(str, _AutoNameEnum):
cpupin = _enum_auto()
dpdk = _enum_auto()
hugepages = _enum_auto()
@@ -101,6 +106,11 @@ class ComputeFeature(str, _AutoNameEnum):
vfnic = _enum_auto()
+class RGDefaultNetTypeForSet(str, _AutoNameEnum):
+ PRIVATE = _enum_auto()
+ PUBLIC = _enum_auto()
+
+
class RGDefaultNetType(str, _AutoNameEnum):
NONE = _enum_auto()
PRIVATE = _enum_auto()
@@ -108,7 +118,7 @@ class RGDefaultNetType(str, _AutoNameEnum):
class RGResourceType(str, _AutoNameEnum):
- compute = _enum_auto()
+ vm = 'compute'
k8s = _enum_auto()
lb = _enum_auto()
vins = _enum_auto()
@@ -159,3 +169,265 @@ class VMTechStatus(str, _AutoNameEnum):
class DiskType(str, _AutoNameEnum):
B = _enum_auto()
D = _enum_auto()
+
+
+class AccountStatus(str, _AutoNameEnum):
+ CONFIRMED = _enum_auto()
+ DISABLED = _enum_auto()
+ DELETED = _enum_auto()
+ DESTROYED = _enum_auto()
+ DESTROYING = _enum_auto()
+
+
+class AccountResourceType(str, _AutoNameEnum):
+ vm = 'compute'
+ k8s = _enum_auto()
+ lb = _enum_auto()
+ vins = _enum_auto()
+ flipgroup = _enum_auto()
+
+
+class ImageTechStatus(str, _AutoNameEnum):
+ ALLOCATED = _enum_auto()
+ UNALLOCATED = _enum_auto()
+
+
+class ImageStatus(str, _AutoNameEnum):
+ CREATED = _enum_auto()
+ CREATING = _enum_auto()
+ DESTROYED = _enum_auto()
+ MODELED = _enum_auto()
+ PURGED = _enum_auto()
+
+
+class ImageType(str, _AutoNameEnum):
+ cdrom = _enum_auto()
+ linux = _enum_auto()
+ other = _enum_auto()
+ virtual = _enum_auto()
+ windows = _enum_auto()
+
+
+class NetIfaceNamingTemplate(str, _AutoNameEnum):
+ ens = _enum_auto()
+ eth = _enum_auto()
+
+
+class VINSStatus(str, _AutoNameEnum):
+ MODELED = _enum_auto()
+ CREATED = _enum_auto()
+ ENABLED = _enum_auto()
+ ENABLING = _enum_auto()
+ DISABLED = _enum_auto()
+ DISABLING = _enum_auto()
+ DELETED = _enum_auto()
+ DELETING = _enum_auto()
+ DESTROYED = _enum_auto()
+ DESTROYING = _enum_auto()
+
+
+class VNFType(str, _AutoNameEnum):
+ DHCP = _enum_auto()
+ GW = _enum_auto()
+ NAT = _enum_auto()
+
+
+class VNFDevStatus(str, _AutoNameEnum):
+ MODELED = _enum_auto()
+ CREATED = _enum_auto()
+ ENABLED = _enum_auto()
+ DISABLED = _enum_auto()
+ DELETED = _enum_auto()
+ DESTROYED = _enum_auto()
+ STASHED = _enum_auto()
+
+
+class VNFDevTechStatus(str, _AutoNameEnum):
+ STARTING = _enum_auto()
+ STARTED = _enum_auto()
+ STOPPING = _enum_auto()
+ STOPPED = _enum_auto()
+ VIRTUAL = _enum_auto()
+
+
+class VINSInterfaceType(str, _AutoNameEnum):
+ MGMT = _enum_auto()
+
+
+class NATRuleProtocol(str, _AutoNameEnum):
+ tcp = _enum_auto()
+ udp = _enum_auto()
+
+
+class VNFDevType(str, _AutoNameEnum):
+ vyos = _enum_auto()
+
+
+class BootMode(str, _AutoNameEnum):
+ bios = _enum_auto()
+ uefi = _enum_auto()
+
+
+class BServiceStatus(str, _AutoNameEnum):
+ CREATED = _enum_auto()
+ DELETED = _enum_auto()
+ DELETING = _enum_auto()
+ DESTROYED = _enum_auto()
+ DESTROYING = _enum_auto()
+ DISABLED = _enum_auto()
+ DISABLING = _enum_auto()
+ ENABLED = _enum_auto()
+ ENABLING = _enum_auto()
+ MODELED = _enum_auto()
+ RECONFIGURING = _enum_auto()
+ RESTORING = _enum_auto()
+
+
+class BServiceTechStatus(str, _AutoNameEnum):
+ PAUSED = _enum_auto()
+ PAUSING = _enum_auto()
+ STARTED = _enum_auto()
+ STARTING = _enum_auto()
+ STOPPED = _enum_auto()
+ STOPPING = _enum_auto()
+
+
+class BServiceGroupStatus(str, _AutoNameEnum):
+ CREATED = _enum_auto()
+ CREATING = _enum_auto()
+ CURRUPTED = _enum_auto()
+ DELETED = _enum_auto()
+ DELETING = _enum_auto()
+ DESTROYED = _enum_auto()
+ DESTROYING = _enum_auto()
+ DISABLED = _enum_auto()
+ DISABLING = _enum_auto()
+ ENABLED = _enum_auto()
+ ENABLING = _enum_auto()
+ MODELED = _enum_auto()
+ RESTORING = _enum_auto()
+
+
+class BServiceGroupTechStatus(str, _AutoNameEnum):
+ STARTED = _enum_auto()
+ STARTING = _enum_auto()
+ STOPPED = _enum_auto()
+ STOPPING = _enum_auto()
+
+
+class SEPType(str, _AutoNameEnum):
+ HITACHI = _enum_auto()
+ DES = _enum_auto()
+ OVS = _enum_auto()
+ LOCAL = _enum_auto()
+ TATLIN = _enum_auto()
+ DORADO = _enum_auto()
+ SHARED = _enum_auto()
+
+
+class ExtNetStatus(str, _AutoNameEnum):
+ CREATED = _enum_auto()
+ DESTROYED = _enum_auto()
+ DESTROYING = _enum_auto()
+ DISABLED = _enum_auto()
+ DISABLING = _enum_auto()
+ ENABLED = _enum_auto()
+ ENABLING = _enum_auto()
+ MODELED = _enum_auto()
+
+
+class BootLoaderType(str, _AutoNameEnum):
+ linux = _enum_auto()
+ other = _enum_auto()
+ windows = _enum_auto()
+
+
+class FlipGroupClientType(str, _AutoNameEnum):
+ VM = 'compute'
+
+
+class FlipGroupStatus(str, _AutoNameEnum):
+ CREATED = _enum_auto()
+ DESTROYED = _enum_auto()
+
+
+class FlipGroupNetType(str, _AutoNameEnum):
+ EXTNET = _enum_auto()
+ VINS = _enum_auto()
+
+
+class PoolDiskType(str, _AutoNameEnum):
+ B = _enum_auto()
+ D = _enum_auto()
+ ANY = _enum_auto()
+
+
+class CountChangeMode(str, _AutoNameEnum):
+ ABSOLUTE = _enum_auto()
+ RELATIVE = _enum_auto()
+
+
+class LBStatus(str, _AutoNameEnum):
+ MODELED = _enum_auto()
+ CREATING = _enum_auto()
+ CREATED = _enum_auto()
+ DELETING = _enum_auto()
+ DELETED = _enum_auto()
+ DESTROYING = _enum_auto()
+ DESTROYED = _enum_auto()
+ ENABLING = _enum_auto()
+ ENABLED = _enum_auto()
+ DISABLING = _enum_auto()
+ DISABLED = _enum_auto()
+ RESTORING = _enum_auto()
+
+
+class LBTechStatus(str, _AutoNameEnum):
+ STARTING = _enum_auto()
+ STARTED = _enum_auto()
+ STOPPING = _enum_auto()
+ STOPPED = _enum_auto()
+
+
+class LBBackendAlgorithm(str, _AutoNameEnum):
+ ROUNDROBIN = 'roundrobin'
+ STATIC_RR = 'static-rr'
+ LEASTCONN = 'leastconn'
+
+
+class LBServerCheck(str, _AutoNameEnum):
+ ENABLED = 'enabled'
+ DISABLED = 'disabled'
+
+
+class AccessTypeForSet(str, _AutoNameEnum):
+ ARCXDU = _enum_auto()
+ RCX = _enum_auto()
+ R = _enum_auto()
+
+
+class DataDisksChangeMode(str, _AutoNameEnum):
+ DESTROY = _enum_auto()
+ DETACH = _enum_auto()
+ KEEP = _enum_auto()
+
+
+class PhysicalNodeStatus(str, _AutoNameEnum):
+ DECOMMISSIONED = _enum_auto()
+ DECOMMISSIONING = _enum_auto()
+ ENABLED = _enum_auto()
+ INSTALLING = _enum_auto()
+ MAINTENANCE = _enum_auto()
+ RESTRICTED = _enum_auto()
+
+
+class AuthBroker(str, _AutoNameEnum):
+ DECS3O = 'decs3o'
+ BVS = 'bvs'
+
+
+class DHCPReservationType(str, _AutoNameEnum):
+ DHCP = _enum_auto()
+ EXCLUDED = _enum_auto()
+ SERVICE = _enum_auto()
+ VIP = _enum_auto()
diff --git a/src/dynamix_sdk/api/_nested/params.py b/src/dynamix_sdk/api/_nested/params.py
index 52a5b47..9f976bd 100644
--- a/src/dynamix_sdk/api/_nested/params.py
+++ b/src/dynamix_sdk/api/_nested/params.py
@@ -4,7 +4,7 @@ from . import enums as _enums
class DiskAPIParamsNM(_base.BaseAPIParamsNestedModel):
name: str
- size: int
+ size_gb: int
description: None | str = None
image_id: None | int = None
@@ -18,3 +18,9 @@ class InterfaceAPIParamsNM(_base.BaseAPIParamsNestedModel):
ip_addr: None | str = None
mtu: None | int = None
+
+
+class RouteAPIParamsNM(_base.BaseAPIParamsNestedModel):
+ dst_net_ip: str
+ dst_net_mask: str
+ gateway: str
diff --git a/src/dynamix_sdk/api/_nested/result.py b/src/dynamix_sdk/api/_nested/result.py
index 48e21ae..65a4ffe 100644
--- a/src/dynamix_sdk/api/_nested/result.py
+++ b/src/dynamix_sdk/api/_nested/result.py
@@ -1,16 +1,20 @@
+import typing as _typing
+
import dynamix_sdk.base as _base
from dynamix_sdk.utils import EmptyStr as _EmptyStr
from . import enums as _enums
class AccessAPIResultNM(_base.BaseAPIResultNestedModel):
- explicit: bool
+ explicit: bool | str # BDX-8471
guid: str
access_type: _enums.AccessType
status: str
type: str
user_group_id: str
+ can_be_deleted: None | bool = None
+
class AffinityRuleAPIResultNM(_base.BaseAPIResultNestedModel):
guid: str
@@ -28,9 +32,11 @@ class QOSAPIResultNM(_base.BaseAPIResultNestedModel):
ingress_rate: int
-class VMACLAPIResultNM(_base.BaseAPIResultNestedModel):
+class VMACLForComputeGetAPIResultNM( # BDX-8459
+ _base.BaseAPIResultNestedModel
+):
account: list[AccessAPIResultNM]
- compute: list[AccessAPIResultNM]
+ vm: list[AccessAPIResultNM]
rg: list[AccessAPIResultNM]
@@ -60,7 +66,6 @@ class BaseInterfaceAPIResultNM(_base.BaseAPIResultNestedModel):
name: str
net_id: int
net_mask: int
- net_type: _enums.NetType
node_id: int
pci_slot: int
target: str
@@ -68,15 +73,17 @@ class BaseInterfaceAPIResultNM(_base.BaseAPIResultNestedModel):
vnf_ids: list[int]
-class InterfaceAPIResultNM(BaseInterfaceAPIResultNM):
+class InterfaceForComputeListAPIResultNM(BaseInterfaceAPIResultNM):
+ net_type: _enums.NetType
+
+
+class InterfaceForComputeGetAPIResultNM(InterfaceForComputeListAPIResultNM):
qos: QOSAPIResultNM
-class OSUserAPIResultNM(_base.BaseAPIResultNestedModel):
- login: str
- password: str
- pub_key: str
- guid: str
+class VNFDevInterfaceAPIResultNM(BaseInterfaceAPIResultNM):
+ net_type: _EmptyStr | _enums.NetType
+ qos: QOSAPIResultNM
class SnapshotSetAPIResultNM(_base.BaseAPIResultNestedModel):
@@ -133,50 +140,42 @@ class ReplicationAPIResultNM(_base.BaseAPIResultNestedModel):
volume_id: str
-class BaseDiskAPIResultNM(_base.BaseAPIResultNestedModel):
+class BaseDiskForCAComputeAPIResultNM(_base.BaseAPIResultNestedModel):
bus_number: int
id: int
pci_slot: int
-class DiskAPIResultNM(BaseDiskAPIResultNM):
+class BaseDiskAPIResultNM(_base.BaseAPIResultNestedModel):
account_id: int
acl: dict
- boot_partition: int
created_timestamp: int
deleted_timestamp: int
description: str
destruction_timestamp: int
- disk_path: str
grid_id: int
- guid: int
+ id: int
image_id: int
- images: list
+ image_ids: list[int]
io_tune: IOTuneAPIResultNM
- iqn: str
- login: str
- milestones: int
name: str
order: int
params: str
parent_id: int
- password: str
present_to: list[int]
purge_timestamp: int
- reality_device_number: int
- replication_dict: dict
+ replication: ReplicationAPIResultNM | dict
res_id: str
role: str
sep_id: int
sep_pool_name: str
- shareable: bool
- size_max: int
+ shared: bool
+ size_max_gb: int
size_used: float
snapshots: list[SnapshotAPIResultNM]
status: _enums.DiskStatus
tech_status: _enums.DiskTechStatus
type: _enums.DiskType
-
updated_timestamp: int = 0
@property
@@ -191,35 +190,80 @@ class DiskAPIResultNM(BaseDiskAPIResultNM):
def destruction_datetime(self):
return self._get_datetime_from_timestamp(self.destruction_timestamp)
- @property
- def updated_datetime(self):
- return self._get_datetime_from_timestamp(self.updated_timestamp)
-
@property
def purge_datetime(self):
return self._get_datetime_from_timestamp(self.purge_timestamp)
@property
- def replication(self):
- if self.replication_dict:
- return ReplicationAPIResultNM(**self.replication_dict)
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
+class BaseDiskForCADisksAPIResultNM(BaseDiskAPIResultNM):
+ res_name: str
+ account_name: str
+ updated_by: _typing.Any = ''
+
+
+class DiskForCAComputeGetAPIResultNM(
+ BaseDiskForCAComputeAPIResultNM,
+ BaseDiskAPIResultNM,
+):
+ boot_partition: int
+ disk_path: str
+ guid: int
+ iqn: str
+ login: str
+ milestones: int
+ password: str
+ reality_device_number: int
+ updated_by: _typing.Any = ''
+
+
+class DiskForListAndListDeletedAPIResultNM(
+ BaseDiskForCADisksAPIResultNM,
+ BaseDiskAPIResultNM,
+):
+ vms: dict[str, str]
+ device_name: str
+ vm_id: int | None
+ vm_name: str | None
+ sep_type: _enums.SEPType
+
+
+class DiskForListUnattachedAPIResultNM(
+ BaseDiskForCADisksAPIResultNM,
+ BaseDiskAPIResultNM,
+):
+ boot_partition: int
+ disk_path: str
+ guid: int
+ iqn: str
+ login: str
+ milestones: int
+ password: str
+ pci_slot: int
+ purge_attempt_count: int
+ reality_device_number: int
+ reference_id: str
+ vm_id: int
class TenantQuotasAPIResultNM(_base.BaseAPIResultNestedModel):
- cpu: int
- disk_size: int
+ cpu_count: int
+ disk_size_gb: int
ext_traffic: int
- gpu: int
- public_ip: int
- ram: float | int
- storage: int
+ gpu_count: int
+ public_ip_count: int
+ ram_size_mb: float | int
+ storage_size_gb: int
class ResourceGroupAPIResultNM(_base.BaseAPIResultNestedModel):
account_id: int
account_name: str
acl: list[AccessAPIResultNM]
- compute_features: list[_enums.ComputeFeature]
+ vm_features: list[_enums.VMFeature]
cpu_allocation_parameter: str
cpu_allocation_ratio: int
created_by: str
@@ -261,6 +305,29 @@ class ResourceGroupAPIResultNM(_base.BaseAPIResultNestedModel):
return self._get_datetime_from_timestamp(self.updated_timestamp)
+class AccountAPIResultNM(_base.BaseAPIResultNestedModel):
+ acl: list[AccessAPIResultNM]
+ vm_features: list[_enums.VMFeature]
+ created_timestamp: int
+ deleted_timestamp: int
+ id: int
+ name: str
+ status: _enums.AccountStatus
+ updated_timestamp: int
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+ @property
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
class BaseVMAPIResultNM(_base.BaseAPIResultNestedModel):
account_id: int
account_name: str
@@ -270,14 +337,14 @@ class BaseVMAPIResultNM(_base.BaseAPIResultNestedModel):
anti_affinity_rules: list[AffinityRuleAPIResultNM]
arch: str
auto_start: bool
- boot_disk_size: int
+ boot_disk_size_gb: int
boot_order: list[_enums.BootDevice]
- cd_image_id: int
+ cdrom_image_id: int
chipset: _enums.Chipset
clone_ids: list[int]
clone_reference: int
- compute_ci_id: int
- cpu: int
+ vm_ci_id: int
+ cpu_count: int
cpu_pin: bool
created_by: str
created_timestamp: int
@@ -287,7 +354,7 @@ class BaseVMAPIResultNM(_base.BaseAPIResultNestedModel):
description: str
devices: dict
driver: _enums.Driver
- gpu_ids: list[int]
+ vgpus: list[dict[str, _typing.Any]]
grid_id: int
guid: int
hp_backed: bool
@@ -304,7 +371,7 @@ class BaseVMAPIResultNM(_base.BaseAPIResultNestedModel):
numa_node_id: int
pinned: bool
preferred_cpu_cores: list[int]
- ram: int
+ ram_size_mb: int
reference_id: str
registered: bool
res_name: str
@@ -336,8 +403,536 @@ class BaseVMAPIResultNM(_base.BaseAPIResultNestedModel):
class VMAPIResultNM(BaseVMAPIResultNM):
- acl: list # BDX-7995
- disks: list[BaseDiskAPIResultNM]
- interfaces: list[BaseInterfaceAPIResultNM]
+ acl: list[_typing.Any] # BDX-7995
+ disks: list[BaseDiskForCAComputeAPIResultNM]
+ interfaces: list[InterfaceForComputeListAPIResultNM]
total_disks_size: int
vins_count: int
+
+
+class VMCountsAPIResultNM(_base.BaseAPIResultNestedModel):
+ started: int
+ stopped: int
+
+
+class BaseImageAPIResultNM(_base.BaseAPIResultNestedModel):
+ account_id: int
+ arch: str
+ boot_mode: _enums.BootMode | _EmptyStr | None
+ bootable: bool
+ description: str
+ drivers: list[_enums.Driver]
+ hot_resize: bool
+ id: int
+ link_to: int
+ name: str
+ network_interface_naming: _enums.NetIfaceNamingTemplate
+ os_user_name: str | None
+ sep_id: int
+ sep_pool_name: str
+ size_gb: int
+ status: _enums.ImageStatus
+ type: _enums.ImageType
+
+ @property
+ def boot_loader_type(self):
+ if self.type in _enums.BootLoaderType._member_names_:
+ return _enums.BootLoaderType[self.type]
+
+
+class ImageForListAPIResultNM(BaseImageAPIResultNM):
+ cdrom: bool
+ virtual: bool
+
+
+class ImageHistoryRecordAPIResultNM(_base.BaseAPIResultNestedModel):
+ guid: str
+ id: int
+ timestamp: int
+
+ @property
+ def datetime(self):
+ return self._get_datetime_from_timestamp(self.timestamp)
+
+
+class VINSVMAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ name: str
+
+
+class BaseVINSAPIResultNM(_base.BaseAPIResultNestedModel):
+ account_id: int
+ account_name: str
+ created_by: str
+ created_timestamp: int
+ deleted_by: str
+ deleted_timestamp: int
+ id: int
+ name: str
+ net_ip: str
+ rg_id: int
+ rg_name: str
+ status: _enums.VINSStatus
+ updated_by: str
+ updated_timestamp: int
+ vxlan_id: int
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+ @property
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
+class VINSForListAPIResultNM(BaseVINSAPIResultNM):
+ ext_net_id: int
+ ext_net_ip: str
+ free_ip_count: int
+
+
+class VINSForListDeletedAPIResultNM(BaseVINSAPIResultNM):
+ ext_net_ip: str
+ primary_vnfdev_id: int
+
+
+class VNFHostDeviceAPIResultNM(_base.BaseAPIResultNestedModel):
+ device_id: int
+ iface01_name: str
+ iface02_name: str
+
+
+class VNFHostDevicesAPIResultNM(_base.BaseAPIResultNestedModel):
+ primary: VNFHostDeviceAPIResultNM
+
+
+class RouteAPIResultNM(_base.BaseAPIResultNestedModel):
+ dst_net_ip: str
+ dst_net_mask: str
+ gateway: str
+ guid: str
+ id: int
+ vm_ids: list[int]
+
+
+class BaseVNFAPIResultNM(_base.BaseAPIResultNestedModel):
+ account_id: int
+ created_timestamp: int
+ devices: VNFHostDevicesAPIResultNM
+ grid_id: int
+ guid: int
+ id: int
+ lock_status: _enums.LockStatus
+ milestones: int
+ owner_id: int
+ owner_type: _enums.NetType
+ pure_virtual: bool
+ routes: list[RouteAPIResultNM]
+ status: _enums.VNFDevStatus
+ tech_status: _enums.VNFDevTechStatus
+ type: _enums.VNFType
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+
+class DHCPReservationAPIResultNM(_base.BaseAPIResultNestedModel):
+ ip_addr: str
+ mac: str
+ type: _enums.DHCPReservationType
+ vm_id: int
+
+ account_id: None | int = None
+ client_type: None | str = None
+ description: None | str = None
+ domain_name: None | str = None
+ hostname: None | str = None
+
+
+class DHCPVNFConfigAPIResultNM(_base.BaseAPIResultNestedModel):
+ default_gw: str
+ dns_servers: list[str]
+ ip_pool_end: str
+ ip_pool_start: str
+ lease_time: int
+ net_ip: str
+ net_mask: int
+ reservations: list[DHCPReservationAPIResultNM]
+
+
+class GWVNFConfigAPIResultNM(_base.BaseAPIResultNestedModel):
+ default_gw: str
+ ext_net_id: int
+ ext_net_ip: str
+ ext_net_mask: int
+ qos: _typing.Any
+
+
+class NATRuleAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ local_ip: str
+ local_port: int
+ protocol: _enums.NATRuleProtocol
+ public_port_end: int
+ public_port_start: int
+ vm_id: int
+
+
+class NATVNFConfigAPIResultNM(_base.BaseAPIResultNestedModel):
+ net_ip: str
+ net_mask: int
+ rules: list[NATRuleAPIResultNM]
+
+
+class DHCPVNFAPIResultNM(BaseVNFAPIResultNM):
+ config: DHCPVNFConfigAPIResultNM
+
+
+class GWVNFAPIResultNM(BaseVNFAPIResultNM):
+ config: GWVNFConfigAPIResultNM
+
+
+class NATVNFAPIResultNM(BaseVNFAPIResultNM):
+ config: NATVNFConfigAPIResultNM
+
+
+class VNFSAPIResultNM(_base.BaseAPIResultNestedModel):
+ dhcp: None | DHCPVNFAPIResultNM = None
+ gw: None | GWVNFAPIResultNM = None
+ nat: None | NATVNFAPIResultNM = None
+
+
+class VNFDevMGMTConfigAPIResultNM(_base.BaseAPIResultNestedModel):
+ ip_addr: str
+ password: str
+ ssh_key: str
+ user: str
+
+
+class VNFDevResourcesConfigAPIResultNM(_base.BaseAPIResultNestedModel):
+ cpu_count: int
+ ram_size_mb: int
+ stack_id: int
+ uuid: str
+
+
+class VNFDevConfigAPIResultNM(_base.BaseAPIResultNestedModel):
+ mgmt: VNFDevMGMTConfigAPIResultNM
+ resources: VNFDevResourcesConfigAPIResultNM
+
+
+class VNFDevAPIResultNM(_base.BaseAPIResultNestedModel):
+ account_id: int
+ capabilities: list[_enums.VNFType]
+ config: VNFDevConfigAPIResultNM
+ config_saved: bool
+ custom_pre_cfg: bool
+ description: str
+ grid_id: int
+ guid: int
+ id: int
+ interfaces: list[VNFDevInterfaceAPIResultNM]
+ lock_status: _enums.LockStatus
+ milestones: int
+ name: str
+ status: _enums.VNFDevStatus
+ tech_status: _enums.VNFDevTechStatus
+ type: _enums.VNFDevType
+ vins_ids: list[int]
+ vnc_password: str
+
+
+class BServiceGroupAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ name: str
+ status: _enums.BServiceGroupStatus
+ tech_status: _enums.BServiceGroupTechStatus
+ consistency: bool
+ vm_count: int
+
+
+class BServiceVMAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ name: str
+ bsgroup_id: int
+ arch: str
+ account_id: int
+ rg_id: int
+ status: _enums.VMStatus
+ tech_status: _enums.VMTechStatus
+ stack_id: int
+ bsgroup_name: str
+ bsgroup_role: str
+
+
+class BServiceSnapshotAPIResultNM(_base.BaseAPIResultNestedModel):
+ timestamp: int
+ label: str
+ valid: bool
+ guid: str
+
+ @property
+ def datetime(self):
+ return self._get_datetime_from_timestamp(self.timestamp)
+
+
+class BaseBServiceAPIResultNM(_base.BaseAPIResultNestedModel):
+ account_id: int
+ account_name: str
+ base_domain: str
+ created_by: str
+ created_timestamp: int
+ deleted_by: str
+ deleted_timestamp: int
+ grid_id: int
+ guid: int
+ id: int
+ name: str
+ parent_service_id: int
+ parent_service_type: str
+ rg_id: int
+ rg_name: str
+ ssh_user: str
+ status: _enums.BServiceStatus
+ tech_status: _enums.BServiceTechStatus
+ updated_by: str
+ updated_timestamp: int
+ user_managed: bool
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+ @property
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
+class BServiceForListAPIResultNM(BaseBServiceAPIResultNM):
+ group_ids: list[int]
+
+
+class BServiceGroupOSUserAPIResultNM(_base.BaseAPIResultNestedModel):
+ login: str
+ password: str
+
+
+class OSUserAPIResultNM(BServiceGroupOSUserAPIResultNM):
+ pub_key: str
+ guid: str
+
+
+class BServiceGroupVMAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ name: str
+ os_users: list[BServiceGroupOSUserAPIResultNM]
+ ip_addresses: list[str]
+
+
+class ExtNetForListAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ ip_cidr: str
+ name: str
+ status: _enums.ExtNetStatus
+
+
+class BaseFlipGroupAPIResultNM(_base.BaseAPIResultNestedModel):
+ account_id: int
+ client_ids: list[int]
+ client_type: _enums.FlipGroupClientType
+ conn_id: int
+ conn_type: str
+ default_gw: str
+ description: str
+ grid_id: int
+ guid: int
+ id: int
+ ip_addr: str
+ milestones: int
+ name: str
+ net_id: int
+ net_type: _enums.FlipGroupNetType
+ status: _enums.FlipGroupStatus
+
+
+class FlipGroupForListAPIResultNM(BaseFlipGroupAPIResultNM):
+ net_mask: int
+
+
+class LBNodeAPIResultNM(_base.BaseAPIResultNestedModel):
+ backend_ip_addr: str
+ frontend_ip_addr: str
+ guid: str
+ mgmt_ip: str
+ net_id: int
+ vm_id: int
+
+
+class LBServerSettingsAPIResultNM(_base.BaseAPIResultNestedModel):
+ downinter: int
+ fall: int
+ guid: str
+ inter: int
+ maxconn: int
+ maxqueue: int
+ rise: int
+ slowstart: int
+ weight: int
+
+
+class LBServerAPIResultNM(_base.BaseAPIResultNestedModel):
+ check: _enums.LBServerCheck
+ guid: str
+ ip_addr: str
+ name: str
+ port: int
+ server_settings: LBServerSettingsAPIResultNM
+
+
+class LBBackendAPIResultNM(_base.BaseAPIResultNestedModel):
+ algorithm: _enums.LBBackendAlgorithm
+ guid: str
+ name: str
+ server_default_settings: LBServerSettingsAPIResultNM
+ servers: list[LBServerAPIResultNM]
+
+
+class LBFrontendBindingAPIResultNM(_base.BaseAPIResultNestedModel):
+ name: str
+ ip_addr: str
+ port: int
+ guid: str
+
+
+class LBFrontendAPIResultNM(_base.BaseAPIResultNestedModel):
+ name: str
+ backend_name: str
+ bindings: list[LBFrontendBindingAPIResultNM]
+ guid: str
+
+
+class LBAPIResultNM(_base.BaseAPIResultNestedModel):
+ acl: list[_typing.Any]
+ backend_ha_ip_addr: str
+ backends: list[LBBackendAPIResultNM]
+ created_by: str
+ created_timestamp: int
+ deleted_by: str
+ deleted_timestamp: int
+ description: str
+ dp_api_user: str
+ ext_net_id: int
+ frontend_ha_ip_addr: str
+ frontends: list[LBFrontendAPIResultNM]
+ grid_id: int
+ guid: int
+ ha_mode: bool
+ id: int
+ manager_id: int
+ manager_type: str
+ milestones: int
+ name: str
+ part_of_k8s: bool
+ primary_node: LBNodeAPIResultNM
+ rg_id: int
+ rg_name: str
+ secondary_node: LBNodeAPIResultNM
+ status: _enums.LBStatus
+ sysctl_params: dict[str, str]
+ tech_status: _enums.LBTechStatus
+ updated_by: str
+ updated_timestamp: int
+ user_managed: bool
+ vins_id: int
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+ @property
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
+class SEPPoolAPIResultNM(_base.BaseAPIResultNestedModel):
+ name: str
+ types: list[_enums.PoolDiskType]
+ system: str
+
+
+class SEPAPIResultNM(_base.BaseAPIResultNestedModel):
+ sep_id: int
+ sep_name: str
+ pools: list[SEPPoolAPIResultNM]
+
+
+class StackAPIResultNM(_base.BaseAPIResultNestedModel):
+ id: int
+ name: str
+ status: _enums.PhysicalNodeStatus
+ type: str
+
+
+class LocationAPIResultNM(_base.BaseAPIResultNestedModel):
+ auth_broker: list[_enums.AuthBroker]
+ flag: str
+ grid_id: int
+ guid: int
+ id: int
+ location_code: str
+ name: str
+
+
+class AffinityRelationsAPIResultNM(_base.BaseAPIResultNestedModel):
+ same_node: list[int]
+ same_node_soft: list[int]
+ other_node: list[int]
+ other_node_soft: list[int]
+ other_node_indirect: list[int]
+ other_node_indirect_soft: list[int]
+
+
+class VMACLForComputeUserListAPIResultNM( # BDX-8459
+ _base.BaseAPIResultNestedModel
+):
+ account: list[AccessAPIResultNM]
+ vm: list[AccessAPIResultNM]
+ rg: list[AccessAPIResultNM]
+
+
+class TaskAPIResultNM(_base.BaseAPIResultNestedModel):
+ audit_guid: str
+ guid: None | str = None # BDX-8474
+ completed: bool
+ created_timestamp: int
+ error: str
+ log: list[str]
+ result: _typing.Any
+ stage: str
+ status: str
+ updated_by: None | str = None
+ updated_timestamp: None | int = None
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def updated_datetime(self):
+ if self.updated_timestamp is None:
+ return None
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
diff --git a/src/dynamix_sdk/api/cloudapi/_api.py b/src/dynamix_sdk/api/cloudapi/_api.py
index f6dcf2d..768e6f5 100644
--- a/src/dynamix_sdk/api/cloudapi/_api.py
+++ b/src/dynamix_sdk/api/cloudapi/_api.py
@@ -1,14 +1,34 @@
import dynamix_sdk.base as _base
from .account import *
+from .bservice import *
from .compute import *
+from .disks import *
+from .extnet import *
+from .flipgroup import *
+from .image import *
from .kvmx86 import *
+from .lb import *
+from .locations import *
from .rg import *
+from .stack import *
+from .tasks import *
from .user import *
+from .vins import *
class CloudapiAPI(_base.BaseAPI):
account: CloudapiAccountAPI
+ bservice: CloudapiBserviceAPI
compute: CloudapiComputeAPI
+ disks: CloudapiDisksAPI
+ extnet: CloudapiExtnetAPI
+ flipgroup: CloudapiFlipgroupAPI
+ image: CloudapiImageAPI
kvmx86: CloudapiKvmx86API
+ lb: CloudapiLbAPI
+ locations: CloudapiLocationsAPI
rg: CloudapiRgAPI
+ stack: CloudapiStackAPI
+ tasks: CloudapiTasksAPI
user: CloudapiUserAPI
+ vins: CloudapiVinsAPI
diff --git a/src/dynamix_sdk/api/cloudapi/account/_api.py b/src/dynamix_sdk/api/cloudapi/account/_api.py
index 4dc1952..35b8bb7 100644
--- a/src/dynamix_sdk/api/cloudapi/account/_api.py
+++ b/src/dynamix_sdk/api/cloudapi/account/_api.py
@@ -1,17 +1,29 @@
import dynamix_sdk.base as _base
from .add_user import *
+from .delete import *
from .delete_user import *
from .disable import *
from .enable import *
+from .get import *
+from .list import *
+from .list_deleted import *
+from .restore import *
+from .update import *
from .update_user import *
class CloudapiAccountAPI(
_base.BaseAPI,
CloudapiAccountAddUserProtocol,
+ CloudapiAccountDeleteProtocol,
CloudapiAccountDeleteUserProtocol,
CloudapiAccountDisableProtocol,
CloudapiAccountEnableProtocol,
+ CloudapiAccountGetProtocol,
+ CloudapiAccountListDeletedProtocol,
+ CloudapiAccountListProtocol,
+ CloudapiAccountRestoreProtocol,
+ CloudapiAccountUpdateProtocol,
CloudapiAccountUpdateUserProtocol,
):
pass
diff --git a/src/dynamix_sdk/api/cloudapi/account/add_user.py b/src/dynamix_sdk/api/cloudapi/account/add_user.py
index 544ec75..399e697 100644
--- a/src/dynamix_sdk/api/cloudapi/account/add_user.py
+++ b/src/dynamix_sdk/api/cloudapi/account/add_user.py
@@ -11,7 +11,7 @@ class CloudapiAccountAddUserProtocol(_base.BasePostAPIFunctionProtocol):
self,
*,
account_id: int,
- access_type: _nested.AccessType,
+ access_type: _nested.AccessTypeForSet,
user_id: str,
) -> CloudapiAccountAddUserResultBool:
...
diff --git a/src/dynamix_sdk/api/cloudapi/account/delete.py b/src/dynamix_sdk/api/cloudapi/account/delete.py
new file mode 100644
index 0000000..0dceb92
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/account/delete.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiAccountDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiAccountDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ account_id: int,
+ permanently: bool = False,
+ ) -> CloudapiAccountDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/account/get.py b/src/dynamix_sdk/api/cloudapi/account/get.py
new file mode 100644
index 0000000..681368d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/account/get.py
@@ -0,0 +1,39 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiAccountGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.AccountAPIResultNM,
+):
+ company: str
+ company_url: str
+ cpu_allocation_parameter: str
+ cpu_allocation_ratio: int
+ created_by: str
+ dc_location: str
+ deactivation_timestamp: int
+ deleted_by: str
+ display_name: str
+ guid: int
+ quotas: _nested.TenantQuotasAPIResultNM
+ resource_types: list[_nested.AccountResourceType]
+ send_access_emails: bool
+ uniq_pools: list[str]
+ version: int
+ vins_count: int
+ acc_lvl_vins_ids: list[int]
+ vm_counts: _nested.VMCountsAPIResultNM
+
+ @property
+ def deactivation_datetime(self):
+ return self._get_datetime_from_timestamp(self.deactivation_timestamp)
+
+
+class CloudapiAccountGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ account_id: int,
+ ) -> CloudapiAccountGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/account/list.py b/src/dynamix_sdk/api/cloudapi/account/list.py
new file mode 100644
index 0000000..dcdcbba
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/account/list.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiAccountListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.AccountAPIResultNM]
+ entry_count: int
+
+
+class CloudapiAccountListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ access_type: None | _nested.AccessType = None,
+ id: None | int = None,
+ name: None | str = None,
+ page_number: None | int = None,
+ page_size: None | int = None,
+ sort_by: None | str = None,
+ status: None | _nested.AccountStatus = None,
+ ) -> CloudapiAccountListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/account/list_deleted.py b/src/dynamix_sdk/api/cloudapi/account/list_deleted.py
new file mode 100644
index 0000000..1c5fa1d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/account/list_deleted.py
@@ -0,0 +1,21 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiAccountListDeletedResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.AccountAPIResultNM]
+ entry_count: int
+
+
+class CloudapiAccountListDeletedProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_deleted(
+ self,
+ *,
+ access_type: None | _nested.AccessType = None,
+ id: None | int = None,
+ name: None | str = None,
+ page_number: None | int = None,
+ page_size: None | int = None,
+ sort_by: None | str = None,
+ ) -> CloudapiAccountListDeletedResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/account/restore.py b/src/dynamix_sdk/api/cloudapi/account/restore.py
new file mode 100644
index 0000000..7c5e7e3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/account/restore.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiAccountRestoreResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiAccountRestoreProtocol(_base.BasePostAPIFunctionProtocol):
+ def restore(
+ self,
+ *,
+ account_id: int,
+ ) -> CloudapiAccountRestoreResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/account/update.py b/src/dynamix_sdk/api/cloudapi/account/update.py
new file mode 100644
index 0000000..06f10ee
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/account/update.py
@@ -0,0 +1,23 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiAccountUpdateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiAccountUpdateProtocol(_base.BasePostAPIFunctionProtocol):
+ def update(
+ self,
+ *,
+ account_id: int,
+ cpu_count_quota: None | int = None,
+ ext_traffic_quota: None | int = None,
+ gpu_count_quota: None | int = None,
+ name: None | str = None,
+ public_ip_count_quota: None | int = None,
+ ram_size_quota_mb: None | int = None,
+ send_access_emails: None | bool = None,
+ storage_size_quota_gb: None | int = None,
+ uniq_pools: None | list[str] = None,
+ ) -> CloudapiAccountUpdateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/account/update_user.py b/src/dynamix_sdk/api/cloudapi/account/update_user.py
index d945308..9c46d6d 100644
--- a/src/dynamix_sdk/api/cloudapi/account/update_user.py
+++ b/src/dynamix_sdk/api/cloudapi/account/update_user.py
@@ -11,7 +11,7 @@ class CloudapiAccountUpdateUserProtocol(_base.BasePostAPIFunctionProtocol):
self,
*,
account_id: int,
- access_type: _nested.AccessType,
+ access_type: _nested.AccessTypeForSet,
user_id: str,
) -> CloudapiAccountUpdateUserResultBool:
...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/__init__.py b/src/dynamix_sdk/api/cloudapi/bservice/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/_api.py b/src/dynamix_sdk/api/cloudapi/bservice/_api.py
new file mode 100644
index 0000000..f5a61e0
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/_api.py
@@ -0,0 +1,51 @@
+import dynamix_sdk.base as _base
+from .create import *
+from .delete import *
+from .disable import *
+from .enable import *
+from .get import *
+from .group_add import *
+from .group_compute_remove import *
+from .group_get import *
+from .group_parent_add import *
+from .group_parent_remove import *
+from .group_remove import *
+from .group_resize import *
+from .group_start import *
+from .group_stop import *
+from .group_update import *
+from .group_update_extnet import *
+from .group_update_vins import *
+from .list import *
+from .list_deleted import *
+from .restore import *
+from .start import *
+from .stop import *
+
+
+class CloudapiBserviceAPI(
+ _base.BaseAPI,
+ CloudapiBserviceCreateProtocol,
+ CloudapiBserviceDeleteProtocol,
+ CloudapiBserviceDisableProtocol,
+ CloudapiBserviceEnableProtocol,
+ CloudapiBserviceGetProtocol,
+ CloudapiBserviceGroupAddProtocol,
+ CloudapiBserviceGroupComputeRemoveProtocol,
+ CloudapiBserviceGroupGetProtocol,
+ CloudapiBserviceGroupParentAddProtocol,
+ CloudapiBserviceGroupParentRemoveProtocol,
+ CloudapiBserviceGroupRemoveProtocol,
+ CloudapiBserviceGroupResizeProtocol,
+ CloudapiBserviceGroupStartProtocol,
+ CloudapiBserviceGroupStopProtocol,
+ CloudapiBserviceGroupUpdateExtnetProtocol,
+ CloudapiBserviceGroupUpdateProtocol,
+ CloudapiBserviceGroupUpdateVinsProtocol,
+ CloudapiBserviceListDeletedProtocol,
+ CloudapiBserviceListProtocol,
+ CloudapiBserviceRestoreProtocol,
+ CloudapiBserviceStartProtocol,
+ CloudapiBserviceStopProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/create.py b/src/dynamix_sdk/api/cloudapi/bservice/create.py
new file mode 100644
index 0000000..aeff494
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/create.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceCreateResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiBserviceCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def create(
+ self,
+ *,
+ name: str,
+ rg_id: int,
+ ssh_user: str | None = None,
+ ssh_key: str | None = None,
+ ) -> CloudapiBserviceCreateResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/delete.py b/src/dynamix_sdk/api/cloudapi/bservice/delete.py
new file mode 100644
index 0000000..f1a2201
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/delete.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ bservice_id: int,
+ permanently: bool = False,
+ ) -> CloudapiBserviceDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/disable.py b/src/dynamix_sdk/api/cloudapi/bservice/disable.py
new file mode 100644
index 0000000..a86aee9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/disable.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceDisableResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceDisableProtocol(_base.BasePostAPIFunctionProtocol):
+ def disable(
+ self,
+ *,
+ bservice_id: int,
+ ) -> CloudapiBserviceDisableResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/enable.py b/src/dynamix_sdk/api/cloudapi/bservice/enable.py
new file mode 100644
index 0000000..0f3beac
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/enable.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceEnableResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceEnableProtocol(_base.BasePostAPIFunctionProtocol):
+ def enable(
+ self,
+ *,
+ bservice_id: int,
+ ) -> CloudapiBserviceEnableResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/get.py b/src/dynamix_sdk/api/cloudapi/bservice/get.py
new file mode 100644
index 0000000..aa2828e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/get.py
@@ -0,0 +1,25 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiBserviceGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.BaseBServiceAPIResultNM,
+):
+ cpu_count_total: int
+ disk_size_total_gb: int
+ groups: list[_nested.BServiceGroupAPIResultNM]
+ milestones: int
+ ram_size_total_mb: int
+ snapshots: list[_nested.BServiceSnapshotAPIResultNM]
+ ssh_key: str
+ vms: list[_nested.BServiceVMAPIResultNM]
+
+
+class CloudapiBserviceGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ bservice_id: int,
+ ) -> CloudapiBserviceGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_add.py b/src/dynamix_sdk/api/cloudapi/bservice/group_add.py
new file mode 100644
index 0000000..f541465
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_add.py
@@ -0,0 +1,29 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiBserviceGroupAddResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiBserviceGroupAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def group_add(
+ self,
+ *,
+ bservice_id: int,
+ vm_count: int,
+ cpu_count: int,
+ boot_disk_size_gb: int,
+ driver: _nested.Driver,
+ image_id: int,
+ name: str,
+ ram_size_mb: int,
+ ci_user_data: str | None = None,
+ extnet_ids: list[int] | None = None,
+ role: str | None = None,
+ sep_id: int | None = None,
+ sep_pool_name: str | None = None,
+ start_timeout: int | None = None,
+ vins_ids: list[int] | None = None,
+ ) -> CloudapiBserviceGroupAddResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_compute_remove.py b/src/dynamix_sdk/api/cloudapi/bservice/group_compute_remove.py
new file mode 100644
index 0000000..9dace19
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_compute_remove.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupComputeRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupComputeRemoveProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_compute_remove(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ vm_id: int,
+ ) -> CloudapiBserviceGroupComputeRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_get.py b/src/dynamix_sdk/api/cloudapi/bservice/group_get.py
new file mode 100644
index 0000000..a70271f
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_get.py
@@ -0,0 +1,61 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiBserviceGroupGetResultModel(
+ _base.BaseAPIResultModel,
+):
+ account_id: int
+ account_name: str
+ bservice_id: int
+ consistency: bool
+ cpu_count: int
+ created_by: str
+ created_timestamp: int
+ deleted_by: str
+ deleted_timestamp: int
+ boot_disk_size_gb: int
+ driver: _nested.Driver
+ extnet_ids: list[int]
+ grid_id: int
+ guid: int
+ id: int
+ image_id: int
+ milestones: int
+ name: str
+ parent_ids: list[int]
+ ram_size_mb: int
+ rg_id: int
+ rg_name: str
+ role: str
+ sep_id: int
+ sep_pool_name: str
+ seq_no: int
+ status: _nested.BServiceGroupStatus
+ tech_status: _nested.BServiceGroupTechStatus
+ start_timeout: int
+ updated_by: str
+ updated_timestamp: int
+ vins_ids: list[int]
+ vms: list[_nested.BServiceGroupVMAPIResultNM]
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+ @property
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
+class CloudapiBserviceGroupGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def group_get(
+ self, *,
+ bservice_id: int,
+ bsgroup_id: int
+ ) -> CloudapiBserviceGroupGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py
new file mode 100644
index 0000000..c86f876
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupParentAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupParentAddProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_parent_add(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ parent_id: int,
+ ) -> CloudapiBserviceGroupParentAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_parent_remove.py b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_remove.py
new file mode 100644
index 0000000..769eff3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_remove.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupParentRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupParentRemoveProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_parent_remove(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ parent_id: int,
+ ) -> CloudapiBserviceGroupParentRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_remove.py b/src/dynamix_sdk/api/cloudapi/bservice/group_remove.py
new file mode 100644
index 0000000..a6dc031
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_remove.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupRemoveProtocol(_base.BasePostAPIFunctionProtocol):
+ def group_remove(
+ self, *,
+ bservice_id: int,
+ bsgroup_id: int
+ ) -> CloudapiBserviceGroupRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py b/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py
new file mode 100644
index 0000000..21c8d9d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py
@@ -0,0 +1,20 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiBserviceGroupResizeResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiBserviceGroupResizeProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_resize(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ vm_count: int,
+ count_change_mode: _nested.CountChangeMode,
+ ) -> CloudapiBserviceGroupResizeResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_start.py b/src/dynamix_sdk/api/cloudapi/bservice/group_start.py
new file mode 100644
index 0000000..96fe264
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_start.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupStartResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupStartProtocol(_base.BasePostAPIFunctionProtocol):
+ def group_start(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ ) -> CloudapiBserviceGroupStartResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_stop.py b/src/dynamix_sdk/api/cloudapi/bservice/group_stop.py
new file mode 100644
index 0000000..df766a8
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_stop.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupStopResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupStopProtocol(_base.BasePostAPIFunctionProtocol):
+ def group_stop(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ force: bool = False,
+ ) -> CloudapiBserviceGroupStopResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_update.py b/src/dynamix_sdk/api/cloudapi/bservice/group_update.py
new file mode 100644
index 0000000..aef8d73
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_update.py
@@ -0,0 +1,23 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupUpdateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupUpdateProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_update(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ force: bool = False,
+ cpu_count: int | None = None,
+ boot_disk_size_gb: int | None = None,
+ name: str | None = None,
+ ram_size_mb: int | None = None,
+ role: str | None = None,
+ ) -> CloudapiBserviceGroupUpdateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_update_extnet.py b/src/dynamix_sdk/api/cloudapi/bservice/group_update_extnet.py
new file mode 100644
index 0000000..5d5551b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_update_extnet.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupUpdateExtnetResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupUpdateExtnetProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_update_extnet(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ extnet_ids: list[int] | None = None,
+ ) -> CloudapiBserviceGroupUpdateExtnetResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_update_vins.py b/src/dynamix_sdk/api/cloudapi/bservice/group_update_vins.py
new file mode 100644
index 0000000..78bc70c
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/group_update_vins.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceGroupUpdateVinsResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceGroupUpdateVinsProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def group_update_vins(
+ self,
+ *,
+ bservice_id: int,
+ bsgroup_id: int,
+ vins_ids: list[int] | None = None,
+ ) -> CloudapiBserviceGroupUpdateVinsResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/list.py b/src/dynamix_sdk/api/cloudapi/bservice/list.py
new file mode 100644
index 0000000..7077176
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/list.py
@@ -0,0 +1,26 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiBserviceListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.BServiceForListAPIResultNM]
+ entry_count: int
+
+
+class CloudapiBserviceListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ account_id: int | None = None,
+ account_name: str | None = None,
+ id: int | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ rg_id: int | None = None,
+ rg_name: str | None = None,
+ sort_by: str | None = None,
+ status: _nested.BServiceStatus | None = None,
+ tech_status: _nested.BServiceTechStatus | None = None,
+ ) -> CloudapiBserviceListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/list_deleted.py b/src/dynamix_sdk/api/cloudapi/bservice/list_deleted.py
new file mode 100644
index 0000000..518b90d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/list_deleted.py
@@ -0,0 +1,20 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiBserviceListDeletedResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.BServiceForListAPIResultNM]
+ entry_count: int
+
+
+class CloudapiBserviceListDeletedProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_deleted(
+ self,
+ *,
+ account_id: int | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ rg_id: int | None = None,
+ sort_by: str | None = None,
+ ) -> CloudapiBserviceListDeletedResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/restore.py b/src/dynamix_sdk/api/cloudapi/bservice/restore.py
new file mode 100644
index 0000000..eb33d57
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/restore.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceRestoreResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceRestoreProtocol(_base.BasePostAPIFunctionProtocol):
+ def restore(
+ self,
+ *,
+ bservice_id: int,
+ ) -> CloudapiBserviceRestoreResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/start.py b/src/dynamix_sdk/api/cloudapi/bservice/start.py
new file mode 100644
index 0000000..64c83f1
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/start.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceStartResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceStartProtocol(_base.BasePostAPIFunctionProtocol):
+ def start(
+ self,
+ *,
+ bservice_id: int,
+ ) -> CloudapiBserviceStartResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/bservice/stop.py b/src/dynamix_sdk/api/cloudapi/bservice/stop.py
new file mode 100644
index 0000000..ab1e805
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/bservice/stop.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiBserviceStopResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiBserviceStopProtocol(_base.BasePostAPIFunctionProtocol):
+ def stop(
+ self,
+ *,
+ bservice_id: int,
+ ) -> CloudapiBserviceStopResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/_api.py b/src/dynamix_sdk/api/cloudapi/compute/_api.py
index 2a0d036..378d8b8 100644
--- a/src/dynamix_sdk/api/cloudapi/compute/_api.py
+++ b/src/dynamix_sdk/api/cloudapi/compute/_api.py
@@ -1,15 +1,101 @@
import dynamix_sdk.base as _base
+from .affinity_label_remove import *
+from .affinity_label_set import *
+from .affinity_relations import *
+from .affinity_rule_add import *
+from .affinity_rule_remove import *
+from .affinity_rules_clear import *
+from .anti_affinity_rule_add import *
+from .anti_affinity_rule_remove import *
+from .anti_affinity_rules_clear import *
+from .cd_eject import *
+from .cd_insert import *
+from .change_ip import *
+from .clone import *
from .delete import *
+from .delete_custom_fields import *
+from .disk_add import *
+from .disk_attach import *
+from .disk_del import *
+from .disk_detach import *
+from .disk_resize import *
from .get import *
from .list import *
+from .net_attach import *
+from .net_detach import *
+from .pause import *
+from .pfw_add import *
+from .pfw_del import *
+from .pfw_list import *
+from .pin_to_stack import *
+from .reboot import *
+from .redeploy import *
+from .resize import *
+from .resume import *
+from .set_custom_fields import *
+from .snapshot_create import *
+from .snapshot_list import *
+from .snapshot_rollback import *
+from .start import *
+from .stop import *
+from .tag_add import *
+from .tag_remove import *
+from .unpin_from_stack import *
from .update import *
+from .user_grant import *
+from .user_list import *
+from .user_revoke import *
+from .user_update import *
class CloudapiComputeAPI(
_base.BaseAPI,
+ CloudapiComputeAffinityLabelRemoveProtocol,
+ CloudapiComputeAffinityLabelSetProtocol,
+ CloudapiComputeAffinityRelationsProtocol,
+ CloudapiComputeAffinityRuleAddProtocol,
+ CloudapiComputeAffinityRuleRemoveProtocol,
+ CloudapiComputeAffinityRulesClearProtocol,
+ CloudapiComputeAntiAffinityRuleAddProtocol,
+ CloudapiComputeAntiAffinityRuleRemoveProtocol,
+ CloudapiComputeAntiAffinityRulesClearProtocol,
+ CloudapiComputeCdEjectProtocol,
+ CloudapiComputeCdInsertProtocol,
+ CloudapiComputeChangeIpProtocol,
+ CloudapiComputeCloneProtocol,
+ CloudapiComputeDeleteCustomFieldsProtocol,
CloudapiComputeDeleteProtocol,
+ CloudapiComputeDiskAddProtocol,
+ CloudapiComputeDiskAttachProtocol,
+ CloudapiComputeDiskDelProtocol,
+ CloudapiComputeDiskDetachProtocol,
+ CloudapiComputeDiskResizeProtocol,
CloudapiComputeGetProtocol,
CloudapiComputeListProtocol,
+ CloudapiComputeNetAttachProtocol,
+ CloudapiComputeNetDetachProtocol,
+ CloudapiComputePauseProtocol,
+ CloudapiComputePfwAddProtocol,
+ CloudapiComputePfwDelProtocol,
+ CloudapiComputePfwListProtocol,
+ CloudapiComputePinToStackProtocol,
+ CloudapiComputeRebootProtocol,
+ CloudapiComputeRedeployProtocol,
+ CloudapiComputeResizeProtocol,
+ CloudapiComputeResumeProtocol,
+ CloudapiComputeSetCustomFieldsProtocol,
+ CloudapiComputeSnapshotCreateProtocol,
+ CloudapiComputeSnapshotListProtocol,
+ CloudapiComputeSnapshotRollbackProtocol,
+ CloudapiComputeStartProtocol,
+ CloudapiComputeStopProtocol,
+ CloudapiComputeTagAddProtocol,
+ CloudapiComputeTagRemoveProtocol,
+ CloudapiComputeUnpinFromStackProtocol,
CloudapiComputeUpdateProtocol,
+ CloudapiComputeUserGrantProtocol,
+ CloudapiComputeUserListProtocol,
+ CloudapiComputeUserRevokeProtocol,
+ CloudapiComputeUserUpdateProtocol,
):
pass
diff --git a/src/dynamix_sdk/api/cloudapi/compute/affinity_label_remove.py b/src/dynamix_sdk/api/cloudapi/compute/affinity_label_remove.py
new file mode 100644
index 0000000..cff01cc
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/affinity_label_remove.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeAffinityLabelRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAffinityLabelRemoveProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def affinity_label_remove(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeAffinityLabelRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/affinity_label_set.py b/src/dynamix_sdk/api/cloudapi/compute/affinity_label_set.py
new file mode 100644
index 0000000..b016fbd
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/affinity_label_set.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeAffinityLabelSetResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAffinityLabelSetProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def affinity_label_set(
+ self,
+ *,
+ vm_id: int,
+ affinity_label: str,
+ ) -> CloudapiComputeAffinityLabelSetResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/affinity_relations.py b/src/dynamix_sdk/api/cloudapi/compute/affinity_relations.py
new file mode 100644
index 0000000..5c77903
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/affinity_relations.py
@@ -0,0 +1,20 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputeAffinityRelationsResultModel(
+ _base.BaseAPIResultModel,
+ _nested.AffinityRelationsAPIResultNM,
+):
+ pass
+
+
+class CloudapiComputeAffinityRelationsProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def affinity_relations(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeAffinityRelationsResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/affinity_rule_add.py b/src/dynamix_sdk/api/cloudapi/compute/affinity_rule_add.py
new file mode 100644
index 0000000..4f37bf9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/affinity_rule_add.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputeAffinityRuleAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAffinityRuleAddProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def affinity_rule_add(
+ self,
+ *,
+ vm_id: int,
+ topology: _nested.AffinityTopology,
+ policy: _nested.AffinityPolicy,
+ mode: _nested.AffinityMode,
+ key: str,
+ value: str,
+ ) -> CloudapiComputeAffinityRuleAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/affinity_rule_remove.py b/src/dynamix_sdk/api/cloudapi/compute/affinity_rule_remove.py
new file mode 100644
index 0000000..73280dc
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/affinity_rule_remove.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputeAffinityRuleRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAffinityRuleRemoveProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def affinity_rule_remove(
+ self,
+ *,
+ vm_id: int,
+ topology: _nested.AffinityTopology,
+ policy: _nested.AffinityPolicy,
+ mode: _nested.AffinityMode,
+ key: str,
+ value: str,
+ ) -> CloudapiComputeAffinityRuleRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/affinity_rules_clear.py b/src/dynamix_sdk/api/cloudapi/compute/affinity_rules_clear.py
new file mode 100644
index 0000000..b47c545
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/affinity_rules_clear.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeAffinityRulesClearResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAffinityRulesClearProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def affinity_rules_clear(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeAffinityRulesClearResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rule_add.py b/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rule_add.py
new file mode 100644
index 0000000..d9ff424
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rule_add.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputeAntiAffinityRuleAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAntiAffinityRuleAddProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def anti_affinity_rule_add(
+ self,
+ *,
+ vm_id: int,
+ topology: _nested.AffinityTopology,
+ policy: _nested.AffinityPolicy,
+ mode: _nested.AffinityMode,
+ key: str,
+ value: str,
+ ) -> CloudapiComputeAntiAffinityRuleAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rule_remove.py b/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rule_remove.py
new file mode 100644
index 0000000..a64c5fb
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rule_remove.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputeAntiAffinityRuleRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAntiAffinityRuleRemoveProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def anti_affinity_rule_remove(
+ self,
+ *,
+ vm_id: int,
+ topology: _nested.AffinityTopology,
+ policy: _nested.AffinityPolicy,
+ mode: _nested.AffinityMode,
+ key: str,
+ value: str,
+ ) -> CloudapiComputeAntiAffinityRuleRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rules_clear.py b/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rules_clear.py
new file mode 100644
index 0000000..14c4a96
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/anti_affinity_rules_clear.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeAntiAffinityRulesClearResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeAntiAffinityRulesClearProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def anti_affinity_rules_clear(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeAntiAffinityRulesClearResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/cd_eject.py b/src/dynamix_sdk/api/cloudapi/compute/cd_eject.py
new file mode 100644
index 0000000..8663f1e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/cd_eject.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeCdEjectResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeCdEjectProtocol(_base.BasePostAPIFunctionProtocol):
+ def cd_eject(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeCdEjectResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/cd_insert.py b/src/dynamix_sdk/api/cloudapi/compute/cd_insert.py
new file mode 100644
index 0000000..e62dae3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/cd_insert.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeCdInsertResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeCdInsertProtocol(_base.BasePostAPIFunctionProtocol):
+ def cd_insert(
+ self,
+ *,
+ vm_id: int,
+ cdrom_image_id: int,
+ ) -> CloudapiComputeCdInsertResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/change_ip.py b/src/dynamix_sdk/api/cloudapi/compute/change_ip.py
new file mode 100644
index 0000000..19c04f9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/change_ip.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeChangeIpResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeChangeIpProtocol(_base.BasePostAPIFunctionProtocol):
+ def change_ip(
+ self,
+ *,
+ ip_addr: str,
+ net_id: int,
+ net_type: _nested.NetTypeForChangeIP,
+ vm_id: int,
+ ) -> CloudapiComputeChangeIpResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/clone.py b/src/dynamix_sdk/api/cloudapi/compute/clone.py
new file mode 100644
index 0000000..2e97e64
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/clone.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeCloneResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiComputeCloneProtocol(_base.BasePostAPIFunctionProtocol):
+ def clone(
+ self,
+ *,
+ vm_id: int,
+ name: str,
+ force: bool = False,
+ snapshot_timestamp: int | None = None,
+ snapshot_name: str | None = None,
+ ) -> CloudapiComputeCloneResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/delete.py b/src/dynamix_sdk/api/cloudapi/compute/delete.py
index 70dd602..a1bc5bb 100644
--- a/src/dynamix_sdk/api/cloudapi/compute/delete.py
+++ b/src/dynamix_sdk/api/cloudapi/compute/delete.py
@@ -9,8 +9,7 @@ class CloudapiComputeDeleteProtocol(_base.BasePostAPIFunctionProtocol):
def delete(
self,
*,
- compute_id: int,
-
+ vm_id: int,
detach_disks: bool = False,
permanently: bool = False,
) -> CloudapiComputeDeleteResultBool:
diff --git a/src/dynamix_sdk/api/cloudapi/compute/delete_custom_fields.py b/src/dynamix_sdk/api/cloudapi/compute/delete_custom_fields.py
new file mode 100644
index 0000000..ba9a723
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/delete_custom_fields.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeDeleteCustomFieldsResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeDeleteCustomFieldsProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def delete_custom_fields(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeDeleteCustomFieldsResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_add.py b/src/dynamix_sdk/api/cloudapi/compute/disk_add.py
new file mode 100644
index 0000000..ab6e59a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/disk_add.py
@@ -0,0 +1,23 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeDiskAddResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiComputeDiskAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def disk_add(
+ self,
+ *,
+ vm_id: int,
+ name: str,
+ disk_size_gb: int,
+ disk_type: _nested.DiskType = _nested.DiskType.D,
+ sep_id: int | None = None,
+ sep_pool_name: str | None = None,
+ description: str | None = None,
+ image_id: int | None = None,
+
+ ) -> CloudapiComputeDiskAddResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py b/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py
new file mode 100644
index 0000000..39af539
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeDiskAttachResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeDiskAttachProtocol(_base.BasePostAPIFunctionProtocol):
+ def disk_attach(
+ self,
+ *,
+ vm_id: int,
+ disk_id: int,
+ disk_type: _nested.DiskType = _nested.DiskType.D,
+ ) -> CloudapiComputeDiskAttachResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_del.py b/src/dynamix_sdk/api/cloudapi/compute/disk_del.py
new file mode 100644
index 0000000..df27d0c
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/disk_del.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeDiskDelResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeDiskDelProtocol(_base.BasePostAPIFunctionProtocol):
+ def disk_del(
+ self,
+ *,
+ vm_id: int,
+ disk_id: int,
+ permanently: bool = True,
+ ) -> CloudapiComputeDiskDelResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_detach.py b/src/dynamix_sdk/api/cloudapi/compute/disk_detach.py
new file mode 100644
index 0000000..081cbc4
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/disk_detach.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeDiskDetachResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeDiskDetachProtocol(_base.BasePostAPIFunctionProtocol):
+ def disk_detach(
+ self,
+ *,
+ vm_id: int,
+ disk_id: int,
+ ) -> CloudapiComputeDiskDetachResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_resize.py b/src/dynamix_sdk/api/cloudapi/compute/disk_resize.py
new file mode 100644
index 0000000..0a07f29
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/disk_resize.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeDiskResizeResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeDiskResizeProtocol(_base.BasePostAPIFunctionProtocol):
+ def disk_resize(
+ self,
+ *,
+ vm_id: int,
+ disk_id: int,
+ disk_size_gb: int,
+ ) -> CloudapiComputeDiskResizeResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/get.py b/src/dynamix_sdk/api/cloudapi/compute/get.py
index 51a3549..d794d46 100644
--- a/src/dynamix_sdk/api/cloudapi/compute/get.py
+++ b/src/dynamix_sdk/api/cloudapi/compute/get.py
@@ -6,14 +6,14 @@ class CloudapiComputeGetResultModel(
_base.BaseAPIResultModel,
_nested.BaseVMAPIResultNM,
):
- acl: _nested.VMACLAPIResultNM
+ acl: _nested.VMACLForComputeGetAPIResultNM
ci_user_data: dict
- disks: list[_nested.DiskAPIResultNM]
+ disks: list[_nested.DiskForCAComputeGetAPIResultNM]
image_name: None | str
- interfaces: list[_nested.InterfaceAPIResultNM]
+ interfaces: list[_nested.InterfaceForComputeGetAPIResultNM]
os_users: list[_nested.OSUserAPIResultNM]
virtual_image_name: None | str
- vns_password: str
+ vnc_password: str
natable_vins_id: int = 0
natable_vins_ip: str = ''
@@ -26,6 +26,6 @@ class CloudapiComputeGetProtocol(_base.BasePostAPIFunctionProtocol):
def get(
self,
*,
- compute_id: int,
+ vm_id: int,
) -> CloudapiComputeGetResultModel:
...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/net_attach.py b/src/dynamix_sdk/api/cloudapi/compute/net_attach.py
new file mode 100644
index 0000000..18c1647
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/net_attach.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeNetAttachResultModel(
+ _base.BaseAPIResultModel,
+ _nested.InterfaceForComputeGetAPIResultNM,
+):
+ pass
+
+
+class CloudapiComputeNetAttachProtocol(_base.BasePostAPIFunctionProtocol):
+ def net_attach(
+ self,
+ *,
+ vm_id: int,
+ net_type: _nested.NetType,
+ net_id: int,
+ ip_addr: None | str = None,
+ mtu: None | int = None,
+ ) -> CloudapiComputeNetAttachResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/net_detach.py b/src/dynamix_sdk/api/cloudapi/compute/net_detach.py
new file mode 100644
index 0000000..e780469
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/net_detach.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeNetDetachResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeNetDetachProtocol(_base.BasePostAPIFunctionProtocol):
+ def net_detach(
+ self,
+ *,
+ vm_id: int,
+ ip_addr: None | str = None,
+ mac: None | str = None,
+ ) -> CloudapiComputeNetDetachResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/pause.py b/src/dynamix_sdk/api/cloudapi/compute/pause.py
new file mode 100644
index 0000000..7149ff9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/pause.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputePauseResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputePauseProtocol(_base.BasePostAPIFunctionProtocol):
+ def pause(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputePauseResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/pfw_add.py b/src/dynamix_sdk/api/cloudapi/compute/pfw_add.py
new file mode 100644
index 0000000..6695a2b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/pfw_add.py
@@ -0,0 +1,19 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputePfwAddResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiComputePfwAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def pfw_add(
+ self,
+ *,
+ vm_id: int,
+ public_port_start: int,
+ protocol: _nested.NATRuleProtocol = _nested.NATRuleProtocol.tcp,
+ public_port_end: int | None = None,
+ local_port: int | None = None,
+ ) -> CloudapiComputePfwAddResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/pfw_del.py b/src/dynamix_sdk/api/cloudapi/compute/pfw_del.py
new file mode 100644
index 0000000..7c53855
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/pfw_del.py
@@ -0,0 +1,20 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiComputePfwDelResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputePfwDelProtocol(_base.BasePostAPIFunctionProtocol):
+ def pfw_del(
+ self,
+ *,
+ vm_id: int,
+ rule_id: int | None = None,
+ public_port_start: int | None = None,
+ public_port_end: int | None = None,
+ local_port: int | None = None,
+ protocol: _nested.NATRuleProtocol | None = None,
+ ) -> CloudapiComputePfwDelResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/pfw_list.py b/src/dynamix_sdk/api/cloudapi/compute/pfw_list.py
new file mode 100644
index 0000000..1ce0b94
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/pfw_list.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputePfwListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.NATRuleAPIResultNM]
+ entry_count: int
+
+
+class CloudapiComputePfwListProtocol(_base.BasePostAPIFunctionProtocol):
+ def pfw_list(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputePfwListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py b/src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py
new file mode 100644
index 0000000..054fb4d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputePinToStackResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputePinToStackProtocol(_base.BasePostAPIFunctionProtocol):
+ def pin_to_stack(
+ self,
+ *,
+ vm_id: int,
+ auto_start: bool = False,
+ ) -> CloudapiComputePinToStackResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/reboot.py b/src/dynamix_sdk/api/cloudapi/compute/reboot.py
new file mode 100644
index 0000000..4ec73ac
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/reboot.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeRebootResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeRebootProtocol(_base.BasePostAPIFunctionProtocol):
+ def reboot(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeRebootResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/redeploy.py b/src/dynamix_sdk/api/cloudapi/compute/redeploy.py
new file mode 100644
index 0000000..58a3187
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/redeploy.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeRedeployResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeRedeployProtocol(_base.BasePostAPIFunctionProtocol):
+ def redeploy(
+ self,
+ *,
+ vm_id: int,
+ start: bool = False,
+ boot_disk_size_gb: int | None = None,
+ data_disks_change_mode: _nested.DataDisksChangeMode = (
+ _nested.DataDisksChangeMode.DETACH
+ ),
+ force_stop: bool = False,
+ image_id: int | None = None,
+ ) -> CloudapiComputeRedeployResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/resize.py b/src/dynamix_sdk/api/cloudapi/compute/resize.py
new file mode 100644
index 0000000..346e67e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/resize.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeResizeResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeResizeProtocol(_base.BasePostAPIFunctionProtocol):
+ def resize(
+ self,
+ *,
+ vm_id: int,
+ cpu_count: None | int = None,
+ force: bool = False,
+ preferred_cpu_cores: None | list[int] = None,
+ ram_size_mb: None | int = None,
+ ) -> CloudapiComputeResizeResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/resume.py b/src/dynamix_sdk/api/cloudapi/compute/resume.py
new file mode 100644
index 0000000..e8b9833
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/resume.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeResumeResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeResumeProtocol(_base.BasePostAPIFunctionProtocol):
+ def resume(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeResumeResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/set_custom_fields.py b/src/dynamix_sdk/api/cloudapi/compute/set_custom_fields.py
new file mode 100644
index 0000000..a021ec1
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/set_custom_fields.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeSetCustomFieldsResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeSetCustomFieldsProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def set_custom_fields(
+ self,
+ *,
+ vm_id: int,
+ custom_fields: str,
+ ) -> CloudapiComputeSetCustomFieldsResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/snapshot_create.py b/src/dynamix_sdk/api/cloudapi/compute/snapshot_create.py
new file mode 100644
index 0000000..3644ff2
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/snapshot_create.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeSnapshotCreateResultStr(_base.BaseAPIResultStr):
+ pass
+
+
+class CloudapiComputeSnapshotCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def snapshot_create(
+ self,
+ *,
+ vm_id: int,
+ label: str,
+ ) -> CloudapiComputeSnapshotCreateResultStr:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/snapshot_list.py b/src/dynamix_sdk/api/cloudapi/compute/snapshot_list.py
new file mode 100644
index 0000000..596b9fc
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/snapshot_list.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeSnapshotListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.SnapshotSetAPIResultNM]
+ entry_count: int
+
+
+class CloudapiComputeSnapshotListProtocol(_base.BasePostAPIFunctionProtocol):
+ def snapshot_list(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeSnapshotListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/snapshot_rollback.py b/src/dynamix_sdk/api/cloudapi/compute/snapshot_rollback.py
new file mode 100644
index 0000000..0405415
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/snapshot_rollback.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeSnapshotRollbackResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeSnapshotRollbackProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def snapshot_rollback(
+ self,
+ *,
+ vm_id: int,
+ label: str,
+ ) -> CloudapiComputeSnapshotRollbackResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/start.py b/src/dynamix_sdk/api/cloudapi/compute/start.py
new file mode 100644
index 0000000..6524588
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/start.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeStartResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeStartProtocol(_base.BasePostAPIFunctionProtocol):
+ def start(
+ self,
+ *,
+ vm_id: int,
+ boot_cdrom_image_id: None | int = None,
+ ) -> CloudapiComputeStartResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/stop.py b/src/dynamix_sdk/api/cloudapi/compute/stop.py
new file mode 100644
index 0000000..0d63491
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/stop.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeStopResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeStopProtocol(_base.BasePostAPIFunctionProtocol):
+ def stop(
+ self,
+ *,
+ vm_id: int,
+ force: bool = False,
+ ) -> CloudapiComputeStopResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/tag_add.py b/src/dynamix_sdk/api/cloudapi/compute/tag_add.py
new file mode 100644
index 0000000..8b078b2
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/tag_add.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeTagAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeTagAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def tag_add(
+ self,
+ *,
+ vm_id: int,
+ key: str,
+ value: str,
+ ) -> CloudapiComputeTagAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/tag_remove.py b/src/dynamix_sdk/api/cloudapi/compute/tag_remove.py
new file mode 100644
index 0000000..649163e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/tag_remove.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeTagRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeTagRemoveProtocol(_base.BasePostAPIFunctionProtocol):
+ def tag_remove(
+ self,
+ *,
+ vm_id: int,
+ key: str,
+ ) -> CloudapiComputeTagRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py b/src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py
new file mode 100644
index 0000000..dbe44e7
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeUnpinFromStackResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeUnpinFromStackProtocol(_base.BasePostAPIFunctionProtocol):
+ def unpin_from_stack(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeUnpinFromStackResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/update.py b/src/dynamix_sdk/api/cloudapi/compute/update.py
index 7e113a1..e62928c 100644
--- a/src/dynamix_sdk/api/cloudapi/compute/update.py
+++ b/src/dynamix_sdk/api/cloudapi/compute/update.py
@@ -10,7 +10,7 @@ class CloudapiComputeUpdateProtocol(_base.BasePostAPIFunctionProtocol):
def update(
self,
*,
- compute_id: int,
+ vm_id: int,
auto_start: None | bool = None,
chipset: None | _nested.Chipset = None,
cpu_pin: None | bool = None,
diff --git a/src/dynamix_sdk/api/cloudapi/compute/user_grant.py b/src/dynamix_sdk/api/cloudapi/compute/user_grant.py
new file mode 100644
index 0000000..870d6a4
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/user_grant.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeUserGrantResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeUserGrantProtocol(_base.BasePostAPIFunctionProtocol):
+ def user_grant(
+ self,
+ *,
+ vm_id: int,
+ user_name: str,
+ access_type: _nested.AccessTypeForSet,
+ ) -> CloudapiComputeUserGrantResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/user_list.py b/src/dynamix_sdk/api/cloudapi/compute/user_list.py
new file mode 100644
index 0000000..459dbb9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/user_list.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeUserListResultModel(_base.BaseAPIResultModel):
+ data: _nested.VMACLForComputeUserListAPIResultNM
+ entry_count: int
+
+
+class CloudapiComputeUserListProtocol(_base.BasePostAPIFunctionProtocol):
+ def user_list(
+ self,
+ *,
+ vm_id: int,
+ ) -> CloudapiComputeUserListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/user_revoke.py b/src/dynamix_sdk/api/cloudapi/compute/user_revoke.py
new file mode 100644
index 0000000..3d8b608
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/user_revoke.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiComputeUserRevokeResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeUserRevokeProtocol(_base.BasePostAPIFunctionProtocol):
+ def user_revoke(
+ self,
+ *,
+ vm_id: int,
+ user_name: str,
+ ) -> CloudapiComputeUserRevokeResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/compute/user_update.py b/src/dynamix_sdk/api/cloudapi/compute/user_update.py
new file mode 100644
index 0000000..9e4e80e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/compute/user_update.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiComputeUserUpdateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiComputeUserUpdateProtocol(_base.BasePostAPIFunctionProtocol):
+ def user_update(
+ self,
+ *,
+ vm_id: int,
+ user_name: str,
+ access_type: _nested.AccessTypeForSet,
+ ) -> CloudapiComputeUserUpdateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/__init__.py b/src/dynamix_sdk/api/cloudapi/disks/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/disks/_api.py b/src/dynamix_sdk/api/cloudapi/disks/_api.py
new file mode 100644
index 0000000..36bf87f
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/_api.py
@@ -0,0 +1,39 @@
+import dynamix_sdk.base as _base
+from .create import *
+from .delete import *
+from .delete_disks import *
+from .get import *
+from .limit_io import *
+from .list import *
+from .list_deleted import *
+from .list_types import *
+from .list_unattached import *
+from .rename import *
+from .resize2 import *
+from .restore import *
+from .share import *
+from .snapshot_delete import *
+from .snapshot_rollback import *
+from .unshare import *
+
+
+class CloudapiDisksAPI(
+ _base.BaseAPI,
+ CloudapiDisksCreateProtocol,
+ CloudapiDisksDeleteDisksProtocol,
+ CloudapiDisksDeleteProtocol,
+ CloudapiDisksGetProtocol,
+ CloudapiDisksLimitIOProtocol,
+ CloudapiDisksListDeletedProtocol,
+ CloudapiDisksListProtocol,
+ CloudapiDisksListTypesProtocol,
+ CloudapiDisksListUnattachedProtocol,
+ CloudapiDisksRenameProtocol,
+ CloudapiDisksResize2Protocol,
+ CloudapiDisksRestoreProtocol,
+ CloudapiDisksShareProtocol,
+ CloudapiDisksSnapshotDeleteProtocol,
+ CloudapiDisksSnapshotRollbackProtocol,
+ CloudapiDisksUnshareProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/disks/create.py b/src/dynamix_sdk/api/cloudapi/disks/create.py
new file mode 100644
index 0000000..d04fd0e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/create.py
@@ -0,0 +1,21 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksCreateResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiDisksCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def create(
+ self,
+ *,
+ account_id: int,
+ grid_id: int,
+ name: str,
+ size_gb: int,
+ iops: int = 2000,
+ description: str | None = None,
+ sep_id: int | None = None,
+ sep_pool_name: str | None = None,
+ ) -> CloudapiDisksCreateResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/delete.py b/src/dynamix_sdk/api/cloudapi/disks/delete.py
new file mode 100644
index 0000000..0f74b2d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/delete.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ disk_id: int,
+ detach: bool = False,
+ permanently: bool = False,
+ ) -> CloudapiDisksDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/delete_disks.py b/src/dynamix_sdk/api/cloudapi/disks/delete_disks.py
new file mode 100644
index 0000000..4b14ec2
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/delete_disks.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksDeleteDisksResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksDeleteDisksProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete_disks(
+ self,
+ *,
+ disk_ids: list[int],
+ permanently: bool = False,
+ ) -> CloudapiDisksDeleteDisksResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/get.py b/src/dynamix_sdk/api/cloudapi/disks/get.py
new file mode 100644
index 0000000..92dcca1
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/get.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiDisksGetResultModel(
+ _base.BaseAPIResultModel, _nested.BaseDiskForCADisksAPIResultNM
+):
+ vms: dict[str, str]
+ device_name: str
+ sep_type: _nested.SEPType
+
+
+class CloudapiDisksGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ disk_id: int,
+ ) -> CloudapiDisksGetResultModel: ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/limit_io.py b/src/dynamix_sdk/api/cloudapi/disks/limit_io.py
new file mode 100644
index 0000000..e8c58d3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/limit_io.py
@@ -0,0 +1,27 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksLimitIOResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksLimitIOProtocol(_base.BasePostAPIFunctionProtocol):
+ def limit_io(
+ self,
+ *,
+ disk_id: int,
+ read_bytes_sec_max: int | None = None,
+ read_bytes_sec: int | None = None,
+ read_iops_sec_max: int | None = None,
+ read_iops_sec: int | None = None,
+ size_iops_sec: int | None = None,
+ total_bytes_sec_max: int | None = None,
+ total_bytes_sec: int | None = None,
+ total_iops_sec_max: int | None = None,
+ total_iops_sec: int | None = None,
+ write_bytes_sec_max: int | None = None,
+ write_bytes_sec: int | None = None,
+ write_iops_sec_max: int | None = None,
+ write_iops_sec: int | None = None,
+ ) -> CloudapiDisksLimitIOResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/list.py b/src/dynamix_sdk/api/cloudapi/disks/list.py
new file mode 100644
index 0000000..faf453d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/list.py
@@ -0,0 +1,28 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiDisksListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.DiskForListAndListDeletedAPIResultNM]
+ entry_count: int
+
+
+class CloudapiDisksListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ account_id: int | None = None,
+ account_name: str | None = None,
+ disk_max_size_gb: int | None = None,
+ id: int | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ sep_id: int | None = None,
+ sep_pool_name: str | None = None,
+ shared: bool | None = None,
+ sort_by: str | None = None,
+ status: _nested.DiskStatus | None = None,
+ type: _nested.DiskType | None = None,
+ ) -> CloudapiDisksListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/list_deleted.py b/src/dynamix_sdk/api/cloudapi/disks/list_deleted.py
new file mode 100644
index 0000000..f18f45a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/list_deleted.py
@@ -0,0 +1,25 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiDisksListDeletedResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.DiskForListAndListDeletedAPIResultNM]
+ entry_count: int
+
+
+class CloudapiDisksListDeletedProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_deleted(
+ self,
+ *,
+ account_id: int | None = None,
+ account_name: str | None = None,
+ disk_max_size_gb: int | None = None,
+ id: int | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ shared: bool | None = None,
+ sort_by: str | None = None,
+ type: _nested.DiskType | None = None,
+ ) -> CloudapiDisksListDeletedResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/list_types.py b/src/dynamix_sdk/api/cloudapi/disks/list_types.py
new file mode 100644
index 0000000..a0cda70
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/list_types.py
@@ -0,0 +1,19 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiDisksListTypesResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.SEPAPIResultNM | _nested.PoolDiskType]
+ entry_count: int
+
+
+class CloudapiDisksListTypesProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_types(
+ self,
+ *,
+ detailed: bool = False,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ sort_by: str | None = None,
+ ) -> CloudapiDisksListTypesResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/list_unattached.py b/src/dynamix_sdk/api/cloudapi/disks/list_unattached.py
new file mode 100644
index 0000000..2e93ec6
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/list_unattached.py
@@ -0,0 +1,26 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiDisksListUnattachedResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.DiskForListUnattachedAPIResultNM]
+ entry_count: int
+
+
+class CloudapiDisksListUnattachedProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_unattached(
+ self,
+ *,
+ account_id: int | None = None,
+ account_name: str | None = None,
+ disk_max_size_gb: int | None = None,
+ id: int | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ sep_id: int | None = None,
+ sep_pool_name: str | None = None,
+ sort_by: str | None = None,
+ status: _nested.DiskStatus | None = None,
+ type: _nested.DiskType | None = None,
+ ) -> CloudapiDisksListUnattachedResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/rename.py b/src/dynamix_sdk/api/cloudapi/disks/rename.py
new file mode 100644
index 0000000..c0fcdda
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/rename.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksRenameResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksRenameProtocol(_base.BasePostAPIFunctionProtocol):
+ def rename(
+ self,
+ *,
+ disk_id: int,
+ name: str,
+ ) -> CloudapiDisksRenameResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/resize2.py b/src/dynamix_sdk/api/cloudapi/disks/resize2.py
new file mode 100644
index 0000000..acaa51a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/resize2.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksResize2ResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksResize2Protocol(_base.BasePostAPIFunctionProtocol):
+ def resize2(
+ self,
+ *,
+ disk_id: int,
+ disk_size_gb: int,
+ ) -> CloudapiDisksResize2ResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/restore.py b/src/dynamix_sdk/api/cloudapi/disks/restore.py
new file mode 100644
index 0000000..62294a9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/restore.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksRestoreResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksRestoreProtocol(_base.BasePostAPIFunctionProtocol):
+ def restore(
+ self,
+ *,
+ disk_id: int,
+ ) -> CloudapiDisksRestoreResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/share.py b/src/dynamix_sdk/api/cloudapi/disks/share.py
new file mode 100644
index 0000000..1572adb
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/share.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksShareResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksShareProtocol(_base.BasePostAPIFunctionProtocol):
+ def share(
+ self,
+ *,
+ disk_id: int,
+ ) -> CloudapiDisksShareResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/snapshot_delete.py b/src/dynamix_sdk/api/cloudapi/disks/snapshot_delete.py
new file mode 100644
index 0000000..de85188
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/snapshot_delete.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksSnapshotDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksSnapshotDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def snapshot_delete(
+ self,
+ *,
+ disk_id: int,
+ label: str,
+ ) -> CloudapiDisksSnapshotDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/snapshot_rollback.py b/src/dynamix_sdk/api/cloudapi/disks/snapshot_rollback.py
new file mode 100644
index 0000000..ec3f7d0
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/snapshot_rollback.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksSnapshotRollbackResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksSnapshotRollbackProtocol(_base.BasePostAPIFunctionProtocol):
+ def snapshot_rollback(
+ self,
+ *,
+ disk_id: int,
+ label: str | None = None,
+ timestamp: int | None = None,
+ ) -> CloudapiDisksSnapshotRollbackResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/disks/unshare.py b/src/dynamix_sdk/api/cloudapi/disks/unshare.py
new file mode 100644
index 0000000..109ad34
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/disks/unshare.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiDisksUnshareResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiDisksUnshareProtocol(_base.BasePostAPIFunctionProtocol):
+ def unshare(
+ self,
+ *,
+ disk_id: int,
+ ) -> CloudapiDisksUnshareResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/extnet/__init__.py b/src/dynamix_sdk/api/cloudapi/extnet/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/extnet/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/extnet/_api.py b/src/dynamix_sdk/api/cloudapi/extnet/_api.py
new file mode 100644
index 0000000..f0d52ad
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/extnet/_api.py
@@ -0,0 +1,13 @@
+import dynamix_sdk.base as _base
+from .get import *
+from .get_default import *
+from .list import *
+
+
+class CloudapiExtnetAPI(
+ _base.BaseAPI,
+ CloudapiExtnetGetProtocol,
+ CloudapiExtnetGetDefaultProtocol,
+ CloudapiExtnetListProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/extnet/get.py b/src/dynamix_sdk/api/cloudapi/extnet/get.py
new file mode 100644
index 0000000..9aa58dc
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/extnet/get.py
@@ -0,0 +1,38 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiExtnetGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.ExtNetForListAPIResultNM,
+):
+ check_ips: list[str]
+ default_qos: _nested.QOSAPIResultNM
+ default: bool
+ description: str
+ dns_servers: list[str]
+ dhcp_excluded_reservations: list[_nested.DHCPReservationAPIResultNM]
+ free_ip_count: int
+ gateway: str
+ grid_id: int
+ guid: int
+ milestones: int
+ net_ip: str
+ network_id: int
+ ovs_bridge: str
+ pre_reservation_count: int
+ net_mask: int
+ primary_vnfdev_id: int
+ dhcp_reservations: list[_nested.DHCPReservationAPIResultNM]
+ shared_with: list[int]
+ vlan_id: int
+ vnf_ids_by_type: dict[str, int]
+
+
+class CloudapiExtnetGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ ext_net_id: int,
+ ) -> CloudapiExtnetGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/extnet/get_default.py b/src/dynamix_sdk/api/cloudapi/extnet/get_default.py
new file mode 100644
index 0000000..222c764
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/extnet/get_default.py
@@ -0,0 +1,10 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiExtnetGetDefaultResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiExtnetGetDefaultProtocol(_base.BasePostAPIFunctionProtocol):
+ def get_default(self) -> CloudapiExtnetGetDefaultResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/extnet/list.py b/src/dynamix_sdk/api/cloudapi/extnet/list.py
new file mode 100644
index 0000000..273f833
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/extnet/list.py
@@ -0,0 +1,25 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiExtnetListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.ExtNetForListAPIResultNM]
+ entry_count: int
+
+
+class CloudapiExtnetListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ account_id: int | None = None,
+ id: int | None = None,
+ name: str | None = None,
+ net_ip: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ sort_by: str | None = None,
+ status: _nested.ExtNetStatus | None = None,
+ vlan_id: int | None = None,
+ vnfdev_id: int | None = None,
+ ) -> CloudapiExtnetListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/__init__.py b/src/dynamix_sdk/api/cloudapi/flipgroup/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/_api.py b/src/dynamix_sdk/api/cloudapi/flipgroup/_api.py
new file mode 100644
index 0000000..3447dff
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/_api.py
@@ -0,0 +1,21 @@
+import dynamix_sdk.base as _base
+from .compute_add import *
+from .compute_remove import *
+from .create import *
+from .delete import *
+from .edit import *
+from .get import *
+from .list import *
+
+
+class CloudapiFlipgroupAPI(
+ _base.BaseAPI,
+ CloudapiFlipgroupComputeAddProtocol,
+ CloudapiFlipgroupComputeRemoveProtocol,
+ CloudapiFlipgroupCreateProtocol,
+ CloudapiFlipgroupDeleteProtocol,
+ CloudapiFlipgroupEditProtocol,
+ CloudapiFlipgroupGetProtocol,
+ CloudapiFlipgroupListProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/compute_add.py b/src/dynamix_sdk/api/cloudapi/flipgroup/compute_add.py
new file mode 100644
index 0000000..ce91e5b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/compute_add.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiFlipgroupComputeAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiFlipgroupComputeAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def compute_add(
+ self,
+ *,
+ flip_group_id: int,
+ vm_id: int,
+ ) -> CloudapiFlipgroupComputeAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/compute_remove.py b/src/dynamix_sdk/api/cloudapi/flipgroup/compute_remove.py
new file mode 100644
index 0000000..3c38272
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/compute_remove.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiFlipgroupComputeRemoveResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiFlipgroupComputeRemoveProtocol(
+ _base.BasePostAPIFunctionProtocol
+):
+ def compute_remove(
+ self,
+ *,
+ flip_group_id: int,
+ vm_id: int,
+ ) -> CloudapiFlipgroupComputeRemoveResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/create.py b/src/dynamix_sdk/api/cloudapi/flipgroup/create.py
new file mode 100644
index 0000000..4627c59
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/create.py
@@ -0,0 +1,27 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiFlipgroupCreateResultModel(_base.BaseAPIResultModel):
+ default_gw: str
+ id: int
+ ip_addr: str
+ name: str
+ net_mask: int
+
+
+class CloudapiFlipgroupCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def create(
+ self,
+ *,
+ account_id: int,
+ name: str,
+ net_id: int,
+ net_type: _nested.FlipGroupNetType,
+ client_type: _nested.FlipGroupClientType = (
+ _nested.FlipGroupClientType.VM,
+ ),
+ description: str | None = None,
+ ip_addr: str | None = None,
+ ) -> CloudapiFlipgroupCreateResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/delete.py b/src/dynamix_sdk/api/cloudapi/flipgroup/delete.py
new file mode 100644
index 0000000..d661188
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/delete.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiFlipgroupDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiFlipgroupDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ flip_group_id: int,
+ ) -> CloudapiFlipgroupDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/edit.py b/src/dynamix_sdk/api/cloudapi/flipgroup/edit.py
new file mode 100644
index 0000000..9e298fb
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/edit.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiFlipgroupEditResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiFlipgroupEditProtocol(_base.BasePostAPIFunctionProtocol):
+ def edit(
+ self,
+ *,
+ flip_group_id: int,
+ name: str | None = None,
+ description: str | None = None,
+ ) -> CloudapiFlipgroupEditResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/get.py b/src/dynamix_sdk/api/cloudapi/flipgroup/get.py
new file mode 100644
index 0000000..b4b9322
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/get.py
@@ -0,0 +1,40 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiFlipgroupGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.BaseFlipGroupAPIResultNM,
+):
+ account_name: str
+ client_names: list[str]
+ created_by: str
+ created_timestamp: int
+ deleted_by: str
+ deleted_timestamp: int
+ net_cidr: str
+ rg_id: int
+ rg_name: str
+ updated_by: str
+ updated_timestamp: int
+
+ @property
+ def created_datetime(self):
+ return self._get_datetime_from_timestamp(self.created_timestamp)
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+ @property
+ def updated_datetime(self):
+ return self._get_datetime_from_timestamp(self.updated_timestamp)
+
+
+class CloudapiFlipgroupGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ flip_group_id: int,
+ ) -> CloudapiFlipgroupGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/list.py b/src/dynamix_sdk/api/cloudapi/flipgroup/list.py
new file mode 100644
index 0000000..2661025
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/flipgroup/list.py
@@ -0,0 +1,29 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiFlipgroupListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.FlipGroupForListAPIResultNM]
+ entry_count: int
+
+
+class CloudapiFlipgroupListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ account_id: int | None = None,
+ client_ids: list[int] | None = None,
+ conn_id: int | None = None,
+ ext_net_id: int | None = None,
+ id: int | None = None,
+ ip_addr: str | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ rg_id: int | None = None,
+ sort_by: str | None = None,
+ status: _nested.FlipGroupStatus | None = None,
+ vins_id: int | None = None,
+ vins_name: str | None = None,
+ ) -> CloudapiFlipgroupListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/__init__.py b/src/dynamix_sdk/api/cloudapi/image/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/image/_api.py b/src/dynamix_sdk/api/cloudapi/image/_api.py
new file mode 100644
index 0000000..9cc2f4e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/_api.py
@@ -0,0 +1,21 @@
+import dynamix_sdk.base as _base
+from .create import *
+from .create_virtual import *
+from .delete import *
+from .get import *
+from .link import *
+from .list import *
+from .rename import *
+
+
+class CloudapiImageAPI(
+ _base.BaseAPI,
+ CloudapiImageCreateProtocol,
+ CloudapiImageCreateVirtualProtocol,
+ CloudapiImageDeleteProtocol,
+ CloudapiImageGetProtocol,
+ CloudapiImageLinkProtocol,
+ CloudapiImageListProtocol,
+ CloudapiImageRenameProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/image/create.py b/src/dynamix_sdk/api/cloudapi/image/create.py
new file mode 100644
index 0000000..f40fe85
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/create.py
@@ -0,0 +1,30 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiImageCreateResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiImageCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def create(
+ self,
+ *,
+ account_id: int,
+ boot_mode: _nested.BootMode,
+ drivers: list[_nested.Driver],
+ boot_loader_type: _nested.BootLoaderType,
+ name: str,
+ download_url: str,
+ hot_resize: bool = False,
+ network_interface_naming: _nested.NetIfaceNamingTemplate = (
+ _nested.NetIfaceNamingTemplate.ens
+ ),
+ download_password: str | None = None,
+ os_password: str | None = None,
+ sep_id: int | None = None,
+ sep_pool_name: str | None = None,
+ download_user_name: str | None = None,
+ os_user_name: str | None = None,
+ ) -> CloudapiImageCreateResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/create_virtual.py b/src/dynamix_sdk/api/cloudapi/image/create_virtual.py
new file mode 100644
index 0000000..b788b3f
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/create_virtual.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiImageCreateVirtualResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiImageCreateVirtualProtocol(_base.BasePostAPIFunctionProtocol):
+ def create_virtual(
+ self,
+ *,
+ name: str,
+ target_image_id: int,
+ ) -> CloudapiImageCreateVirtualResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/delete.py b/src/dynamix_sdk/api/cloudapi/image/delete.py
new file mode 100644
index 0000000..c45477c
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/delete.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiImageDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiImageDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ image_id: int,
+ ) -> CloudapiImageDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/get.py b/src/dynamix_sdk/api/cloudapi/image/get.py
new file mode 100644
index 0000000..7913387
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/get.py
@@ -0,0 +1,46 @@
+import typing as _typing
+
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiImageGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.BaseImageAPIResultNM,
+):
+ acl: list[_typing.Any]
+ cd_presented_to: dict[str, list[int]]
+ ckey: str
+ deleted_timestamp: int
+ enabled: bool
+ grid_id: int
+ guid: int
+ history: list[_nested.ImageHistoryRecordAPIResultNM]
+ last_modified: int
+ milestones: int
+ os_password: str | None
+ present_to: list[int]
+ provider_name: str
+ purge_attempt_count: int
+ res_id: str
+ rescue_cd: bool
+ shared_with: list[int]
+ snapshot_id: str = ''
+ tech_status: _nested.ImageTechStatus
+ unc_path: str
+ version: str
+ vm_ci_id: int
+
+ @property
+ def deleted_datetime(self):
+ return self._get_datetime_from_timestamp(self.deleted_timestamp)
+
+
+class CloudapiImageGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ image_id: int,
+ show_all: bool = False,
+ ) -> CloudapiImageGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/link.py b/src/dynamix_sdk/api/cloudapi/image/link.py
new file mode 100644
index 0000000..4077d9f
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/link.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiImageLinkResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiImageLinkProtocol(_base.BasePostAPIFunctionProtocol):
+ def link(
+ self,
+ *,
+ virtual_image_id: int,
+ target_image_id: int,
+ ) -> CloudapiImageLinkResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/list.py b/src/dynamix_sdk/api/cloudapi/image/list.py
new file mode 100644
index 0000000..e1807b7
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/list.py
@@ -0,0 +1,30 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiImageListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.ImageForListAPIResultNM]
+ entry_count: int
+
+
+class CloudapiImageListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ bootable: bool | None = None,
+ id: int | None = None,
+ enabled: bool | None = None,
+ hot_resize: bool | None = None,
+ size_gb: int | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ public: bool | None = None,
+ sep_id: int | None = None,
+ sep_name: str | None = None,
+ sep_pool_name: str | None = None,
+ sort_by: str | None = None,
+ status: _nested.ImageStatus | None = None,
+ type: _nested.ImageType | None = None,
+ ) -> CloudapiImageListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/image/rename.py b/src/dynamix_sdk/api/cloudapi/image/rename.py
new file mode 100644
index 0000000..cc09a6d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/image/rename.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiImageRenameResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiImageRenameProtocol(_base.BasePostAPIFunctionProtocol):
+ def rename(
+ self,
+ *,
+ image_id: int,
+ name: str,
+ ) -> CloudapiImageRenameResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/kvmx86/_api.py b/src/dynamix_sdk/api/cloudapi/kvmx86/_api.py
index d254db5..5b6729c 100644
--- a/src/dynamix_sdk/api/cloudapi/kvmx86/_api.py
+++ b/src/dynamix_sdk/api/cloudapi/kvmx86/_api.py
@@ -1,9 +1,11 @@
import dynamix_sdk.base as _base
from .create import *
+from .create_blank import *
class CloudapiKvmx86API(
_base.BaseAPI,
CloudapiKvmx86CreateProtocol,
+ CloudapiKvmx86CreateBlankProtocol,
):
pass
diff --git a/src/dynamix_sdk/api/cloudapi/kvmx86/create.py b/src/dynamix_sdk/api/cloudapi/kvmx86/create.py
index be67602..299467b 100644
--- a/src/dynamix_sdk/api/cloudapi/kvmx86/create.py
+++ b/src/dynamix_sdk/api/cloudapi/kvmx86/create.py
@@ -10,11 +10,11 @@ class CloudapiKvmx86CreateProtocol(_base.BasePostAPIFunctionProtocol):
def create(
self,
*,
- cpu: int,
+ cpu_count: int,
name: str,
- ram: int,
+ ram_size_mb: int,
rg_id: int,
- boot_disk_size: None | int = None,
+ boot_disk_size_gb: None | int = None,
chipset: _nested.Chipset = _nested.Chipset.i440fx,
ci_user_data: None | dict = None,
cpu_pin: bool = False,
diff --git a/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py b/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py
new file mode 100644
index 0000000..8cb9640
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py
@@ -0,0 +1,28 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiKvmx86CreateBlankResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiKvmx86CreateBlankProtocol(_base.BasePostAPIFunctionProtocol):
+ def create_blank(
+ self,
+ *,
+ cpu_count: int,
+ name: str,
+ ram_size_mb: int,
+ rg_id: int,
+ boot_disk_size_gb: None | int = None,
+ chipset: _nested.Chipset = _nested.Chipset.i440fx,
+ data_disks: None | list[_nested.DiskAPIParamsNM] = None,
+ description: None | str = None,
+ driver: _nested.Driver = _nested.Driver.KVM_X86,
+ interfaces: None | list[_nested.InterfaceAPIParamsNM] = None,
+ preferred_cpu_cores: None | list[int] = None,
+ sep_id: None | int = None,
+ sep_pool_name: None | str = None,
+ without_boot_disk: bool = False,
+ ) -> CloudapiKvmx86CreateBlankResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/__init__.py b/src/dynamix_sdk/api/cloudapi/lb/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/lb/_api.py b/src/dynamix_sdk/api/cloudapi/lb/_api.py
new file mode 100644
index 0000000..8223c27
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/_api.py
@@ -0,0 +1,29 @@
+import dynamix_sdk.base as _base
+from .backend_create import *
+from .backend_delete import *
+from .backend_server_add import *
+from .backend_server_delete import *
+from .backend_server_update import *
+from .backend_update import *
+from .create import *
+from .delete import *
+from .get import *
+from .list import *
+from .list_deleted import *
+
+
+class CloudapiLbAPI(
+ _base.BaseAPI,
+ CloudapiLbBackendCreateProtocol,
+ CloudapiLbBackendDeleteProtocol,
+ CloudapiLbBackendServerAddProtocol,
+ CloudapiLbBackendServerDeleteProtocol,
+ CloudapiLbBackendServerUpdateProtocol,
+ CloudapiLbBackendUpdateProtocol,
+ CloudapiLbCreateProtocol,
+ CloudapiLbDeleteProtocol,
+ CloudapiLbGetProtocol,
+ CloudapiLbListDeletedProtocol,
+ CloudapiLbListProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/lb/backend_create.py b/src/dynamix_sdk/api/cloudapi/lb/backend_create.py
new file mode 100644
index 0000000..67ea85a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/backend_create.py
@@ -0,0 +1,27 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiLbBackendCreateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbBackendCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def backend_create(
+ self,
+ *,
+ lb_id: int,
+ backend_name: str,
+ inter: int = 5000,
+ algorithm: _nested.LBBackendAlgorithm = (
+ _nested.LBBackendAlgorithm.ROUNDROBIN
+ ),
+ downinter: int = 1000,
+ rise: int = 2,
+ fall: int = 2,
+ slowstart: int = 60000,
+ maxconn: int = 250,
+ maxqueue: int = 256,
+ weight: int = 256,
+ ) -> CloudapiLbBackendCreateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/backend_delete.py b/src/dynamix_sdk/api/cloudapi/lb/backend_delete.py
new file mode 100644
index 0000000..e14ecb1
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/backend_delete.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiLbBackendDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbBackendDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def backend_delete(
+ self,
+ *,
+ lb_id: int,
+ backend_name: str,
+ ) -> CloudapiLbBackendDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/backend_server_add.py b/src/dynamix_sdk/api/cloudapi/lb/backend_server_add.py
new file mode 100644
index 0000000..0233844
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/backend_server_add.py
@@ -0,0 +1,28 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiLbBackendServerAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbBackendServerAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def backend_server_add(
+ self,
+ *,
+ lb_id: int,
+ backend_name: str,
+ server_name: str,
+ ip_addr: str,
+ port: int,
+ check: _nested.LBServerCheck = _nested.LBServerCheck.ENABLED,
+ inter: int = 5000,
+ downinter: int = 1000,
+ rise: int = 2,
+ fall: int = 2,
+ slowstart: int = 60000,
+ maxconn: int = 250,
+ maxqueue: int = 256,
+ weight: int = 256,
+ ) -> CloudapiLbBackendServerAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/backend_server_delete.py b/src/dynamix_sdk/api/cloudapi/lb/backend_server_delete.py
new file mode 100644
index 0000000..032693f
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/backend_server_delete.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiLbBackendServerDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbBackendServerDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def backend_server_delete(
+ self,
+ *,
+ lb_id: int,
+ backend_name: str,
+ server_name: str,
+ ) -> CloudapiLbBackendServerDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/backend_server_update.py b/src/dynamix_sdk/api/cloudapi/lb/backend_server_update.py
new file mode 100644
index 0000000..4af62de
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/backend_server_update.py
@@ -0,0 +1,28 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiLbBackendServerUpdateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbBackendServerUpdateProtocol(_base.BasePostAPIFunctionProtocol):
+ def backend_server_update(
+ self,
+ *,
+ lb_id: int,
+ backend_name: str,
+ server_name: str,
+ ip_addr: str,
+ port: int,
+ check: _nested.LBServerCheck = _nested.LBServerCheck.ENABLED,
+ inter: int = 5000,
+ downinter: int = 1000,
+ rise: int = 2,
+ fall: int = 2,
+ slowstart: int = 60000,
+ maxconn: int = 250,
+ maxqueue: int = 256,
+ weight: int = 256,
+ ) -> CloudapiLbBackendServerUpdateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/backend_update.py b/src/dynamix_sdk/api/cloudapi/lb/backend_update.py
new file mode 100644
index 0000000..4592754
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/backend_update.py
@@ -0,0 +1,27 @@
+import dynamix_sdk.base as _base
+from dynamix_sdk.api import _nested
+
+
+class CloudapiLbBackendUpdateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbBackendUpdateProtocol(_base.BasePostAPIFunctionProtocol):
+ def backend_update(
+ self,
+ *,
+ lb_id: int,
+ backend_name: str,
+ inter: int = 5000,
+ algorithm: _nested.LBBackendAlgorithm = (
+ _nested.LBBackendAlgorithm.ROUNDROBIN
+ ),
+ downinter: int = 1000,
+ rise: int = 2,
+ fall: int = 2,
+ slowstart: int = 60000,
+ maxconn: int = 250,
+ maxqueue: int = 256,
+ weight: int = 256,
+ ) -> CloudapiLbBackendUpdateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/create.py b/src/dynamix_sdk/api/cloudapi/lb/create.py
new file mode 100644
index 0000000..03b981d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/create.py
@@ -0,0 +1,21 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiLbCreateResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiLbCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def create(
+ self,
+ *,
+ ext_net_id: int,
+ name: str,
+ rg_id: int,
+ vins_id: int,
+ description: None | str = None,
+ highly_available: bool = False,
+ start: bool = True,
+ sysctl_params: None | list[str] = None,
+ ) -> CloudapiLbCreateResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/delete.py b/src/dynamix_sdk/api/cloudapi/lb/delete.py
new file mode 100644
index 0000000..6365590
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/delete.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiLbDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiLbDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ lb_id: int,
+ permanently: bool = False,
+ ) -> CloudapiLbDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/get.py b/src/dynamix_sdk/api/cloudapi/lb/get.py
new file mode 100644
index 0000000..370c527
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/get.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.api._nested as _nested
+import dynamix_sdk.base as _base
+
+
+class CloudapiLbGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.LBAPIResultNM
+):
+ pass
+
+
+class CloudapiLbGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ lb_id: int,
+ ) -> CloudapiLbGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/list.py b/src/dynamix_sdk/api/cloudapi/lb/list.py
new file mode 100644
index 0000000..3b072ff
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/list.py
@@ -0,0 +1,27 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiLbListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.LBAPIResultNM]
+ entry_count: int
+
+
+class CloudapiLbListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ account_id: None | int = None,
+ backend_ip_addr: None | str = None,
+ frontend_ip_addr: None | str = None,
+ id: None | int = None,
+ include_deleted: bool = False,
+ name: None | str = None,
+ page_number: None | int = None,
+ page_size: None | int = None,
+ rg_id: None | int = None,
+ sort_by: None | str = None,
+ status: None | _nested.LBStatus = None,
+ tech_status: None | _nested.LBTechStatus = None,
+ ) -> CloudapiLbListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/lb/list_deleted.py b/src/dynamix_sdk/api/cloudapi/lb/list_deleted.py
new file mode 100644
index 0000000..c9f2629
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/lb/list_deleted.py
@@ -0,0 +1,25 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiLbListDeletedResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.LBAPIResultNM]
+ entry_count: int
+
+
+class CloudapiLbListDeletedProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_deleted(
+ self,
+ *,
+ account_id: None | int = None,
+ backend_ip_addr: None | str = None,
+ frontend_ip_addr: None | str = None,
+ id: None | int = None,
+ name: None | str = None,
+ page_number: None | int = None,
+ page_size: None | int = None,
+ rg_id: None | int = None,
+ sort_by: None | str = None,
+ tech_status: None | _nested.LBTechStatus = None,
+ ) -> CloudapiLbListDeletedResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/locations/__init__.py b/src/dynamix_sdk/api/cloudapi/locations/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/locations/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/locations/_api.py b/src/dynamix_sdk/api/cloudapi/locations/_api.py
new file mode 100644
index 0000000..b131749
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/locations/_api.py
@@ -0,0 +1,11 @@
+import dynamix_sdk.base as _base
+from .get_url import *
+from .list import *
+
+
+class CloudapiLocationsAPI(
+ _base.BaseAPI,
+ CloudapiLocationsGetUrlProtocol,
+ CloudapiLocationsListProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/locations/get_url.py b/src/dynamix_sdk/api/cloudapi/locations/get_url.py
new file mode 100644
index 0000000..c5e3f1b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/locations/get_url.py
@@ -0,0 +1,10 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiLocationsGetUrlResultStr(_base.BaseAPIResultStr):
+ pass
+
+
+class CloudapiLocationsGetUrlProtocol(_base.BasePostAPIFunctionProtocol):
+ def get_url(self) -> CloudapiLocationsGetUrlResultStr:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/locations/list.py b/src/dynamix_sdk/api/cloudapi/locations/list.py
new file mode 100644
index 0000000..93ba787
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/locations/list.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiLocationsListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.LocationAPIResultNM]
+ entry_count: int
+
+
+class CloudapiLocationsListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ flag: str | None = None,
+ id: int | None = None,
+ location_code: str | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ sort_by: str | None = None,
+ ) -> CloudapiLocationsListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/_api.py b/src/dynamix_sdk/api/cloudapi/rg/_api.py
index 8f9516f..dbe9350 100644
--- a/src/dynamix_sdk/api/cloudapi/rg/_api.py
+++ b/src/dynamix_sdk/api/cloudapi/rg/_api.py
@@ -1,13 +1,31 @@
import dynamix_sdk.base as _base
+from .access_grant import *
+from .access_revoke import *
from .create import *
+from .delete import *
+from .disable import *
+from .enable import *
from .get import *
from .list import *
+from .remove_def_net import *
+from .restore import *
+from .set_def_net import *
+from .update import *
class CloudapiRgAPI(
_base.BaseAPI,
+ CloudapiRgAccessGrantProtocol,
+ CloudapiRgAccessRevokeProtocol,
CloudapiRgCreateProtocol,
+ CloudapiRgDeleteProtocol,
+ CloudapiRgDisableProtocol,
+ CloudapiRgEnableProtocol,
CloudapiRgGetProtocol,
CloudapiRgListProtocol,
+ CloudapiRgRemoveDefNetProtocol,
+ CloudapiRgRestoreProtocol,
+ CloudapiRgSetDefNetProtocol,
+ CloudapiRgUpdateProtocol,
):
pass
diff --git a/src/dynamix_sdk/api/cloudapi/rg/access_grant.py b/src/dynamix_sdk/api/cloudapi/rg/access_grant.py
new file mode 100644
index 0000000..08956f0
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/access_grant.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiRgAccessGrantResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgAccessGrantProtocol(_base.BasePostAPIFunctionProtocol):
+ def access_grant(
+ self,
+ *,
+ access_type: _nested.AccessTypeForSet,
+ rg_id: int,
+ user_name: str,
+ ) -> CloudapiRgAccessGrantResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/access_revoke.py b/src/dynamix_sdk/api/cloudapi/rg/access_revoke.py
new file mode 100644
index 0000000..12d9b9e
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/access_revoke.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgAccessRevokeResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgAccessRevokeProtocol(_base.BasePostAPIFunctionProtocol):
+ def access_revoke(
+ self,
+ *,
+ rg_id: int,
+ user_name: str,
+ ) -> CloudapiRgAccessRevokeResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/create.py b/src/dynamix_sdk/api/cloudapi/rg/create.py
index 8c3ccb3..af6c7b6 100644
--- a/src/dynamix_sdk/api/cloudapi/rg/create.py
+++ b/src/dynamix_sdk/api/cloudapi/rg/create.py
@@ -2,7 +2,7 @@ import dynamix_sdk.base as _base
import dynamix_sdk.api._nested as _nested
-class CloudapiRgCreateResultBoolInt(_base.BaseAPIResultInt):
+class CloudapiRgCreateResultInt(_base.BaseAPIResultInt):
pass
@@ -13,19 +13,19 @@ class CloudapiRgCreateProtocol(_base.BasePostAPIFunctionProtocol):
account_id: int,
grid_id: int,
name: str,
- cpu_quota: int = -1,
+ cpu_count_quota: int | None = None,
default_net_type: _nested.RGDefaultNetType = (
_nested.RGDefaultNetType.PRIVATE
),
description: str | None = None,
- ext_net_id: int = 0,
+ ext_net_id: int | None = None,
ext_net_ip: str | None = None,
- ext_traffic_quota: int = -1,
+ ext_traffic_quota: int | None = None,
ip_cidr: str | None = None,
owner: str | None = None,
- public_ip_quota: int = -1,
- ram_quota: int = -1,
+ public_ip_count_quota: int | None = None,
+ ram_size_quota_mb: int | None = None,
register_computes: bool = False,
- storage_quota: int = -1,
- ) -> CloudapiRgCreateResultBoolInt:
+ storage_size_quota_gb: int | None = None,
+ ) -> CloudapiRgCreateResultInt:
...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/delete.py b/src/dynamix_sdk/api/cloudapi/rg/delete.py
new file mode 100644
index 0000000..2aacfd3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/delete.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ rg_id: int,
+ recursively: bool = False,
+ permanently: bool = False,
+ ) -> CloudapiRgDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/disable.py b/src/dynamix_sdk/api/cloudapi/rg/disable.py
new file mode 100644
index 0000000..e59246c
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/disable.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgDisableResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgDisableProtocol(_base.BasePostAPIFunctionProtocol):
+ def disable(
+ self,
+ *,
+ rg_id: int,
+ ) -> CloudapiRgDisableResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/enable.py b/src/dynamix_sdk/api/cloudapi/rg/enable.py
new file mode 100644
index 0000000..e132d30
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/enable.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgEnableResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgEnableProtocol(_base.BasePostAPIFunctionProtocol):
+ def enable(
+ self,
+ *,
+ rg_id: int,
+ ) -> CloudapiRgEnableResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/remove_def_net.py b/src/dynamix_sdk/api/cloudapi/rg/remove_def_net.py
new file mode 100644
index 0000000..70a00a5
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/remove_def_net.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgRemoveDefNetResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgRemoveDefNetProtocol(_base.BasePostAPIFunctionProtocol):
+ def remove_def_net(
+ self,
+ *,
+ rg_id: int,
+ ) -> CloudapiRgRemoveDefNetResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/restore.py b/src/dynamix_sdk/api/cloudapi/rg/restore.py
new file mode 100644
index 0000000..7639ec1
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/restore.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgRestoreResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgRestoreProtocol(_base.BasePostAPIFunctionProtocol):
+ def restore(
+ self,
+ *,
+ rg_id: int,
+ ) -> CloudapiRgRestoreResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/set_def_net.py b/src/dynamix_sdk/api/cloudapi/rg/set_def_net.py
new file mode 100644
index 0000000..867bb36
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/set_def_net.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiRgSetDefNetResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiRgSetDefNetProtocol(_base.BasePostAPIFunctionProtocol):
+ def set_def_net(
+ self,
+ *,
+ net_type: _nested.RGDefaultNetTypeForSet,
+ rg_id: int,
+ net_id: None | int = None,
+ ) -> CloudapiRgSetDefNetResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/rg/update.py b/src/dynamix_sdk/api/cloudapi/rg/update.py
new file mode 100644
index 0000000..4d5c2ba
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/rg/update.py
@@ -0,0 +1,24 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiRgUpdateResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiRgUpdateProtocol(_base.BasePostAPIFunctionProtocol):
+ def update(
+ self,
+ *,
+ rg_id: int,
+ clear_uniq_pools: bool = False,
+ cpu_count_quota: None | int = None,
+ description: None | str = None,
+ ext_traffic_quota: None | int = None,
+ name: None | str = None,
+ public_ip_count_quota: None | int = None,
+ ram_size_quota_mb: None | int = None,
+ register_computes: None | bool = None,
+ storage_size_quota_gb: None | int = None,
+ uniq_pools: None | list[str] = None,
+ ) -> CloudapiRgUpdateResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/stack/__init__.py b/src/dynamix_sdk/api/cloudapi/stack/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/stack/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/stack/_api.py b/src/dynamix_sdk/api/cloudapi/stack/_api.py
new file mode 100644
index 0000000..920ac65
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/stack/_api.py
@@ -0,0 +1,11 @@
+import dynamix_sdk.base as _base
+from .get import *
+from .list import *
+
+
+class CloudapiStackAPI(
+ _base.BaseAPI,
+ CloudapiStackGetProtocol,
+ CloudapiStackListProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/stack/get.py b/src/dynamix_sdk/api/cloudapi/stack/get.py
new file mode 100644
index 0000000..21450b2
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/stack/get.py
@@ -0,0 +1,21 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiStackGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.StackAPIResultNM
+):
+ cpu_allocation_ratio: float
+ description: str
+ drivers: list[_nested.Driver]
+ mem_allocation_ratio: float
+
+
+class CloudapiStackGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ stack_id: int,
+ ) -> CloudapiStackGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/stack/list.py b/src/dynamix_sdk/api/cloudapi/stack/list.py
new file mode 100644
index 0000000..8f4c869
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/stack/list.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiStackListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.StackAPIResultNM]
+ entry_count: int
+
+
+class CloudapiStackListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ id: int | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ sort_by: str | None = None,
+ status: _nested.PhysicalNodeStatus | None = None,
+ type: str | None = None,
+ ) -> CloudapiStackListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/tasks/__init__.py b/src/dynamix_sdk/api/cloudapi/tasks/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/tasks/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/tasks/_api.py b/src/dynamix_sdk/api/cloudapi/tasks/_api.py
new file mode 100644
index 0000000..d617f3a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/tasks/_api.py
@@ -0,0 +1,11 @@
+import dynamix_sdk.base as _base
+from .get import *
+from .list import *
+
+
+class CloudapiTasksAPI(
+ _base.BaseAPI,
+ CloudapiTasksGetProtocol,
+ CloudapiTasksListProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/tasks/get.py b/src/dynamix_sdk/api/cloudapi/tasks/get.py
new file mode 100644
index 0000000..e4b386b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/tasks/get.py
@@ -0,0 +1,18 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiTasksGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.TaskAPIResultNM
+):
+ pass
+
+
+class CloudapiTasksGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ audit_guid: str,
+ ) -> CloudapiTasksGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/tasks/list.py b/src/dynamix_sdk/api/cloudapi/tasks/list.py
new file mode 100644
index 0000000..174a53b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/tasks/list.py
@@ -0,0 +1,24 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiTasksListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.TaskAPIResultNM]
+ entry_count: int
+
+
+class CloudapiTasksListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ audit_guid: str | None = None,
+ completed: bool | None = None,
+ created_after_timestamp: int | None = None,
+ created_before_timestamp: int | None = None,
+ page_number: int = 1,
+ page_size: int = 20,
+ sort_by: str | None = None,
+ status: str | None = None,
+ task_guid: str | None = None,
+ ) -> CloudapiTasksListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/__init__.py b/src/dynamix_sdk/api/cloudapi/vins/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudapi/vins/_api.py b/src/dynamix_sdk/api/cloudapi/vins/_api.py
new file mode 100644
index 0000000..934d5f8
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/_api.py
@@ -0,0 +1,37 @@
+import dynamix_sdk.base as _base
+from .create_in_account import *
+from .create_in_rg import *
+from .delete import *
+from .get import *
+from .ip_list import *
+from .ip_release import *
+from .ip_reserve import *
+from .list import *
+from .list_deleted import *
+from .restore import *
+from .static_route_add import *
+from .static_route_del import *
+from .static_route_list import *
+from .vnfdev_redeploy import *
+from .vnfdev_restart import *
+
+
+class CloudapiVinsAPI(
+ _base.BaseAPI,
+ CloudapiVinsCreateInAccountProtocol,
+ CloudapiVinsCreateInRGProtocol,
+ CloudapiVinsDeleteProtocol,
+ CloudapiVinsGetProtocol,
+ CloudapiVinsIpListProtocol,
+ CloudapiVinsIpReleaseProtocol,
+ CloudapiVinsIpReserveProtocol,
+ CloudapiVinsListDeletedProtocol,
+ CloudapiVinsListProtocol,
+ CloudapiVinsRestoreProtocol,
+ CloudapiVinsStaticRouteAddProtocol,
+ CloudapiVinsStaticRouteDelProtocol,
+ CloudapiVinsStaticRouteListProtocol,
+ CloudapiVinsVnfdevRedeployProtocol,
+ CloudapiVinsVnfdevRestartProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudapi/vins/create_in_account.py b/src/dynamix_sdk/api/cloudapi/vins/create_in_account.py
new file mode 100644
index 0000000..e145ee2
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/create_in_account.py
@@ -0,0 +1,22 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsCreateInAccountResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiVinsCreateInAccountProtocol(_base.BasePostAPIFunctionProtocol):
+ def create_in_account(
+ self,
+ *,
+ name: str,
+ account_id: int,
+ description: None | str = None,
+ dns_servers: None | list[str] = None,
+ grid_id: None | int = None,
+ ip_cidr: None | str = None,
+ pre_reservation_count: int = 32,
+ routes: None | list[_nested.RouteAPIParamsNM] = None,
+ ) -> CloudapiVinsCreateInAccountResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/create_in_rg.py b/src/dynamix_sdk/api/cloudapi/vins/create_in_rg.py
new file mode 100644
index 0000000..416871c
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/create_in_rg.py
@@ -0,0 +1,23 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsCreateInRGResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudapiVinsCreateInRGProtocol(_base.BasePostAPIFunctionProtocol):
+ def create_in_rg(
+ self,
+ *,
+ name: str,
+ rg_id: int,
+ description: None | str = None,
+ dns_servers: None | list[str] = None,
+ ext_net_id: None | int = None,
+ ext_net_ip: None | str = None,
+ ip_cidr: None | str = None,
+ pre_reservation_count: None | int = None,
+ routes: None | list[_nested.RouteAPIParamsNM] = None,
+ ) -> CloudapiVinsCreateInRGResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/delete.py b/src/dynamix_sdk/api/cloudapi/vins/delete.py
new file mode 100644
index 0000000..2191e5b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/delete.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsDeleteResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsDeleteProtocol(_base.BasePostAPIFunctionProtocol):
+ def delete(
+ self,
+ *,
+ vins_id: int,
+ force: bool = False,
+ permanently: bool = False,
+ ) -> CloudapiVinsDeleteResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/get.py b/src/dynamix_sdk/api/cloudapi/vins/get.py
new file mode 100644
index 0000000..287f196
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/get.py
@@ -0,0 +1,34 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsGetResultModel(
+ _base.BaseAPIResultModel,
+ _nested.BaseVINSAPIResultNM,
+):
+ default_gw: str
+ default_qos: _nested.QOSAPIResultNM
+ description: None | str
+ grid_id: int
+ guid: int
+ lock_status: _nested.LockStatus
+ manager_id: int
+ manager_type: str
+ milestones: int
+ net_mask: int
+ pre_reservation_count: int
+ redundant: bool
+ secondary_vnfdev_id: int
+ user_managed: bool
+ vms: list[_nested.VINSVMAPIResultNM]
+ vnfdev: _nested.VNFDevAPIResultNM
+ vnfs: _nested.VNFSAPIResultNM
+
+
+class CloudapiVinsGetProtocol(_base.BasePostAPIFunctionProtocol):
+ def get(
+ self,
+ *,
+ vins_id: int,
+ ) -> CloudapiVinsGetResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/ip_list.py b/src/dynamix_sdk/api/cloudapi/vins/ip_list.py
new file mode 100644
index 0000000..67357c4
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/ip_list.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsIpListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.DHCPReservationAPIResultNM]
+ entry_count: int
+
+
+class CloudapiVinsIpListProtocol(_base.BasePostAPIFunctionProtocol):
+ def ip_list(
+ self,
+ *,
+ vins_id: int,
+ ) -> CloudapiVinsIpListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/ip_release.py b/src/dynamix_sdk/api/cloudapi/vins/ip_release.py
new file mode 100644
index 0000000..1b23daa
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/ip_release.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsIpReleaseResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsIpReleaseProtocol(_base.BasePostAPIFunctionProtocol):
+ def ip_release(
+ self,
+ *,
+ vins_id: int,
+ ip_addr: str | None = None,
+ mac: str | None = None,
+ ) -> CloudapiVinsIpReleaseResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/ip_reserve.py b/src/dynamix_sdk/api/cloudapi/vins/ip_reserve.py
new file mode 100644
index 0000000..f3581d9
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/ip_reserve.py
@@ -0,0 +1,19 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsIpReserveResultStr(_base.BaseAPIResultStr):
+ pass
+
+
+class CloudapiVinsIpReserveProtocol(_base.BasePostAPIFunctionProtocol):
+ def ip_reserve(
+ self,
+ *,
+ vins_id: int,
+ type: _nested.DHCPReservationType,
+ ip_addr: str | None = None,
+ mac: str | None = None,
+ vm_id: int | None = None,
+ ) -> CloudapiVinsIpReserveResultStr:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/list.py b/src/dynamix_sdk/api/cloudapi/vins/list.py
new file mode 100644
index 0000000..bc8d2c3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/list.py
@@ -0,0 +1,25 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.VINSForListAPIResultNM]
+ entry_count: int
+
+
+class CloudapiVinsListProtocol(_base.BasePostAPIFunctionProtocol):
+ def list(
+ self,
+ *,
+ account_id: int | None = None,
+ ext_net_ip: str | None = None,
+ id: int | None = None,
+ include_deleted: bool = False,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ rg_id: int | None = None,
+ sort_by: str | None = None,
+ vnfdev_id: int | None = None
+ ) -> CloudapiVinsListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/list_deleted.py b/src/dynamix_sdk/api/cloudapi/vins/list_deleted.py
new file mode 100644
index 0000000..1b491b0
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/list_deleted.py
@@ -0,0 +1,24 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsListDeletedResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.VINSForListDeletedAPIResultNM]
+ entry_count: int
+
+
+class CloudapiVinsListDeletedProtocol(_base.BasePostAPIFunctionProtocol):
+ def list_deleted(
+ self,
+ *,
+ account_id: int | None = None,
+ ext_net_ip: str | None = None,
+ id: int | None = None,
+ name: str | None = None,
+ page_number: int | None = None,
+ page_size: int | None = None,
+ rg_id: int | None = None,
+ sort_by: str | None = None,
+ vnfdev_id: int | None = None,
+ ) -> CloudapiVinsListDeletedResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/restore.py b/src/dynamix_sdk/api/cloudapi/vins/restore.py
new file mode 100644
index 0000000..47047f3
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/restore.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsRestoreResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsRestoreProtocol(_base.BasePostAPIFunctionProtocol):
+ def restore(
+ self,
+ *,
+ vins_id: int,
+ ) -> CloudapiVinsRestoreResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/static_route_add.py b/src/dynamix_sdk/api/cloudapi/vins/static_route_add.py
new file mode 100644
index 0000000..178e21a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/static_route_add.py
@@ -0,0 +1,17 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsStaticRouteAddResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsStaticRouteAddProtocol(_base.BasePostAPIFunctionProtocol):
+ def static_route_add(
+ self,
+ *,
+ vins_id: int,
+ dst_net_ip: str,
+ dst_net_mask: str,
+ gateway: str,
+ ) -> CloudapiVinsStaticRouteAddResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/static_route_del.py b/src/dynamix_sdk/api/cloudapi/vins/static_route_del.py
new file mode 100644
index 0000000..9ce4e08
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/static_route_del.py
@@ -0,0 +1,15 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsStaticRouteDelResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsStaticRouteDelProtocol(_base.BasePostAPIFunctionProtocol):
+ def static_route_del(
+ self,
+ *,
+ vins_id: int,
+ route_id: int,
+ ) -> CloudapiVinsStaticRouteDelResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/static_route_list.py b/src/dynamix_sdk/api/cloudapi/vins/static_route_list.py
new file mode 100644
index 0000000..72baa00
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/static_route_list.py
@@ -0,0 +1,16 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudapiVinsStaticRouteListResultModel(_base.BaseAPIResultModel):
+ data: list[_nested.RouteAPIResultNM]
+ entry_count: int
+
+
+class CloudapiVinsStaticRouteListProtocol(_base.BasePostAPIFunctionProtocol):
+ def static_route_list(
+ self,
+ *,
+ vins_id: int,
+ ) -> CloudapiVinsStaticRouteListResultModel:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/vnfdev_redeploy.py b/src/dynamix_sdk/api/cloudapi/vins/vnfdev_redeploy.py
new file mode 100644
index 0000000..216f774
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/vnfdev_redeploy.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsVnfdevRedeployResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsVnfdevRedeployProtocol(_base.BasePostAPIFunctionProtocol):
+ def vnfdev_redeploy(
+ self,
+ *,
+ vins_id: int,
+ ) -> CloudapiVinsVnfdevRedeployResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudapi/vins/vnfdev_restart.py b/src/dynamix_sdk/api/cloudapi/vins/vnfdev_restart.py
new file mode 100644
index 0000000..593285b
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudapi/vins/vnfdev_restart.py
@@ -0,0 +1,14 @@
+import dynamix_sdk.base as _base
+
+
+class CloudapiVinsVnfdevRestartResultBool(_base.BaseAPIResultBool):
+ pass
+
+
+class CloudapiVinsVnfdevRestartProtocol(_base.BasePostAPIFunctionProtocol):
+ def vnfdev_restart(
+ self,
+ *,
+ vins_id: int,
+ ) -> CloudapiVinsVnfdevRestartResultBool:
+ ...
diff --git a/src/dynamix_sdk/api/cloudbroker/__init__.py b/src/dynamix_sdk/api/cloudbroker/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudbroker/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudbroker/_api.py b/src/dynamix_sdk/api/cloudbroker/_api.py
new file mode 100644
index 0000000..11fb30d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudbroker/_api.py
@@ -0,0 +1,6 @@
+import dynamix_sdk.base as _base
+from .account import *
+
+
+class CloudbrokerAPI(_base.BaseAPI):
+ account: CloudbrokerAccountAPI
diff --git a/src/dynamix_sdk/api/cloudbroker/account/__init__.py b/src/dynamix_sdk/api/cloudbroker/account/__init__.py
new file mode 100644
index 0000000..24a9928
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudbroker/account/__init__.py
@@ -0,0 +1 @@
+from ._api import *
diff --git a/src/dynamix_sdk/api/cloudbroker/account/_api.py b/src/dynamix_sdk/api/cloudbroker/account/_api.py
new file mode 100644
index 0000000..0ac481d
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudbroker/account/_api.py
@@ -0,0 +1,9 @@
+import dynamix_sdk.base as _base
+from .create import *
+
+
+class CloudbrokerAccountAPI(
+ _base.BaseAPI,
+ CloudbrokerAccountCreateProtocol,
+):
+ pass
diff --git a/src/dynamix_sdk/api/cloudbroker/account/create.py b/src/dynamix_sdk/api/cloudbroker/account/create.py
new file mode 100644
index 0000000..12faa6a
--- /dev/null
+++ b/src/dynamix_sdk/api/cloudbroker/account/create.py
@@ -0,0 +1,26 @@
+import dynamix_sdk.base as _base
+import dynamix_sdk.api._nested as _nested
+
+
+class CloudbrokerAccountCreateResultInt(_base.BaseAPIResultInt):
+ pass
+
+
+class CloudbrokerAccountCreateProtocol(_base.BasePostAPIFunctionProtocol):
+ def create(
+ self,
+ *,
+ name: str,
+ user_name: str,
+ vm_features: None | list[_nested.VMFeature] = None,
+ cpu_count_quota: None | int = None,
+ email_address: None | str = None,
+ ext_traffic_quota: None | int = None,
+ gpu_count_quota: None | int = None,
+ public_ip_count_quota: None | int = None,
+ ram_size_quota_mb: None | int = None,
+ send_access_emails: bool = False,
+ storage_size_quota_gb: None | int = None,
+ uniq_pools: None | list[str] = None,
+ ) -> CloudbrokerAccountCreateResultInt:
+ ...
diff --git a/src/dynamix_sdk/api/name_mapping.yml b/src/dynamix_sdk/api/name_mapping.yml
index dd8684d..4f665e0 100644
--- a/src/dynamix_sdk/api/name_mapping.yml
+++ b/src/dynamix_sdk/api/name_mapping.yml
@@ -1,8 +1,14 @@
# sdk_name[__model_class_name]: dynamix_name
+acc_lvl_vins_ids__CloudapiAccountGetResultModel: vins
access_type: accesstype
access_type__AccessAPIResultNM: right
+access_type__CloudapiAccountListDeletedParamsModel: acl
+access_type__CloudapiAccountListParamsModel: acl
+access_type__CloudapiRgAccessGrantParamsModel: right
account: accountAcl
+account__VMACLForComputeUserListAPIResultNM: accountACL
account_id: accountId
+account_id__DHCPReservationAPIResultNM: account_id
account_name: accountName
acl: acl
acl__CloudapiComputeGetResultModel: ACL
@@ -10,186 +16,456 @@ admin: admin
affinity_label: affinityLabel
affinity_rules: affinityRules
affinity_weight: affinityWeight
+algorithm: algorithm
anti_affinity_rules: antiAffinityRules
arch: arch
+arch__BaseImageAPIResultNM: architecture
+audit_guid: auditId
+auth_broker: authBroker
auto_start: autoStart
-boot_disk_size: bootdiskSize
-boot_disk_size__CloudapiKvmx86CreateParamsModel: bootDisk
+backend_ha_ip_addr: backendHAIP
+backend_ip_addr: backendIp
+backend_ip_addr__CloudapiLbListDeletedParamsModel: backIp
+backend_ip_addr__CloudapiLbListParamsModel: backIp
+backend_name: backend
+backend_name__CloudapiLbBackendCreateParamsModel: backendName
+backend_name__CloudapiLbBackendDeleteParamsModel: backendName
+backend_name__CloudapiLbBackendServerAddParamsModel: backendName
+backend_name__CloudapiLbBackendServerDeleteParamsModel: backendName
+backend_name__CloudapiLbBackendServerUpdateParamsModel: backendName
+backend_name__CloudapiLbBackendUpdateParamsModel: backendName
+backends: backends
+base_domain: baseDomain
+bindings: bindings
+boot_cdrom_image_id: altBootId
+boot_disk_size_gb: bootdiskSize
+boot_disk_size_gb__CloudapiBserviceGroupAddParamsModel: disk
+boot_disk_size_gb__CloudapiBserviceGroupGetResultModel: disk
+boot_disk_size_gb__CloudapiBserviceGroupUpdateParamsModel: disk
+boot_disk_size_gb__CloudapiComputeRedeployParamsModel: diskSize
+boot_disk_size_gb__CloudapiKvmx86CreateBlankParamsModel: bootDisk
+boot_disk_size_gb__CloudapiKvmx86CreateParamsModel: bootDisk
+boot_loader_type: imagetype
+boot_mode: bootType
+boot_mode__CloudapiImageCreateParamsModel: boottype
boot_order: bootOrder
boot_partition: bootPartition
+bootable: bootable
+bservice_id: serviceId
+bsgroup_id: compgroupId
+bsgroup_name: compgroupName
+bsgroup_role: compgroupRole
bus_number: bus_number
-cd_image_id: cdImageId
+can_be_deleted: canBeDeleted
+capabilities: capabilities
+cd_presented_to: cdPresentedTo
+cdrom: cdrom
+cdrom_image_id: cdromId
+cdrom_image_id__BaseVMAPIResultNM: cdImageId
+check: check
+check_ips: checkIps
chipset: chipset
ci_user_data: userdata
+ci_user_data__CloudapiBserviceGroupAddParamsModel: userData
+ckey: _ckey
+clear_uniq_pools: clearUniqPools
+client_ids: clientIds
+client_names: clientNames
+client_type: clientType
clone_ids: clones
clone_reference: cloneReference
-compute: computeAcl
-compute_ci_id: computeciId
-compute_features: computeFeatures
-compute_id: computeId
+company: company
+company_url: companyurl
+completed: completed
+config: config
+config_saved: configSaved
conn_id: connId
conn_type: connType
-cpu: cpu
-cpu__CloudapiComputeGetResultModel: cpus
-cpu__TenantQuotasAPIResultNM: CU_C
-cpu__VMAPIResultNM: cpus
+consistency: consistency
+count_change_mode__CloudapiBserviceGroupResizeParamsModel: mode
cpu_allocation_parameter: cpu_allocation_parameter
cpu_allocation_ratio: cpu_allocation_ratio
+cpu_count: cpu
+cpu_count__BaseVMAPIResultNM: cpus
+cpu_count__TenantQuotasAPIResultNM: CU_C
+cpu_count_quota: maxCPUCapacity
+cpu_count_total: cpuTotal
cpu_pin: cpupin
-cpu_quota: maxCPUCapacity
created_after_timestamp: createdAfter
+created_after_timestamp__CloudapiTasksListParamsModel: updateTimeAt
created_before_timestamp: createdBefore
+created_before_timestamp__CloudapiTasksListParamsModel: updateTimeTo
created_by: createdBy
created_timestamp: createdTime
+created_timestamp__TaskAPIResultNM: updateTime
custom_fields: customFields
+custom_pre_cfg: customPrecfg
data: data
data_disks: dataDisks
-default_gw: defGw
+data_disks_change_mode__CloudapiComputeRedeployParamsModel: dataDisks
+dc_location: DCLocation
+deactivation_timestamp: deactivationTime
+default: default
+default_gw: defaultGW
+default_gw__BaseInterfaceAPIResultNM: defGw
+default_gw__DHCPVNFConfigAPIResultNM: default_gw
+default_gw__GWVNFConfigAPIResultNM: default_gw
default_net_id: def_net_id
default_net_type: def_net_type
default_net_type__CloudapiRgCreateParamsModel: def_net
+default_qos: defaultQos
deleted_by: deletedBy
deleted_timestamp: deletedTime
description: desc
+description__CloudapiDisksCreateParamsModel: description
+description__CloudapiStackGetResultModel: descr
destruction_timestamp: destructionTime
+detach: detach
detach_disks: detachDisks
+detailed: detailed
+device_id: devId
+device_name: devicename
devices: devices
+dhcp: DHCP
+dhcp_excluded_reservations: excluded
+dhcp_reservations__CloudapiExtnetGetResultModel: reservations
dirty: dirty
disk_id: diskId
+disk_ids: diskIds
+disk_max_size_gb: diskMaxSize
disk_path: diskPath
-disk_size: CU_D
+disk_size_gb: CU_D
+disk_size_gb__CloudapiComputeDiskAddParamsModel: size
+disk_size_gb__CloudapiComputeDiskResizeParamsModel: size
+disk_size_gb__CloudapiDisksResize2ParamsModel: size
+disk_size_total_gb__CloudapiBserviceGetResultModel: diskTotal
+disk_type__CloudapiComputeDiskAddParamsModel: diskType
+disk_type__CloudapiComputeDiskAttachParamsModel: diskType
disks: disks
+display_name: displayname
+dns_servers: dns
+dns_servers__CloudapiVinsCreateInAccountParamsModel: dnsList
+dns_servers__CloudapiVinsCreateInRGParamsModel: dnsList
+domain_name: domainname
+downinter: downinter
+download_password: passwordDL
+download_url: url
+download_user_name: usernameDL
+dp_api_user: dpApiUser
driver: driver
+drivers: drivers
+dst_net_ip: destination
+dst_net_mask__CloudapiVinsStaticRouteAddParamsModel: netmask
+dst_net_mask__RouteAPIParamsNM: netmask
+dst_net_mask__RouteAPIResultNM: netmask
egress_rate: eRate
+email_address: emailaddress
email_addresses: emailaddresses
enabled: enabled
entry_count: entryCount
+error: error
event_idx: event_idx
explicit: explicit
-ext_net_id: extNetId
+ext_net_id: extnetId
+ext_net_id__CloudapiComputeListParamsModel: extNetId
+ext_net_id__CloudapiExtnetGetParamsModel: net_id
+ext_net_id__CloudapiRgCreateParamsModel: extNetId
+ext_net_id__CloudapiVinsCreateInRGParamsModel: extNetId
+ext_net_id__GWVNFConfigAPIResultNM: ext_net_id
ext_net_ip: extIp
+ext_net_ip__GWVNFConfigAPIResultNM: ext_net_ip
+ext_net_ip__VINSForListAPIResultNM: externalIP
+ext_net_ip__VINSForListDeletedAPIResultNM: externalIP
+ext_net_mask: ext_netmask
ext_net_name: extNetName
ext_traffic: CU_NP
ext_traffic_quota: maxNetworkPeerTransfer
+extnet_ids: extnets
+fall: fall
+flag: flag
flip_group_id: flipgroupId
-gpu: gpu_units
-gpu_ids: vgpus
+force: force
+force_stop: forceStop
+free_ip_count: freeIPs
+free_ip_count__CloudapiExtnetGetResultModel: free_ips
+frontend_ha_ip_addr: frontendHAIP
+frontend_ip_addr: frontendIp
+frontend_ip_addr__CloudapiLbListDeletedParamsModel: frontIp
+frontend_ip_addr__CloudapiLbListParamsModel: frontIp
+frontends: frontends
+gateway: gateway
+gpu_count: gpu_units
+gpu_count_quota__CloudapiAccountUpdateParamsModel: gpu_units
+gpu_count_quota__CloudbrokerAccountCreateParamsModel: gpu_units
grid_id: gid
+group_ids__BServiceForListAPIResultNM: groups
+groups: groups
guid: guid
+gw: GW
+ha_mode: HAmode
+highly_available: highlyAvailable
+history: history
+hostname: hostname
+hot_resize: hotResize
+hot_resize__CloudapiImageCreateParamsModel: hotresize
hp_backed: hpBacked
id: id
+id__CloudapiAccountListDeletedParamsModel: by_id
+id__CloudapiAccountListParamsModel: by_id
+id__CloudapiBserviceListParamsModel: by_id
id__CloudapiComputeListParamsModel: by_id
+id__CloudapiDisksListDeletedParamsModel: by_id
+id__CloudapiDisksListParamsModel: by_id
+id__CloudapiDisksListUnattachedParamsModel: by_id
+id__CloudapiExtnetListParamsModel: by_id
+id__CloudapiFlipgroupListParamsModel: by_id
+id__CloudapiImageListParamsModel: by_id
+id__CloudapiLbListDeletedParamsModel: by_id
+id__CloudapiLbListParamsModel: by_id
+id__CloudapiLocationsListParamsModel: by_id
id__CloudapiRgListParamsModel: by_id
+id__CloudapiStackListParamsModel: by_id
+id__CloudapiVinsListDeletedParamsModel: by_id
+id__CloudapiVinsListParamsModel: by_id
+iface01_name: iface01
+iface02_name: iface02
image_id: imageId
+image_ids: images
image_name: imageName
-images: images
include_deleted: includedeleted
+include_deleted__CloudapiVinsListParamsModel: includeDeleted
ingress_burst: inBurst
ingress_rate: inRate
+inter: inter
interfaces: interfaces
io_tune: iotune
ioeventfd: ioeventfd
-ip_addr: ipAddress
-ip_addr__InterfaceAPIParamsNM: ipAddr
+iops: iops
+ip_addr: ipAddr
+ip_addr__BaseFlipGroupAPIResultNM: ip
+ip_addr__BaseInterfaceAPIResultNM: ipAddress
+ip_addr__CloudapiComputeListParamsModel: ipAddress
+ip_addr__CloudapiFlipgroupCreateParamsModel: ip
+ip_addr__CloudapiFlipgroupListParamsModel: byIp
+ip_addr__CloudapiLbBackendServerAddParamsModel: address
+ip_addr__CloudapiLbBackendServerUpdateParamsModel: address
+ip_addr__DHCPReservationAPIResultNM: ip
+ip_addr__LBFrontendBindingAPIResultNM: address
+ip_addr__LBServerAPIResultNM: address
+ip_addr__VNFDevMGMTConfigAPIResultNM: ipaddr
+ip_addresses: ipAddresses
ip_cidr: ipcidr
+ip_pool_end: ip_end
+ip_pool_start: ip_start
ipa_type: ipaType
iqn: iqn
key: key
label: label
+last_modified: lastModified
+lb_id: lbId
+lease_time: lease
libvirt_settings: libvirtSettings
+link_to: linkTo
listen_ssh: listenSsh
+local_ip: localIp
+local_port: localPort
+local_port__CloudapiComputePfwAddParamsModel: localBasePort
+local_port__CloudapiComputePfwDelParamsModel: localBasePort
+location_code: locationCode
lock_status: lockStatus
+log: log
login: login
mac: mac
manager_id: managerId
manager_type: managerType
+maxconn: maxconn
+maxqueue: maxqueue
+mem_allocation_ratio: mem_allocation_ratio
+mgmt: mgmt
+mgmt_ip: mgmtIp
migration_job: migrationjob
milestones: milestones
mode: mode
mtu: mtu
name: name
+name__CloudapiComputeDiskAddParamsModel: diskName
name__DiskAPIParamsNM: diskName
+nat: NAT
natable_vins_id: natableVinsId
natable_vins_ip: natableVinsIp
natable_vins_name: natableVinsName
natable_vins_network: natableVinsNetwork
natable_vins_network_name: natableVinsNetworkName
need_reboot: needReboot
+net_cidr__CloudapiFlipgroupGetResultModel: network
net_id: netId
-net_mask: netMask
+net_id__LBNodeAPIResultNM: networkId
+net_ip: network
+net_ip__CloudapiExtnetListParamsModel: network
+net_mask: netmask
+net_mask__BaseInterfaceAPIResultNM: netMask
+net_mask__CloudapiExtnetGetResultModel: prefix
+net_mask__CloudapiVinsGetResultModel: netMask
net_type: netType
+network_id: networkId
+network_interface_naming: networkInterfaceNaming
node_id: nodeId
numa_affinity: numaAffinity
numa_node_id: numaNodeId
order: order
+os_password__CloudapiImageCreateParamsModel: password
+os_password__CloudapiImageGetResultModel: password
+os_user_name__BaseImageAPIResultNM: username
+os_user_name__CloudapiImageCreateParamsModel: username
os_users: osUsers
+other_node: otherNode
+other_node_indirect: otherNodeIndirect
+other_node_indirect_soft: otherNodeIndirectSoft
+other_node_soft: otherNodeSoft
+ovs_bridge: ovsBridge
owner: owner
+owner_id: ownerId
+owner_type: ownerType
page_number: page
page_size: size
params: params
parent_id: parentId
+parent_ids: parents
+parent_service_id: parentSrvId
+parent_service_type: parentSrvType
+part_of_k8s: partK8s
password: password
-password__DiskAPIResultNM: passwd
+password__DiskForCAComputeGetAPIResultNM: passwd
+password__DiskForListUnattachedAPIResultNM: passwd
pci_slot: pciSlot
permanently: permanently
pinned: pinned
policy: policy
pool_id: poolId
+pools: pools
+port: port
+pre_reservation_count: preReservationsNum
preferred_cpu_cores: preferredCpu
present_to: presentTo
+primary: primary
+primary_node: primaryNode
+primary_vnfdev_id: priVnfDevId
+protocol: protocol
+protocol__CloudapiComputePfwAddParamsModel: proto
+protocol__CloudapiComputePfwDelParamsModel: proto
+provider_name: provider_name
pub_key: pubkey
-public_ip: CU_I
-public_ip_quota: maxNumPublicIP
+public: public
+public_ip_count: CU_I
+public_ip_count_quota: maxNumPublicIP
+public_port_end: publicPortEnd
+public_port_start: publicPortStart
+pure_virtual: pureVirtual
+purge_attempt_count: purgeAttempts
purge_timestamp: purgeTime
qos: qos
queues: queues
quotas: resourceLimits
-ram: ram
-ram__TenantQuotasAPIResultNM: CU_M
-ram_quota: maxMemoryCapacity
+ram_size_mb: ram
+ram_size_mb__TenantQuotasAPIResultNM: CU_M
+ram_size_quota_mb: maxMemoryCapacity
+ram_size_total_mb: ramTotal
read_bytes_sec: read_bytes_sec
read_bytes_sec_max: read_bytes_sec_max
read_iops_sec: read_iops_sec
read_iops_sec_max: read_iops_sec_max
reality_device_number: realityDeviceNumber
+recursively__CloudapiRgDeleteParamsModel: force
+redundant: redundant
reference_id: referenceId
register_computes: registerComputes
registered: registered
-replication_dict: replication
+replication: replication
res_id: resId
res_name: resName
+rescue_cd: rescuecd
+reservations: reservations
reserved_cpu_cores: reservedNodeCpus
resource_types: resourceTypes
+resources: resources
+result: result
rg: rgAcl
+rg__VMACLForComputeUserListAPIResultNM: rgACL
rg_id: rgId
rg_name: rgName
+rise: rise
role: role
roles: roles
+route_id: routeId
+routes: routes
+rule_id: ruleId
+rules: rules
rx_queue_size: rx_queue_size
+same_node: sameNode
+same_node_soft: sameNodeSoft
+secondary_node: secondaryNode
+secondary_vnfdev_id: secVnfDevId
secret: secret
self_volume_id: selfVolumeId
+send_access_emails: sendAccessEmails
sep_id: sepId
+sep_id__CloudapiDisksCreateParamsModel: sep_id
+sep_name: sepName
sep_pool_name: pool
-shareable: shareable
-size__DiskAPIParamsNM: size
+sep_pool_name__CloudapiBserviceGroupAddParamsModel: sepPool
+sep_pool_name__CloudapiBserviceGroupGetResultModel: poolName
+sep_pool_name__CloudapiImageCreateParamsModel: poolName
+sep_type: sepType
+seq_no: seqNo
+server_default_settings: serverDefaultSettings
+server_name: serverName
+server_settings: serverSettings
+servers: servers
+shared: shareable
+shared__CloudapiDisksListDeletedParamsModel: shared
+shared__CloudapiDisksListParamsModel: shared
+shared_with: sharedWith
+show_all: showAll
+size_gb__BaseImageAPIResultNM: size
+size_gb__CloudapiDisksCreateParamsModel: size
+size_gb__CloudapiImageListParamsModel: imageSize
+size_gb__DiskAPIParamsNM: size
size_iops_sec: size_iops_sec
-size_max: sizeMax
+size_max_gb: sizeMax
size_used: sizeUsed
+slowstart: slowstart
+snapshot_id: snapshotId
+snapshot_name: snapshotName
snapshot_set_guid: snapSetGuid
snapshot_set_timestamp: snapSetTime
snapshot_sets: snapSets
+snapshot_timestamp: snapshotTimestamp
snapshots: snapshots
sort_by: sortBy
+ssh_key: sshkey
+ssh_key__CloudapiBserviceCreateParamsModel: sshKey
+ssh_key__CloudapiBserviceGetResultModel: sshKey
+ssh_user: sshUser
+stack_id: stackId
+stage: stage
start: start
+start__CloudapiComputeRedeployParamsModel: autoStart
+start_timeout: timeoutStart
+started: started
stateless_sep_id: statelessSepId
stateless_sep_type: statelessSepType
status: status
-storage: CU_DM
+stopped: stopped
storage_id: storageId
-storage_quota: maxVDiskCapacity
+storage_size_gb: CU_DM
+storage_size_quota_gb: maxVDiskCapacity
+sysctl_params: sysctlParams
+system: system
system_name: IS
tags: tags
target: target
+target_image_id: targetId
+task_guid: taskId
tech_status: techStatus
timestamp: timestamp
topology: topology
@@ -201,22 +477,71 @@ total_iops_sec_max: total_iops_sec_max
tx_mode: txmode
tx_queue_size: tx_queue_size
type: type
+type__CloudapiImageListParamsModel: typeImage
+types: types
+unc_path: UNCPath
uniq_pools: uniqPools
updated_by: updatedBy
updated_timestamp: updatedTime
+user: user
user_group_id: userGroupId
user_id: userId
user_managed: userManaged
user_name: username
+user_name__CloudapiComputeUserGrantParamsModel: userName
+user_name__CloudapiComputeUserRevokeParamsModel: userName
+user_name__CloudapiComputeUserUpdateParamsModel: userName
+user_name__CloudapiRgAccessGrantParamsModel: user
+user_name__CloudapiRgAccessRevokeParamsModel: user
+uuid: uuid
+valid: valid
value: value
+version: version
+vgpus: vgpus
vins_count: vinsConnected
+vins_count__CloudapiAccountGetResultModel: vinses
+vins_id: vinsId
vins_ids: vins
+vins_ids__CloudapiBserviceGroupAddParamsModel: vinses
+vins_ids__CloudapiBserviceGroupGetResultModel: vinses
+vins_ids__CloudapiBserviceGroupUpdateVinsParamsModel: vinses
+vins_name: vinsName
+virtual: virtual
virtual_image_id: virtualImageId
+virtual_image_id__CloudapiImageLinkParamsModel: imageId
virtual_image_name: virtualImageName
+vlan_id: vlanId
+vm: computeAcl
+vm__VMACLForComputeUserListAPIResultNM: computeACL
+vm_ci_id: computeciId
+vm_count__BServiceGroupAPIResultNM: computes
+vm_count__CloudapiBserviceGroupAddParamsModel: count
+vm_count__CloudapiBserviceGroupResizeParamsModel: count
+vm_counts: computes
+vm_features: computeFeatures
+vm_id: computeId
+vm_id__DHCPReservationAPIResultNM: vmId
+vm_id__DiskForListAndListDeletedAPIResultNM: machineId
+vm_id__DiskForListUnattachedAPIResultNM: vmid
+vm_id__NATRuleAPIResultNM: vmId
vm_ids: vms
+vm_ids__RouteAPIResultNM: computeIds
+vm_name__DiskForListAndListDeletedAPIResultNM: machineName
+vms__CloudapiBserviceGetResultModel: computes
+vms__CloudapiBserviceGroupGetResultModel: computes
+vms__CloudapiDisksGetResultModel: computes
+vms__CloudapiVinsGetResultModel: computes
+vms__DiskForListAndListDeletedAPIResultNM: computes
+vnc_password: vncPasswd
vnf_ids: vnfs
-vns_password: vncPasswd
+vnf_ids_by_type__CloudapiExtnetGetResultModel: vnfs
+vnfdev: VNFDev
+vnfdev_id: vnfdevId
+vnfdev_id__CloudapiExtnetListParamsModel: vnfDevId
+vnfs__CloudapiVinsGetResultModel: vnfs
volume_id: volumeId
+vxlan_id: vxlanId
+weight: weight
without_boot_disk: withoutBootDisk
write_bytes_sec: write_bytes_sec
write_bytes_sec_max: write_bytes_sec_max
diff --git a/src/dynamix_sdk/api/path_mapping.yml b/src/dynamix_sdk/api/path_mapping.yml
index 8ef42fa..8bb019f 100644
--- a/src/dynamix_sdk/api/path_mapping.yml
+++ b/src/dynamix_sdk/api/path_mapping.yml
@@ -1,4 +1,83 @@
# sdk_path_part: dynamix_path_part
+access_grant: accessGrant
+access_revoke: accessRevoke
add_user: addUser
+affinity_label_remove: affinityLabelRemove
+affinity_label_set: affinityLabelSet
+affinity_relations: affinityRelations
+affinity_rule_add: affinityRuleAdd
+affinity_rule_remove: affinityRuleRemove
+affinity_rules_clear: affinityRulesClear
+anti_affinity_rule_add: antiAffinityRuleAdd
+anti_affinity_rule_remove: antiAffinityRuleRemove
+anti_affinity_rules_clear: antiAffinityRulesClear
+backend_create: backendCreate
+backend_delete: backendDelete
+backend_server_add: backendServerAdd
+backend_server_delete: backendServerDelete
+backend_server_update: backendServerUpdate
+backend_update: backendUpdate
+cd_eject: cdEject
+cd_insert: cdInsert
+change_ip: changeIp
+compute_add: computeAdd
+compute_remove: computeRemove
+create_blank: createBlank
+create_in_account: createInAccount
+create_in_rg: createInRG
+create_virtual: createVirtual
+delete_custom_fields: deleteCustomFields
+delete_disks: deleteDisks
delete_user: deleteUser
+disk_add: diskAdd
+disk_attach: diskAttach
+disk_del: diskDel
+disk_detach: diskDetach
+disk_resize: diskResize
+get_default: getDefault
+get_url: getUrl
+group_add: groupAdd
+group_compute_remove: groupComputeRemove
+group_get: groupGet
+group_parent_add: groupParentAdd
+group_parent_remove: groupParentRemove
+group_remove: groupRemove
+group_resize: groupResize
+group_start: groupStart
+group_stop: groupStop
+group_update: groupUpdate
+group_update_extnet: groupUpdateExtnet
+group_update_vins: groupUpdateVins
+ip_list: ipList
+ip_release: ipRelease
+ip_reserve: ipReserve
+limit_io: limitIO
+list_deleted: listDeleted
+list_types: listTypes
+list_unattached: listUnattached
+net_attach: netAttach
+net_detach: netDetach
+pfw_add: pfwAdd
+pfw_del: pfwDel
+pfw_list: pfwList
+pin_to_stack: pinToStack
+remove_def_net: removeDefNet
+set_custom_fields: setCustomFields
+set_def_net: setDefNet
+snapshot_create: snapshotCreate
+snapshot_delete: snapshotDelete
+snapshot_list: snapshotList
+snapshot_rollback: snapshotRollback
+static_route_add: staticRouteAdd
+static_route_del: staticRouteDel
+static_route_list: staticRouteList
+tag_add: tagAdd
+tag_remove: tagRemove
+unpin_from_stack: unpinFromStack
update_user: updateUser
+user_grant: userGrant
+user_list: userList
+user_revoke: userRevoke
+user_update: userUpdate
+vnfdev_redeploy: vnfdevRedeploy
+vnfdev_restart: vnfdevRestart
diff --git a/src/dynamix_sdk/base.py b/src/dynamix_sdk/base.py
index b37f252..9864e49 100644
--- a/src/dynamix_sdk/base.py
+++ b/src/dynamix_sdk/base.py
@@ -6,8 +6,16 @@ import inspect
import os
import re
import time
-from types import GenericAlias, UnionType
-from typing import Any, Literal, ParamSpec, Protocol, TypeVar, get_args
+from types import GenericAlias, MethodType, UnionType
+from typing import (
+ Any,
+ Literal,
+ ParamSpec,
+ Protocol,
+ TypeVar,
+ get_args,
+ runtime_checkable,
+)
import requests
from pydantic import (
@@ -77,6 +85,7 @@ if len(common_mappings_values) > len(set(common_mappings_values)):
)
+@runtime_checkable
class BaseAPIFunctionProtocol(Protocol):
pass
@@ -89,6 +98,12 @@ class BaseGetAPIFunctionProtocol(BaseAPIFunctionProtocol):
pass
+base_proto_to_http_method: dict[type[BaseAPIFunctionProtocol], HTTPMethod] = {
+ BasePostAPIFunctionProtocol: HTTPMethod.POST,
+ BaseGetAPIFunctionProtocol: HTTPMethod.GET,
+}
+
+
class BaseModel(PydanticBaseModel, ABC):
@staticmethod
def _get_datetime_from_timestamp(timestamp: float) -> None | datetime:
@@ -109,18 +124,7 @@ class BaseAPIParamsModel(BaseModelWithFrozenStrictExtraForbid, ABC):
class BaseAPIParamsNestedModel(BaseModelWithFrozenStrictExtraForbid, ABC):
- def __init_subclass__(
- cls,
- *args: tuple[Any],
- **kwargs: dict[str, Any],
- ) -> None:
- super().__init_subclass__(*args, **kwargs)
-
- postfix = 'APIParamsNM'
- if not cls.__qualname__.endswith(postfix):
- raise ValueError(
- f'Name of {cls} must end with {postfix}.',
- )
+ pass
@dataclass
@@ -194,16 +198,58 @@ class BaseAPIResultBool(BaseAPIResultBasicType, ABC):
return f'{self.__class__.__qualname__}: {self.value}'
def __new__(cls, value: bool, context: APIResultContext):
- if not isinstance(value, bool):
+ if isinstance(value, bool):
+ _value = value
+ elif value is None: # BDX-8379
+ _value = True
+ else:
raise TypeError
- instance = super().__new__(cls, value, context)
- instance.value = value
+ instance = super().__new__(cls, _value, context)
+ instance.value = _value
instance._api_params = context.api_params
instance._http_response = context.http_response
instance._frozen = True
return instance
+def get_alias(
+ field_name: str,
+ model_cls: type[BaseModel],
+ name_mapping_dict: dict[str, str],
+) -> str:
+ if field_name in model_cls.__annotations__.keys():
+ individual_alias = name_mapping_dict.get(
+ f'{field_name}__{model_cls.__qualname__}',
+ )
+ if individual_alias:
+ return individual_alias
+
+ if field_name in name_mapping_dict:
+ return name_mapping_dict[field_name]
+
+ raise KeyError(
+ f'Mapping for attr {model_cls.__qualname__}.{field_name}'
+ f' not found in name mapping dictionary.'
+ )
+
+ for base_cls in model_cls.__bases__:
+ if not issubclass(base_cls, BaseModel):
+ continue
+
+ if field_name not in base_cls.model_fields.keys():
+ continue
+
+ return get_alias(
+ field_name=field_name,
+ model_cls=base_cls,
+ name_mapping_dict=name_mapping_dict,
+ )
+
+ raise NameError(
+ f'Field {field_name} not found in model {model_cls.__qualname__}.'
+ )
+
+
def set_alias_gen(
model_cls: type[BaseModel],
alias_type: Literal['validation', 'serialization'],
@@ -213,11 +259,11 @@ def set_alias_gen(
return
def get_model_classes_from_annotation(
- annotation: type[Any] | None,
+ annotation: Any,
classes: list[type[BaseModel]] | None = None,
):
_classes = classes or []
- if annotation:
+ if annotation and annotation is not Any:
if isinstance(annotation, (UnionType, GenericAlias)):
for cls in get_args(annotation):
_classes += get_model_classes_from_annotation(cls)
@@ -234,19 +280,11 @@ def set_alias_gen(
)
def alias_gen(field_name: str):
- individual_alias = name_mapping_dict.get(
- f'{field_name}__{model_cls.__qualname__}',
+ return get_alias(
+ field_name=field_name,
+ model_cls=model_cls,
+ name_mapping_dict=name_mapping_dict,
)
- if individual_alias:
- return individual_alias
- else:
- if field_name in name_mapping_dict:
- return name_mapping_dict[field_name]
- else:
- raise KeyError(
- f'{field_name} not found in name mapping dictionary.'
- f' Class model: {model_cls.__name__}.'
- )
kwargs = {
f'{alias_type}_alias': alias_gen
@@ -259,6 +297,37 @@ def set_alias_gen(
params_model_classes: dict[str, type[BaseAPIParamsModel]] = {}
+def gen_api_params_cls_name(api_path: str):
+ return gen_cls_name_from_url_path(
+ url_path=re.sub(r'[\[\]]', '', api_path),
+ postfix='ParamsModel',
+ )
+
+
+def create_api_params_cls(
+ cls_name: str,
+ module_name: str,
+ protocol_method: Callable
+):
+ field_definitions = {}
+ params = inspect.signature(protocol_method).parameters.values()
+ inspect_empty = inspect.Parameter.empty
+ for param in params:
+ if param.name == 'self':
+ continue
+
+ field_definitions[param.name] = (
+ param.annotation,
+ ... if param.default is inspect_empty else param.default,
+ )
+ return create_model(
+ cls_name,
+ __base__=BaseAPIParamsModel,
+ __module__=module_name,
+ **field_definitions,
+ )
+
+
APIParamsP = ParamSpec('APIParamsP')
APIResultT = TypeVar(
'APIResultT',
@@ -334,6 +403,9 @@ class BaseAPI(ABC):
)
api_result_cls: type[APIResultT] = return_type
+ if not isinstance(protocol_method, MethodType):
+ raise TypeError
+
def api_function(
*args: APIParamsP.args,
**kwargs: APIParamsP.kwargs,
@@ -345,11 +417,8 @@ class BaseAPI(ABC):
else:
raise ValueError
- api_params_cls_name = gen_cls_name_from_url_path(
- url_path=re.sub(r'[\[\]]', '', api_path),
- postfix=BaseAPIParamsModel.__qualname__.removeprefix(
- 'BaseAPI'
- ),
+ api_params_cls_name = gen_api_params_cls_name(
+ api_path=api_path,
)
api_params_cls = params_model_classes.get(
@@ -357,20 +426,10 @@ class BaseAPI(ABC):
None,
)
if not api_params_cls:
- field_definitions = {}
- parameters = inspect.signature(protocol_method).parameters
- inspect_empty = inspect.Parameter.empty
- for p in parameters.values():
- field_definitions[p.name] = (
- p.annotation,
- ... if p.default is inspect_empty else p.default,
- )
-
- api_params_cls = create_model(
- api_params_cls_name,
- __base__=BaseAPIParamsModel,
- __module__=api_result_cls.__module__,
- **field_definitions,
+ api_params_cls = create_api_params_cls(
+ cls_name=api_params_cls_name,
+ module_name=api_result_cls.__module__,
+ protocol_method=protocol_method,
)
params_model_classes[api_params_cls_name] = api_params_cls
@@ -394,13 +453,20 @@ class BaseAPI(ABC):
)
for api_mixin_cls in self.__class__.__bases__[1:]:
- if hasattr(api_mixin_cls, protocol_method.__name__):
- if issubclass(api_mixin_cls, BasePostAPIFunctionProtocol):
- http_method = HTTPMethod.POST
- break
- elif issubclass(api_mixin_cls, BaseGetAPIFunctionProtocol):
- http_method = HTTPMethod.GET
- break
+ if not hasattr(api_mixin_cls, protocol_method.__name__):
+ continue
+ proto_cls_base = api_mixin_cls.__base__
+ if (
+ not proto_cls_base
+ or not issubclass(proto_cls_base, BaseAPIFunctionProtocol)
+ ):
+ raise TypeError(
+ f'Class {api_mixin_cls.__qualname__} must have'
+ f' {BaseAPIFunctionProtocol.__qualname__}'
+ f' as parent class.'
+ )
+ http_method = base_proto_to_http_method[proto_cls_base]
+ break
else:
raise RuntimeError
diff --git a/src/dynamix_sdk/types.py b/src/dynamix_sdk/types.py
index d3b0405..50c4c49 100644
--- a/src/dynamix_sdk/types.py
+++ b/src/dynamix_sdk/types.py
@@ -1,10 +1,13 @@
from .base import (
BaseAPIParamsModel,
BaseAPIParamsNestedModel,
+ BaseAPIResult,
BaseAPIResultModel,
BaseAPIResultNestedModel,
BaseAPIResultStr,
BaseAPIResultInt,
BaseAPIResultBool,
+ BaseAPI,
+ BaseModel,
)
from .api import *
diff --git a/src/dynamix_sdk/utils.py b/src/dynamix_sdk/utils.py
index 718f7bd..8f8e49d 100644
--- a/src/dynamix_sdk/utils.py
+++ b/src/dynamix_sdk/utils.py
@@ -1,7 +1,12 @@
from enum import Enum, auto as enum_auto
+from typing import Sequence, Any
+
+
+JSON = int | str | bool | list['JSON'] | dict[str, 'JSON'] | None
class AutoNameEnum(Enum):
+ @staticmethod
def _generate_next_value_(name, start, count, last_values):
return name
@@ -19,3 +24,38 @@ def gen_cls_name_from_url_path(url_path: str, postfix: str = ''):
parts = url_path.strip('/').replace('-', '').split('/')
base = ''.join(f'{p[0].upper()}{p[1:]}' for p in parts)
return f'{base}{postfix}'
+
+
+def get_nested_value(
+ d: dict,
+ keys: Sequence[str],
+ default: Any = None,
+ raise_if_value_is_none: bool = False,
+) -> Any:
+ if not isinstance(d, dict):
+ raise TypeError
+
+ if not keys:
+ raise ValueError
+
+ key = keys[0]
+ if key not in d:
+ return default
+ value = d[key]
+
+ if len(keys) > 1:
+ if isinstance(value, dict):
+ nested_d = value
+ return get_nested_value(
+ d=nested_d,
+ keys=keys[1:],
+ default=default,
+ )
+
+ if not raise_if_value_is_none and value is None:
+ return default
+
+ raise TypeError(
+ f'The key {key} found, but its value is not a dictionary.'
+ )
+ return value
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 0000000..3826a46
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,224 @@
+from collections.abc import Callable
+from dataclasses import dataclass
+import inspect
+import os
+from types import GenericAlias, UnionType
+from typing import Any, get_args
+from urllib3 import disable_warnings
+
+import pytest
+import requests
+import dynamix_sdk.types as sdk_types
+from dynamix_sdk.base import (
+ gen_api_params_cls_name,
+ create_api_params_cls,
+ BaseAPIFunctionProtocol,
+ base_proto_to_http_method,
+)
+from dynamix_sdk.utils import JSON, HTTPMethod
+
+
+@dataclass(kw_only=True)
+class SDKFunction:
+ api_cls: type[sdk_types.BaseAPI]
+ call_attrs: tuple[str, ...]
+ url_path: str
+ proto_cls: type[BaseAPIFunctionProtocol]
+ proto_method: Callable
+ http_method: HTTPMethod
+ params_model_cls: type[sdk_types.BaseAPIParamsModel]
+ result_cls: type[sdk_types.BaseAPIResult]
+
+
+@dataclass(kw_only=True)
+class APISubgroup:
+ name: str
+ cls: sdk_types.BaseAPI
+ functions: tuple[SDKFunction, ...]
+
+
+@dataclass(kw_only=True)
+class APIGroup:
+ name: str
+ cls: sdk_types.BaseAPI
+ subgroups: tuple[APISubgroup, ...]
+
+
+@pytest.fixture(scope='session')
+def api_groups():
+ result_list: list[APIGroup] = []
+ for attr_name, attr_annot in sdk_types.API.__annotations__.items():
+ api_group_name = attr_name
+ api_group_cls = attr_annot
+
+ api_subgroups: list[APISubgroup] = []
+ for attr_name, attr_annot in api_group_cls.__annotations__.items():
+ api_subgroup_name = attr_name
+ api_subgroup_cls = attr_annot
+
+ sdk_functions: list[SDKFunction] = []
+ for attr_name in dir(api_subgroup_cls):
+ if attr_name.startswith('_'):
+ continue
+
+ attr = getattr(api_subgroup_cls, attr_name)
+ if not callable(attr):
+ continue
+ method_name = attr_name
+ method = attr
+
+ for mixin_cls in api_subgroup_cls.__bases__[1:]:
+ if not hasattr(mixin_cls, method_name):
+ continue
+
+ assert issubclass(mixin_cls, BaseAPIFunctionProtocol), (
+ f'Class {mixin_cls.__qualname__}'
+ f' must be inherited from'
+ f' {BaseAPIFunctionProtocol.__qualname__}.'
+ )
+ valid_bases = base_proto_to_http_method.keys()
+ mixin_cls_base = mixin_cls.__base__
+ assert (
+ mixin_cls_base
+ and issubclass(mixin_cls_base, BaseAPIFunctionProtocol)
+ and mixin_cls_base in valid_bases
+ ), (
+ f'Class {mixin_cls.__qualname__}'
+ f' must be inherited from one of these classes:'
+ f" {', '.join(p.__qualname__ for p in valid_bases)}."
+ )
+ proto_cls = mixin_cls
+ proto_cls_base = mixin_cls_base
+ break
+ else:
+ raise LookupError(
+ f'{api_subgroup_cls.__qualname__}:'
+ f'mixin class for method "{method_name}" not found.'
+ )
+
+ attr_names = (
+ api_group_name,
+ api_subgroup_name,
+ attr_name,
+ )
+ api_func_url_path = ''
+ for sdk_func_path_part in attr_names:
+ url_path_part = api_subgroup_cls._path_mapping_dict.get(
+ sdk_func_path_part,
+ sdk_func_path_part
+ )
+ api_func_url_path = f'{api_func_url_path}/{url_path_part}'
+
+ api_params_cls_name = gen_api_params_cls_name(
+ api_path=api_func_url_path,
+ )
+ result_cls = inspect.signature(method).return_annotation
+ sdk_functions.append(
+ SDKFunction(
+ api_cls=api_subgroup_cls,
+ call_attrs=attr_names,
+ url_path=api_func_url_path,
+ proto_cls=proto_cls,
+ proto_method=method,
+ http_method=base_proto_to_http_method[proto_cls_base],
+ params_model_cls=create_api_params_cls(
+ cls_name=api_params_cls_name,
+ module_name=result_cls.__module__,
+ protocol_method=method,
+ ),
+ result_cls=result_cls,
+ )
+ )
+
+ api_subgroups.append(
+ APISubgroup(
+ name=api_subgroup_name,
+ cls=api_subgroup_cls,
+ functions=tuple(sdk_functions),
+ )
+ )
+
+ result_list.append(
+ APIGroup(
+ name=api_group_name,
+ cls=api_group_cls,
+ subgroups=tuple(api_subgroups),
+ )
+ )
+
+ return tuple(result_list)
+
+
+@pytest.fixture(scope='session')
+def sdk_dx_functions(api_groups):
+ result_list: list[SDKFunction] = []
+ for api_group in api_groups:
+ for api_subgroup in api_group.subgroups:
+ result_list += api_subgroup.functions
+ return tuple(result_list)
+
+
+@pytest.fixture(scope='session')
+def dx_models(sdk_dx_functions: tuple[SDKFunction, ...]):
+ def get_models_from_annotation(annotation: Any):
+ if not annotation:
+ raise TypeError
+
+ models = []
+
+ if annotation is Any:
+ return models
+
+ if isinstance(annotation, (UnionType, GenericAlias)):
+ for annotation in get_args(annotation):
+ models += get_models_from_annotation(annotation=annotation)
+ elif issubclass(annotation, sdk_types.BaseModel):
+ model_cls = annotation
+ models.append(model_cls)
+
+ return set(models)
+
+ def get_nested_models(model_cls: type[sdk_types.BaseModel]):
+ models = []
+
+ for field_info in model_cls.model_fields.values():
+ models += get_models_from_annotation(
+ annotation=field_info.annotation,
+ )
+ for model in models:
+ models += get_nested_models(model_cls=model)
+
+ return set(models)
+
+ dx_models = []
+ for sdk_func in sdk_dx_functions:
+ dx_models.append(sdk_func.params_model_cls)
+ dx_models += get_nested_models(model_cls=sdk_func.params_model_cls)
+
+ if issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultModel):
+ dx_models.append(sdk_func.result_cls)
+ dx_models += get_nested_models(model_cls=sdk_func.result_cls)
+
+ return set(dx_models)
+
+
+@pytest.fixture(scope='session')
+def dx_url():
+ dx_url = os.getenv('DYNAMIX_URL')
+ assert dx_url
+ return dx_url
+
+
+@pytest.fixture(scope='session')
+def dx_api_definition(dx_url: str) -> JSON:
+ API_DEFINITION_API_PATH = '/restmachine/system/docgenerator/prepareCatalog'
+
+ disable_warnings()
+
+ api_definition_resp = requests.post(
+ url=f'{dx_url}{API_DEFINITION_API_PATH}',
+ verify=False,
+ )
+ api_definition_resp.raise_for_status()
+
+ return api_definition_resp.json()
diff --git a/tests/local/__init__.py b/tests/local/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/local/test_class_naming.py b/tests/local/test_class_naming.py
new file mode 100644
index 0000000..6a7ed65
--- /dev/null
+++ b/tests/local/test_class_naming.py
@@ -0,0 +1,99 @@
+import dynamix_sdk.types as sdk_types
+from dynamix_sdk.utils import gen_cls_name_from_url_path
+
+
+def test_api_class_naming(api_groups):
+ for api_group in api_groups:
+ correct_class_name = f'{api_group.name.capitalize()}API'
+ assert api_group.cls.__qualname__ == correct_class_name, (
+ f'\nAPI group: {api_group.name}'
+ f'\nCorrect API class name: {correct_class_name}'
+ )
+
+ for api_subgroup in api_group.subgroups:
+ correct_class_name = (
+ f'{api_group.name.capitalize()}'
+ f'{api_subgroup.name.capitalize()}'
+ f'API'
+ )
+ assert api_subgroup.cls.__qualname__ == correct_class_name, (
+ f'\nAPI group: {api_group.name}'
+ f'\nAPI subgroup: {api_subgroup.name}'
+ f'\nCorrect API class name: {correct_class_name}'
+ )
+
+
+def test_protocol_class_naming(sdk_dx_functions):
+ for sdk_func in sdk_dx_functions:
+ correct_class_name = gen_cls_name_from_url_path(
+ url_path=sdk_func.url_path,
+ postfix='Protocol',
+ )
+
+ assert sdk_func.proto_cls.__qualname__ == correct_class_name, (
+ f'\nFunction call attributes: {sdk_func.call_attrs}'
+ f'\nURL path: {sdk_func.url_path}'
+ f'\nCorrect Protocol class name: {correct_class_name}'
+ )
+
+
+def get_subclasses(cls: type, result: list[type] | None = None):
+ if result:
+ _result = result
+ else:
+ _result: list[type] = []
+
+ for subclass in cls.__subclasses__():
+ if issubclass(subclass.__bases__[0], cls):
+ _result.append(subclass)
+ _result += get_subclasses(subclass)
+
+ return _result
+
+
+def test_params_nested_model_class_naming():
+ base_cls = sdk_types.BaseAPIParamsNestedModel
+ for params_nm_cls in get_subclasses(base_cls):
+ suffix = 'APIParamsNM'
+ assert params_nm_cls.__qualname__.endswith(suffix), (
+ f'Class {params_nm_cls.__qualname__}:'
+ f' all subclasses of {base_cls.__qualname__}'
+ f' must have a name with suffix "{suffix}".'
+ )
+
+
+def test_result_class_naming(sdk_dx_functions):
+ for sdk_func in sdk_dx_functions:
+ if issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultModel):
+ result_cls_postfix = 'ResultModel'
+ elif issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultStr):
+ result_cls_postfix = 'ResultStr'
+ elif issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultInt):
+ result_cls_postfix = 'ResultInt'
+ elif issubclass(sdk_func.result_cls, sdk_types.BaseAPIResultBool):
+ result_cls_postfix = 'ResultBool'
+ else:
+ raise TypeError
+
+ result_cls_name = gen_cls_name_from_url_path(
+ url_path=sdk_func.url_path,
+ postfix=result_cls_postfix,
+ )
+ assert sdk_func.result_cls.__qualname__ == result_cls_name, (
+ f'\nFunction call attributes: {sdk_func.call_attrs}'
+ f'\nURL path: {sdk_func.url_path}'
+ f'\nResult base class:'
+ f' {sdk_func.result_cls.__bases__[0].__qualname__}'
+ f'\nCorrect result class name: {result_cls_name}'
+ )
+
+
+def test_result_nested_model_class_naming():
+ base_cls = sdk_types.BaseAPIResultNestedModel
+ for result_nm_cls in get_subclasses(base_cls):
+ suffix = 'APIResultNM'
+ assert result_nm_cls.__qualname__.endswith(suffix), (
+ f'Class {result_nm_cls.__qualname__}:'
+ f' all subclasses of {base_cls.__qualname__}'
+ f' must have a name with suffix "{suffix}".'
+ )
diff --git a/tests/local/test_name_mapping_file.py b/tests/local/test_name_mapping_file.py
new file mode 100644
index 0000000..83146d7
--- /dev/null
+++ b/tests/local/test_name_mapping_file.py
@@ -0,0 +1,68 @@
+from dynamix_sdk import types as sdk_types
+from dynamix_sdk.base import (
+ get_alias,
+ name_mapping_dict,
+)
+
+
+def test_missing_mappings_in_name_mapping_file(dx_models):
+ attrs_without_mapping = []
+ for model_cls in dx_models:
+ for field_name in model_cls.model_fields.keys():
+ try:
+ get_alias(
+ field_name=field_name,
+ model_cls=model_cls,
+ name_mapping_dict=name_mapping_dict
+ )
+ except KeyError:
+ attrs_without_mapping.append(
+ f'{model_cls.__qualname__}.{field_name}'
+ )
+
+ attrs_without_mapping.sort()
+
+ assert not attrs_without_mapping, (
+ f'{len(attrs_without_mapping)} attributes without mapping:'
+ f' {attrs_without_mapping}'
+ )
+
+
+def test_unused_mappings_in_name_mapping_file(dx_models):
+ mapping_dict_keys = set(name_mapping_dict.keys())
+
+ def exclude_used_keys(
+ model_cls: type[sdk_types.BaseModel],
+ mapping_dict_keys: set[str],
+ ):
+ for field_name in model_cls.__annotations__.keys():
+ used_key = None
+
+ individual_alias_key = f'{field_name}__{model_cls.__qualname__}'
+ if individual_alias_key in mapping_dict_keys:
+ used_key = individual_alias_key
+ elif field_name in mapping_dict_keys:
+ used_key = field_name
+
+ if used_key and used_key in mapping_dict_keys:
+ mapping_dict_keys.remove(used_key)
+
+ for base_cls in model_cls.__bases__:
+ if issubclass(base_cls, sdk_types.BaseModel):
+ exclude_used_keys(
+ model_cls=base_cls,
+ mapping_dict_keys=mapping_dict_keys,
+ )
+
+ for model_cls in dx_models:
+ exclude_used_keys(
+ model_cls=model_cls,
+ mapping_dict_keys=mapping_dict_keys,
+ )
+
+ unused_mapping_dict_keys = sorted(mapping_dict_keys)
+
+ assert not unused_mapping_dict_keys, (
+ f'{len(unused_mapping_dict_keys)} unused keys in mapping file:'
+ f' {unused_mapping_dict_keys}.'
+ )
diff --git a/tests/local/test_types.py b/tests/local/test_types.py
new file mode 100644
index 0000000..60597b4
--- /dev/null
+++ b/tests/local/test_types.py
@@ -0,0 +1,154 @@
+from enum import Enum
+import inspect
+from types import GenericAlias, ModuleType, UnionType
+from typing import Any, get_args
+
+import dynamix_sdk.types as sdk_types
+import dynamix_sdk.api._nested.params as nested_params
+import dynamix_sdk.api._nested.result as nested_result
+import dynamix_sdk.api._nested.enums as nested_enums
+
+from tests.conftest import SDKFunction
+
+
+def check_model_field_annotation(
+ annotation: Any,
+ field_descr: str,
+ valid_nested_model_cls: type[sdk_types.BaseModel],
+):
+ if not annotation:
+ raise TypeError
+
+ if annotation is Any:
+ return
+
+ assert annotation is not list, (
+ f'{field_descr}: missing list elements type annotation.'
+ )
+
+ if isinstance(annotation, (UnionType, GenericAlias)):
+ for annotation in get_args(annotation):
+ check_model_field_annotation(
+ annotation=annotation,
+ field_descr=field_descr,
+ valid_nested_model_cls=valid_nested_model_cls,
+ )
+ elif issubclass(annotation, sdk_types.BaseModel):
+ model_cls = annotation
+ assert issubclass(model_cls, valid_nested_model_cls), (
+ f'{field_descr}: nested model class must be'
+ f' a subclass of {valid_nested_model_cls.__qualname__}.'
+ )
+
+ check_model_field_annotations(
+ model_cls=model_cls,
+ valid_nested_model_cls=valid_nested_model_cls,
+ )
+
+
+def check_model_field_annotations(
+ model_cls: type[sdk_types.BaseModel],
+ valid_nested_model_cls: type[sdk_types.BaseModel],
+):
+ for field_name, field_info in model_cls.model_fields.items():
+ field_descr = f'{model_cls.__qualname__}.{field_name}'
+
+ check_model_field_annotation(
+ annotation=field_info.annotation,
+ field_descr=field_descr,
+ valid_nested_model_cls=valid_nested_model_cls,
+ )
+
+
+def test_params_model_fields_type(sdk_dx_functions: tuple[SDKFunction, ...]):
+ for sdk_func in sdk_dx_functions:
+ params = inspect.signature(sdk_func.proto_method).parameters
+ for param_name, param in params.items():
+ if param_name == 'self':
+ continue
+
+ field_descr = (
+ f'{sdk_func.proto_cls.__qualname__}.'
+ f'{sdk_func.call_attrs[-1]}.'
+ f'{param_name}'
+ )
+
+ assert param.annotation is not inspect.Parameter.empty, (
+ f'{field_descr}: missing type annotation.'
+ )
+
+ assert param.kind == param.KEYWORD_ONLY, (
+ f'Parameter {field_descr} must be keyword-only.'
+ )
+
+ check_model_field_annotation(
+ annotation=param.annotation,
+ field_descr=field_descr,
+ valid_nested_model_cls=sdk_types.BaseAPIParamsNestedModel,
+ )
+
+
+def test_function_return_type(sdk_dx_functions):
+ for sdk_func in sdk_dx_functions:
+ assert issubclass(sdk_func.result_cls, sdk_types.BaseAPIResult), (
+ f'Return type for method'
+ f' {sdk_func.proto_cls.__qualname__}.{sdk_func.call_attrs[-1]}'
+ f' must be a subclass of BaseAPIResult.'
+ )
+
+
+def test_result_model_fields_type():
+ valid_nested_model_cls = sdk_types.BaseAPIResultNestedModel
+
+ for subcls in sdk_types.BaseAPIResultModel.__subclasses__():
+ check_model_field_annotations(
+ model_cls=subcls,
+ valid_nested_model_cls=valid_nested_model_cls,
+ )
+ for subcls in sdk_types.BaseAPIResultNestedModel.__subclasses__():
+ check_model_field_annotations(
+ model_cls=subcls,
+ valid_nested_model_cls=valid_nested_model_cls,
+ )
+
+
+def check_class_inheritance_in_module(
+ module: ModuleType,
+ valid_base_cls: type,
+):
+ for attr_name in dir(module):
+ if attr_name.startswith('_'):
+ continue
+
+ attr = getattr(module, attr_name)
+
+ if not isinstance(attr, type):
+ continue
+
+ nested_result_cls = attr
+
+ assert issubclass(nested_result_cls, valid_base_cls), (
+ f'Class {nested_result_cls.__qualname__}:'
+ f' must be a subclass of class {valid_base_cls.__qualname__}.'
+ )
+
+
+def test_class_inheritance_in_nested_result_module():
+ check_class_inheritance_in_module(
+ module=nested_result,
+ valid_base_cls=sdk_types.BaseAPIResultNestedModel,
+ )
+
+
+def test_class_inheritance_in_nested_params_module():
+ check_class_inheritance_in_module(
+ module=nested_params,
+ valid_base_cls=sdk_types.BaseAPIParamsNestedModel,
+ )
+
+
+def test_class_inheritance_in_nested_enums_module():
+ check_class_inheritance_in_module(
+ module=nested_enums,
+ valid_base_cls=Enum,
+ )
diff --git a/tests/test_with_api_definition.py b/tests/test_with_api_definition.py
new file mode 100644
index 0000000..3bb2c11
--- /dev/null
+++ b/tests/test_with_api_definition.py
@@ -0,0 +1,351 @@
+from enum import Enum
+import inspect
+from types import GenericAlias, NoneType, UnionType
+from typing import Any, get_args
+from warnings import warn
+
+from dynamix_sdk import types as sdk_types
+from dynamix_sdk.base import (
+ get_alias,
+ name_mapping_dict,
+)
+
+from dynamix_sdk.utils import JSON, get_nested_value
+from tests.conftest import SDKFunction
+
+
+expected_inconsistencies: list[str] = [
+ 'cloudapi.disks.limit_io: API has parameter "iops" but this SDK function doesn\'t have corresponding parameter.', # noqa: E501
+ 'cloudapi.image.list: API has parameter "architecture" but this SDK function doesn\'t have corresponding parameter.', # noqa: E501
+ 'cloudapi.bservice.group_stop: default value of parameter "force" must be None.', # noqa: E501
+ 'cloudapi.bservice.group_stop: annotation of parameter "force" must be Union.', # noqa: E501
+ 'cloudapi.bservice.delete: default value of parameter "permanently" must be None.', # noqa: E501
+ 'cloudapi.bservice.delete: annotation of parameter "permanently" must be Union.', # noqa: E501
+ 'cloudapi.compute.net_attach: result type must be child of BaseAPIResultBool.', # noqa: E501
+ 'cloudapi.compute.net_attach: default value of parameter "mtu" must be 1500.', # noqa: E501
+ '''cloudapi.compute.update: parameter "cpu_pin", target_annotation = None | bool, expected_annot = ''', # noqa: E501
+ 'cloudapi.disks.create: default value of parameter "size_gb" must be 10.',
+ '''cloudapi.disks.create: API has parameter "ssdSize" but this SDK function doesn't have corresponding parameter.''', # noqa: E501
+ 'cloudbroker.account.create: annotation of parameter "uniq_pools" must contain int.', # noqa: E501
+ 'cloudapi.kvmx86.create: annotation of parameter "ci_user_data" must contain BaseAPIParamsNestedModel.', # noqa: E501
+ '''cloudapi.image.create: API has parameter "architecture" but this SDK function doesn't have corresponding parameter.''', # noqa: E501
+ 'cloudapi.lb.create: annotation of parameter "sysctl_params" must contain BaseAPIParamsNestedModel.', # noqa: E501
+]
+
+
+def test_with_api_definition(
+ dx_api_definition: JSON,
+ sdk_dx_functions: tuple[SDKFunction, ...],
+):
+ inconsistencies: list[str] = []
+ for sdk_func in sdk_dx_functions:
+ func_full_api_path = f'/restmachine{sdk_func.url_path}'
+
+ if not isinstance(dx_api_definition, dict):
+ raise TypeError
+
+ dx_api_definition_paths = dx_api_definition['paths']
+
+ if not isinstance(dx_api_definition_paths, dict):
+ raise TypeError
+
+ if func_full_api_path not in dx_api_definition_paths:
+ inconsistencies.append(
+ f"{'.'.join(sdk_func.call_attrs)}:"
+ f' url path {sdk_func.url_path} not found in'
+ f' DX API definition.'
+ )
+ continue
+
+ func_api_definition = dx_api_definition_paths[func_full_api_path]
+
+ if not isinstance(func_api_definition, dict):
+ raise TypeError
+
+ http_method_lower = sdk_func.http_method.lower()
+ if http_method_lower not in func_api_definition:
+ api_def_http_methods = [
+ m.upper() for m in func_api_definition.keys()
+ ]
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' HTTP method {sdk_func.http_method} not found.'
+ f' DX API definition for {sdk_func.url_path} has'
+ f' only these HTTP methods:'
+ f" {', '.join(api_def_http_methods)}."
+ )
+ continue
+ func_api_def_method = func_api_definition[http_method_lower]
+
+ if not isinstance(func_api_def_method, dict):
+ raise TypeError
+
+ type_mappings = {
+ 'integer': int,
+ 'string': str,
+ 'boolean': bool,
+ 'object': sdk_types.BaseAPIParamsNestedModel,
+ 'number': float,
+ }
+
+ if api_def_result_type := get_nested_value(
+ d=func_api_def_method,
+ keys=('responses', '200', 'schema', 'type'),
+ ):
+ expected_result_type = type_mappings[api_def_result_type]
+ if expected_result_type is bool:
+ expected_result_type = sdk_types.BaseAPIResultBool
+ if not issubclass(sdk_func.result_cls, expected_result_type):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' result type must be child of'
+ f' {expected_result_type.__qualname__}.'
+ )
+
+ sdk_func_params: dict[str, inspect.Parameter] = {}
+ for p in inspect.signature(sdk_func.proto_method).parameters.values():
+ if p.name == 'self':
+ continue
+ alias = get_alias(
+ field_name=p.name,
+ model_cls=sdk_func.params_model_cls,
+ name_mapping_dict=name_mapping_dict,
+ )
+ sdk_func_params[alias] = p
+
+ api_definition_params = func_api_def_method.get('parameters')
+ if not api_definition_params:
+ if sdk_func_params:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' this function must not have parameters.'
+ )
+ continue
+
+ if not isinstance(api_definition_params, list):
+ raise TypeError
+
+ dx_param_names = set()
+ for p in api_definition_params:
+ if not isinstance(p, dict):
+ raise TypeError
+ dx_param_names.add(p['name'])
+
+ if len(sdk_func_params) > len(dx_param_names):
+ unused_sdk_param_names = []
+ for sdk_param_alias, sdk_param in sdk_func_params.items():
+ if sdk_param_alias not in dx_param_names:
+ unused_sdk_param_names.append(sdk_param.name)
+ if unused_sdk_param_names:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' unused parameters:'
+ f' {", ".join(sorted(unused_sdk_param_names))}'
+ )
+
+ for api_def_param in api_definition_params:
+ if not isinstance(api_def_param, dict):
+ raise TypeError
+
+ api_def_param_enum = api_def_param.get('enum')
+ if (
+ api_def_param_enum is not None
+ and not isinstance(api_def_param_enum, list)
+ ):
+ raise TypeError
+
+ api_def_param_default = api_def_param.get('default')
+
+ api_def_param_type = api_def_param.get('type')
+ if (
+ api_def_param_type is not None
+ and not isinstance(api_def_param_type, str)
+ ):
+ raise TypeError
+
+ api_def_param_items = api_def_param.get('items')
+ if (
+ api_def_param_items is not None
+ and not isinstance(api_def_param_items, dict)
+ ):
+ raise TypeError
+
+ necessary_dx_param = not (
+ api_def_param_enum
+ and len(api_def_param_enum) == 1
+ and api_def_param_default is not None
+ )
+
+ sdk_param_alias = api_def_param['name']
+ if not isinstance(sdk_param_alias, str):
+ raise TypeError
+
+ param_exists_in_sdk = sdk_param_alias in sdk_func_params.keys()
+
+ if not param_exists_in_sdk:
+ if necessary_dx_param:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' API has parameter "{sdk_param_alias}"'
+ f" but this SDK function doesn't have"
+ f' corresponding parameter.'
+ )
+ continue
+
+ sdk_param_name = sdk_func_params[sdk_param_alias].name
+
+ if not necessary_dx_param:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' parameter "{sdk_param_name} is unnecessary in SDK.'
+ )
+ continue
+
+ sdk_func_param = sdk_func_params[sdk_param_alias]
+
+ if sdk_func_param.annotation is Any:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must not be Any.'
+ )
+ continue
+
+ if api_def_param_default and api_def_param_default != -1:
+ if sdk_func_param.default != api_def_param_default:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' default value of parameter "{sdk_param_name}"'
+ f' must be {api_def_param_default}.'
+ )
+
+ target_annotation = sdk_func_param.annotation
+ if not api_def_param.get('required') and (
+ api_def_param_default is None
+ or (
+ api_def_param_default == 0
+ and api_def_param_default is not False
+ )
+ or api_def_param_default == ''
+ or api_def_param_default == -1
+ ):
+ if sdk_func_param.default is not None:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' default value of parameter "{sdk_param_name}"'
+ f' must be None.'
+ )
+
+ if not isinstance(sdk_func_param.annotation, UnionType):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must be Union.'
+ )
+ continue
+
+ annot_union_args = get_args(sdk_func_param.annotation)
+ if NoneType not in annot_union_args:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must contain None.'
+ )
+ continue
+
+ if not len(annot_union_args) == 2:
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must contain two types.'
+ )
+ continue
+
+ if annot_union_args[0] is NoneType:
+ target_annotation = annot_union_args[1]
+ else:
+ target_annotation = annot_union_args[0]
+
+ if api_def_param_type == 'array':
+ if (
+ not isinstance(target_annotation, GenericAlias)
+ or target_annotation.__origin__ is not list
+ ):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must contain list[...].'
+ )
+ continue
+
+ if api_def_param_items is not None:
+ api_def_param_items_type = api_def_param_items.get('type')
+ if api_def_param_items_type is None:
+ continue
+ if not isinstance(api_def_param_items_type, str):
+ raise TypeError
+
+ target_annotation = get_args(target_annotation)[0]
+ expected_annot = type_mappings.get(
+ api_def_param_items_type
+ )
+ if expected_annot is None:
+ continue
+ elif api_def_param_type is not None:
+ expected_annot = type_mappings.get(api_def_param_type)
+ if expected_annot is None:
+ continue
+
+ if not inspect.isclass(target_annotation):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' parameter "{sdk_param_name}",'
+ f' {target_annotation = },'
+ f' {expected_annot = }'
+ )
+ continue
+
+ if api_def_param_enum:
+ if not issubclass(target_annotation, Enum):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must contain enum.'
+ )
+ continue
+ enum_from_annot = target_annotation
+ enum_values = enum_from_annot.__members__.values()
+ if sorted(api_def_param_enum) != sorted(enum_values):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' parameter "{sdk_param_name}":'
+ f' enum {enum_from_annot.__qualname__}'
+ f' must contain these values: {api_def_param_enum}.'
+ )
+ elif not issubclass(target_annotation, expected_annot):
+ inconsistencies.append(
+ f'{".".join(sdk_func.call_attrs)}:'
+ f' annotation of parameter "{sdk_param_name}"'
+ f' must contain {expected_annot.__qualname__}.'
+ )
+ continue
+
+ for expected_inconsistency in expected_inconsistencies:
+ if expected_inconsistency in inconsistencies:
+ inconsistencies.remove(expected_inconsistency)
+ else:
+ inconsistencies.append(
+ 'This expected inconsistency not found:'
+ f' {expected_inconsistency}'
+ )
+
+ if expected_inconsistencies:
+ warn(
+ '\nExpected inconsistencies:\n'
+ + '\n'.join(expected_inconsistencies)
+ )
+
+ assert not inconsistencies, (
+ f'found {len(inconsistencies)} inconsistencies:\n'
+ + '\n'.join(inconsistencies)
+ )