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) + )