From 66601495ddf512d307819d1f903c0c2d6f35caf3 Mon Sep 17 00:00:00 2001 From: sskarimov Date: Wed, 11 Feb 2026 12:20:55 +0300 Subject: [PATCH] 1.4.0 --- .pre-commit-config.yaml | 32 -- CHANGELOG.md | 374 ++++++++++++++- Makefile | 4 - README.md | 67 ++- pyproject.toml | 2 +- requirements-dev.txt | 2 - src/dynamix_sdk/api/_api.py | 12 + src/dynamix_sdk/api/_nested/enums.py | 136 +++--- src/dynamix_sdk/api/_nested/params.py | 5 + src/dynamix_sdk/api/_nested/result.py | 368 ++++++++------- src/dynamix_sdk/api/cloudapi/_api.py | 2 - src/dynamix_sdk/api/cloudapi/account/get.py | 18 +- .../api/cloudapi/account/update.py | 5 +- src/dynamix_sdk/api/cloudapi/bservice/get.py | 12 +- .../api/cloudapi/bservice/group_add.py | 3 +- .../api/cloudapi/bservice/group_get.py | 12 +- .../api/cloudapi/bservice/group_parent_add.py | 2 +- .../cloudapi/bservice/group_parent_remove.py | 2 +- .../api/cloudapi/bservice/group_resize.py | 2 +- src/dynamix_sdk/api/cloudapi/compute/_api.py | 8 +- .../api/cloudapi/compute/disk_add.py | 2 +- .../api/cloudapi/compute/disk_attach.py | 2 +- src/dynamix_sdk/api/cloudapi/compute/get.py | 15 +- .../api/cloudapi/compute/net_attach.py | 5 + .../api/cloudapi/compute/pin_to_node.py | 15 + .../api/cloudapi/compute/pin_to_stack.py | 15 - .../api/cloudapi/compute/redeploy.py | 2 +- .../api/cloudapi/compute/unpin_from_node.py | 14 + .../api/cloudapi/compute/unpin_from_stack.py | 14 - src/dynamix_sdk/api/cloudapi/disks/get.py | 26 +- src/dynamix_sdk/api/cloudapi/flipgroup/get.py | 14 +- .../api/cloudapi/flipgroup/list.py | 1 - src/dynamix_sdk/api/cloudapi/image/create.py | 2 +- src/dynamix_sdk/api/cloudapi/image/get.py | 11 +- src/dynamix_sdk/api/cloudapi/k8s/create.py | 2 +- src/dynamix_sdk/api/cloudapi/k8s/get.py | 12 +- .../api/cloudapi/k8s/worker_add.py | 2 +- .../api/cloudapi/k8s/workers_group_add.py | 2 +- src/dynamix_sdk/api/cloudapi/kvmx86/create.py | 4 +- .../api/cloudapi/kvmx86/create_blank.py | 11 +- src/dynamix_sdk/api/cloudapi/lb/get.py | 12 +- src/dynamix_sdk/api/cloudapi/rg/create.py | 1 - src/dynamix_sdk/api/cloudapi/rg/update.py | 7 +- .../cloudapi/security_group/create_rule.py | 2 +- .../api/cloudapi/stack/__init__.py | 1 - src/dynamix_sdk/api/cloudapi/stack/_api.py | 11 - src/dynamix_sdk/api/cloudapi/stack/get.py | 22 - src/dynamix_sdk/api/cloudapi/stack/list.py | 22 - .../api/cloudapi/storage_policy/list.py | 1 + src/dynamix_sdk/api/cloudapi/vins/get.py | 12 +- .../api/cloudapi/vins/nat_rule_add.py | 2 +- src/dynamix_sdk/api/cloudapi/zone/get.py | 9 +- .../api/cloudbroker/account/_api.py | 12 + .../api/cloudbroker/account/add_user.py | 2 +- .../api/cloudbroker/account/create.py | 3 +- .../api/cloudbroker/account/get.py | 18 +- .../account/set_cpu_allocation_parameter.py | 20 + .../account/set_cpu_allocation_ratio.py | 19 + .../api/cloudbroker/account/update.py | 27 ++ .../account/update_compute_features.py | 20 + .../account/update_resource_types.py | 18 + .../api/cloudbroker/account/update_user.py | 19 + .../api/cloudbroker/compute/_api.py | 2 + .../cloudbroker/compute/change_read_only.py | 19 + .../api/cloudbroker/compute/clone.py | 2 +- .../cloudbroker/compute/start_migration_in.py | 2 +- .../cloudbroker/security_group/create_rule.py | 2 +- .../api/cloudbroker/storage_policy/list.py | 1 + .../api/cloudbroker/user/create.py | 6 +- src/dynamix_sdk/api/cloudbroker/user/get.py | 4 +- src/dynamix_sdk/api/cloudbroker/user/list.py | 4 +- src/dynamix_sdk/api/name_mapping.yml | 68 ++- src/dynamix_sdk/api/path_mapping.yml | 5 +- src/dynamix_sdk/base.py | 45 +- src/dynamix_sdk/dynamix.py | 72 ++- src/dynamix_sdk/exceptions.py | 3 + src/dynamix_sdk/utils.py | 12 + tests/__init__.py | 0 tests/conftest.py | 224 --------- tests/local/__init__.py | 0 tests/local/test_class_naming.py | 101 ---- tests/local/test_name_mapping_file.py | 68 --- tests/local/test_types.py | 154 ------ tests/test_with_api_definition.py | 442 ------------------ 84 files changed, 1168 insertions(+), 1567 deletions(-) delete mode 100644 .pre-commit-config.yaml delete mode 100644 Makefile delete mode 100644 requirements-dev.txt create mode 100644 src/dynamix_sdk/api/cloudapi/compute/pin_to_node.py delete mode 100644 src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py create mode 100644 src/dynamix_sdk/api/cloudapi/compute/unpin_from_node.py delete mode 100644 src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py delete mode 100644 src/dynamix_sdk/api/cloudapi/stack/__init__.py delete mode 100644 src/dynamix_sdk/api/cloudapi/stack/_api.py delete mode 100644 src/dynamix_sdk/api/cloudapi/stack/get.py delete mode 100644 src/dynamix_sdk/api/cloudapi/stack/list.py create mode 100644 src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_parameter.py create mode 100644 src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_ratio.py create mode 100644 src/dynamix_sdk/api/cloudbroker/account/update.py create mode 100644 src/dynamix_sdk/api/cloudbroker/account/update_compute_features.py create mode 100644 src/dynamix_sdk/api/cloudbroker/account/update_resource_types.py create mode 100644 src/dynamix_sdk/api/cloudbroker/account/update_user.py create mode 100644 src/dynamix_sdk/api/cloudbroker/compute/change_read_only.py delete mode 100644 tests/__init__.py delete mode 100644 tests/conftest.py delete mode 100644 tests/local/__init__.py delete mode 100644 tests/local/test_class_naming.py delete mode 100644 tests/local/test_name_mapping_file.py delete mode 100644 tests/local/test_types.py delete mode 100644 tests/test_with_api_definition.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index e98a22b..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,32 +0,0 @@ -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 - hooks: - - id: end-of-file-fixer - - id: file-contents-sorter - files: .*mapping.yml - args: - - --unique - - id: no-commit-to-branch - name: no-commit-to-branch (main, master, dev_*) - args: - - --pattern - - dev_.* - - repo: https://github.com/pycqa/flake8 - rev: 7.1.2 - hooks: - - id: flake8 - name: flake8 (1/2) - files: src/dynamix_sdk/types\.py|.*__init__\.py|.*_api\.py - args: - - --extend-ignore=F401,F403,F405 - - 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 8327937..d771e3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,385 @@ -# Список изменений в версии 1.3.2 +# Список изменений в версии 1.4.0 ## Добавлено - | Идентификатор
задачи | Описание | | --- | --- | +| BPYS-750 | Добавлена функция `cloudbroker.account.set_cpu_allocation_parameter`. | +| BPYS-733 | Функция `cloudapi.account.get`: добавлен атрибут `CloudapiAccountGetResultModel.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudapi.account.update`: добавлен параметр `sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudapi.rg.get`: добавлен атрибут `CloudapiRgGetResultModel.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudapi.rg.list_deleted`: добавлен атрибут `CloudapiRgListDeletedResultModel.data.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudapi.rg.list`: добавлен атрибут `CloudapiRgListResultModel.data.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudapi.rg.update`: добавлен параметр `clear_sep_pools` в связи с переименованием из `clear_uniq_pools`. | +| BPYS-733 | Функция `cloudapi.rg.update`: добавлен параметр `sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudbroker.account.create`: добавлен параметр `sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudbroker.account.get`: добавлен атрибут `CloudbrokerAccountGetResultModel.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudbroker.account.list_deleted`: добавлен атрибут `CloudbrokerAccountListDeletedResultModel.data.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-733 | Функция `cloudbroker.account.list`: добавлен атрибут `CloudbrokerAccountListResultModel.data.sep_pools` в связи с переименованием из `uniq_pools`. | +| BPYS-751 | Добавлена функция `cloudbroker.account.set_cpu_allocation_ratio`. | +| BPYS-754 | Добавлена функция `cloudbroker.account.update_resource_types`. | +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_remove`, `cloudapi.compute.anti_affinity_rule_add`, `cloudapi.compute.anti_affinity_rule_remove`: в перечисляемый тип `AffinityTopology` было добавлено значение `VM` в связи с переименованием из `vm`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_remove`, `cloudapi.compute.anti_affinity_rule_add`, `cloudapi.compute.anti_affinity_rule_remove`: в перечисляемый тип `AffinityTopology` было добавлено значение `NODE` в связи с переименованием из `node`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`: в перечисляемый тип `BootDevice` было добавлено значение `CDROM` в связи с переименованием из `cdrom`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`: в перечисляемый тип `BootDevice` было добавлено значение `HD` в связи с переименованием из `hd`.| +| BPYS-755 | Функции `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.compute.update`, `cloudapi.bservice.group_get`, `cloudapi.bservice.group_add`, `cloudapi.bservice.group_resize`, `cloudapi.k8s.create`, `cloudapi.k8s.worker_add`, `cloudapi.k8s.workers_group_add`, `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: в перечисляемый тип `Chipset` было добавлено значение `I440FX` в связи с переименованием из `i440fx`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create`: в перечисляемый тип `NumaAffinity` было добавлено значение `NONE` в связи с переименованием из `none`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create`: в перечисляемый тип `NumaAffinity` было добавлено значение `STRICT` в связи с переименованием из `strict`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create`: в перечисляемый тип `NumaAffinity` было добавлено значение `LOOSE` в связи с переименованием из `loose`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `TXMode` было добавлено значение `IOTHREAD` в связи с переименованием из `iothread`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `TXMode` было добавлено значение `SELECTED_BY_HYPERVISOR` в связи с переименованием из `selected by hypervisor`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `TXMode` было добавлено значение `TIMER` в связи с переименованием из `timer`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `Ioeventfd` было добавлено значение `OFF` в связи с переименованием из `off`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `Ioeventfd` было добавлено значение `ON` в связи с переименованием из `on`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `Ioeventfd` было добавлено значение `SELECTED_BY_HYPERVISOR` в связи с переименованием из `selected by hypervisor`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `EventIdx` было добавлено значение `OFF` в связи с переименованием из `off`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `EventIdx` было добавлено значение `ON` в связи с переименованием из `on`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемый тип `EventIdx` было добавлено значение `SELECTED_BY_HYPERVISOR` в связи с переименованием из `selected by hypervisor`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `CHANGEMAC` в связи с переименованием из `changemac`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `CPUPIN` в связи с переименованием из `cpupin`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `DPDK` в связи с переименованием из `dpdk`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `HUGEPAGES` в связи с переименованием из `hugepages`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `NUMA` в связи с переименованием из `numa`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `TRUNK` в связи с переименованием из `trunk`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `VMFeature` было добавлено значение `VFNIC` в связи с переименованием из `vfnic`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `RGResourceType` было добавлено значение `VM` в связи с переименованием из `vm`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `RGResourceType` было добавлено значение `K8S` в связи с переименованием из `k8s`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `RGResourceType` было добавлено значение `LB` в связи с переименованием из `lb`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемый тип `RGResourceType` было добавлено значение `VINS` в связи с переименованием из `vins`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемый тип `AccountResourceType` было добавлено значение `VM` в связи с переименованием из `vm`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемый тип `AccountResourceType` было добавлено значение `K8S` в связи с переименованием из `k8s`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемый тип `AccountResourceType` было добавлено значение `LB` в связи с переименованием из `lb`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемый тип `AccountResourceType` было добавлено значение `VINS` в связи с переименованием из `vins`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемый тип `AccountResourceType` было добавлено значение `FLIPGROUP` в связи с переименованием из `flipgroup`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `ImageType` было добавлено значение `CDROM` в связи с переименованием из `cdrom`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `ImageType` было добавлено значение `LINUX` в связи с переименованием из `linux`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `ImageType` было добавлено значение `UNKNOWN` в связи с переименованием из `unknown`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `ImageType` было добавлено значение `VIRTUAL` в связи с переименованием из `virtual`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `ImageType` было добавлено значение `WINDOWS` в связи с переименованием из `windows`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `NetIfaceNamingTemplate` было добавлено значение `ENS` в связи с переименованием из `ens`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `NetIfaceNamingTemplate` было добавлено значение `ETH` в связи с переименованием из `eth`.| +| BPYS-755 | Функции `cloudapi.vins.get`, `cloudapi.vins.nat_rule_add`, `cloudapi.vins.nat_rule_list`, `cloudapi.compute.pfw_list`, `cloudapi.compute.pfw_add`, `cloudapi.compute.pfw_del`: в перечисляемый тип `NATRuleProtocol` было добавлено значение `TCP` в связи с переименованием из `tcp`.| +| BPYS-755 | Функции `cloudapi.vins.get`, `cloudapi.vins.nat_rule_add`, `cloudapi.vins.nat_rule_list`, `cloudapi.compute.pfw_list`, `cloudapi.compute.pfw_add`, `cloudapi.compute.pfw_del`: в перечисляемый тип `NATRuleProtocol` было добавлено значение `UDP` в связи с переименованием из `udp`.| +| BPYS-755 | Функция `cloudapi.vins.get`: в перечисляемый тип `VNFDevType` было добавлено значение `VYOS` в связи с переименованием из `vyos`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `BootMode` было добавлено значение `BIOS` в связи с переименованием из `bios`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемый тип `BootMode` было добавлено значение `UEFI` в связи с переименованием из `uefi`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`: в перечисляемый тип `BootLoaderType` было добавлено значение `LINUX` в связи с переименованием из `linux`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`: в перечисляемый тип `BootLoaderType` было добавлено значение `UNKNOWN` в связи с переименованием из `unknown`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`: в перечисляемый тип `BootLoaderType` было добавлено значение `WINDOWS` в связи с переименованием из `windows`.| +| BPYS-755 | Функция `cloudapi.compute.change_link_state`: в перечисляемый тип `LinkState` было добавлено значение `ON` в связи с переименованием из `on`.| +| BPYS-755 | Функция `cloudapi.compute.change_link_state`: в перечисляемый тип `LinkState` было добавлено значение `OFF` в связи с переименованием из `off`.| +| BPYS-768 | Добавлена функция `cloudbroker.account.update_user`. | +| BPYS-752 | Добавлена функция `cloudbroker.account.update`. | +| BPYS-756 | Добавлен атрибут `status_code` в классе `RequestException`. | +| BPYS-767 | Функция `cloudapi.rg.update`: добавлен параметр `storage_policies_quotas` в связи с переименованием из `storage_policies`. | +| BPYS-762 | Функция `cloudbroker.compute.migrate_storage_list`: добавлен атрибут `CloudbrokerComputeMigrateStorageListResultModel.data.source_node_id` в связи с переименованием из `source_stack_id`. | +| BPYS-763 | Функция `cloudbroker.compute.migrate_storage_list`: добавлен атрибут `CloudbrokerComputeMigrateStorageListResultModel.data.target_node_id` в связи с переименованием из `target_stack_id`. | +| BPYS-800 | Добавлена функция `cloudbroker.account.update_compute_features`. | +| BPYS-787 | Функция `cloudapi.bservice.group_add`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-789 | Функция `cloudapi.bservice.group_resize`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-791 | Функция `cloudapi.k8s.create`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-793 | Функция `cloudapi.k8s.worker_add`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-795 | Функция `cloudapi.k8s.workers_group_add`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-797 | Функция `cloudapi.kvmx86.create`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-799 | Функция `cloudapi.kvmx86.create_blank`: у параметра `chipset` изменено значение по умолчанию с `Chipset.I440FX` на `Chipset.Q35`. | +| BPYS-810 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.pinned_to_node` в связи с переименованием из `pinned_to_stack`. | +| BPYS-811 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.read_only`. | +| BPYS-807 | Добавлена функция `cloudapi.compute.pin_to_node` в связи с переименованием из `cloudapi.compute.pin_to_stack`. | +| BPYS-808 | Добавлена функция `cloudapi.compute.unpin_from_node` в связи с переименованием из `cloudapi.compute.unpin_from_stack`. | +| BPYS-833 | Добавлена функция `cloudbroker.compute.change_read_only`. | +| BPYS-813 | Функция `cloudapi.kvmx86.create_blank`: добавлен параметр `cpu_pin`. | +| BPYS-814 | Функция `cloudapi.kvmx86.create_blank`: добавлен параметр `hp_backed`. | +| BPYS-815 | Функция `cloudapi.kvmx86.create_blank`: добавлен параметр `numa_affinity`. | +| BPYS-830 | Функция `cloudapi.vins.get`: добавлен атрибут `CloudapiVinsGetResultModel.vnfdev.config.resources.node_id` в связи с переименованием из `stack_id`. | +| BPYS-828 | Функция `cloudapi.bservice.get`: добавлен атрибут `CloudapiBserviceGetResultModel.vms.node_id` в связи с переименованием из `stack_id`. | +| BPYS-824 | Функция `cloudbroker.compute.start_migration_in`: добавлен параметр `node_id` в связи с переименованием из `stack_id`. | +| BPYS-821 | Функция `cloudapi.compute.list`: добавлен атрибут `CloudapiComputeListResultModel.data.pinned_to_node` в связи с переименованием из `pinned_to_stack`. | +| BPYS-821 | Функция `cloudapi.compute.list_deleted`: добавлен атрибут `CloudapiComputeListDeletedResultModel.data.pinned_to_node` в связи с переименованием из `pinned_to_stack`. | +| BPYS-822 | Функция `cloudapi.compute.list`: добавлен атрибут `CloudapiComputeListResultModel.data.read_only`. | +| BPYS-822 | Функция `cloudapi.compute.list_deleted`: добавлен атрибут `CloudapiComputeListDeletedResultModel.data.read_only`. | +| BPYS-758 | Добавлена возможность обращаться к аттрибутам `cloudapi`, `cloudbroker`, `system` через аттрибуты `ca`, `cb`, `sys`. | +| BPYS-803 | Функция `cloudapi.compute.list`: добавлен атрибут `CloudapiComputeListResultModel.data.total_disks_size_gb` в связи с переименованием из `total_disks_size`. | +| BPYS-803 | Функция `cloudapi.compute.list_deleted`: добавлен атрибут `CloudapiComputeListDeletedResultModel.data.total_disks_size_gb` в связи с переименованием из `total_disks_size`. | +| BPYS-804 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.size_used_gb` в связи с переименованием из `size_used`. | +| BPYS-804 | Функция `cloudapi.disk.get`: добавлен атрибут `CloudapiDiskGetResultModel.size_used_gb` в связи с переименованием из `size_used`. | +| BPYS-804 | Функция `cloudapi.disk.list_deleted`: добавлен атрибут `CloudapiDiskListDeletedResultModel.data.size_used_gb` в связи с переименованием из `size_used`. | +| BPYS-804 | Функция `cloudapi.disk.list_unattached`: добавлен атрибут `CloudapiDiskListUnattachedResultModel.data.size_used_gb` в связи с переименованием из `size_used`. | +| BPYS-804 | Функция `cloudapi.disk.list`: добавлен атрибут `CloudapiDiskListResultModel.data.size_used_gb` в связи с переименованием из `size_used`. | +| BPYS-805 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.size_available_gb` в связи с переименованием из `size_available`. | +| BPYS-805 | Функция `cloudapi.disk.get`: добавлен атрибут `CloudapiDiskGetResultModel.size_available_gb` в связи с переименованием из `size_available`. | +| BPYS-805 | Функция `cloudapi.disk.list_deleted`: добавлен атрибут `CloudapiDiskListDeletedResultModel.data.size_available_gb` в связи с переименованием из `size_available`. | +| BPYS-805 | Функция `cloudapi.disk.list_unattached`: добавлен атрибут `CloudapiDiskListUnattachedResultModel.data.size_available_gb` в связи с переименованием из `size_available`. | +| BPYS-805 | Функция `cloudapi.disk.list`: добавлен атрибут `CloudapiDiskListResultModel.data.size_available_gb` в связи с переименованием из `size_available`. | +| BPYS-832 | Функция `cloudapi.pcidevice.list`: добавлен атрибут `CloudapiPcideviceListResultModel.data.node_id` в связи с переименованием из `stack_id`. | +| BPYS-834 | Реализовано добавление генерируемых полей моделей в словарь, возвращаемый методом `model_dump`. | +| BPYS-844 | Функция `cloudapi.compute.redeploy`: у параметра `storage_policy_id` добавлено значение по умолчанию `None`. | +| BPYS-839 | Функция `cloudapi.disks.list_types`: в перечисляемом типе `PoolDiskType` был добавлен атрибут `BOOT` в связи с переименованием из `B`.| +| BPYS-839 | Функция `cloudapi.disks.list_types`: в перечисляемом типе `PoolDiskType` был добавлен атрибут `DATA` в связи с переименованием из `D`.| +| BPYS-839 | Функции `cloudapi.compute.disk_add`, `cloudapi.compute.disk_attach`, `cloudapi.compute.get`, `cloudapi.disks.get`, `cloudapi.disks.list`, `cloudapi.disks.list_deleted`, `cloudapi.disks.list_unattached`: в перечисляемом типе `DiskType` был добавлен атрибут `BOOT` в связи с переименованием из `B`.| +| BPYS-839 | Функции `cloudapi.compute.disk_add`, `cloudapi.compute.disk_attach`, `cloudapi.compute.get`, `cloudapi.disks.get`, `cloudapi.disks.list`, `cloudapi.disks.list_deleted`, `cloudapi.disks.list_unattached`: в перечисляемом типе `DiskType` был добавлен атрибут `DATA` в связи с переименованием из `D`.| +| BPYS-836 | Функция `cloudapi.account.get`: добавлен атрибут `CloudapiAccountGetResultModel.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.account.list_deleted`: добавлен атрибут `CloudapiAccountListDeletedResultModel.data.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.account.list`: добавлен атрибут `CloudapiAccountListResultModel.data.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.account.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.rg.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.vm.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.compute.user_list`: добавлен атрибут `CloudapiComputeUserListResultModel.data.acl.account.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.compute.user_list`: добавлен атрибут `CloudapiComputeUserListResultModel.data.acl.rg.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.compute.user_list`: добавлен атрибут `CloudapiComputeUserListResultModel.data.acl.vm.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.k8s.get`: добавлен атрибут `CloudapiK8sGetResultModel.acl.account.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.k8s.get`: добавлен атрибут `CloudapiK8sGetResultModel.acl.k8s.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.k8s.get`: добавлен атрибут `CloudapiK8sGetResultModel.acl.rg.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.rg.get`: добавлен атрибут `CloudapiRgGetResultModel.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.rg.list_deleted`: добавлен атрибут `CloudapiRgListDeletedResultModel.data.account_acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.rg.list_deleted`: добавлен атрибут `CloudapiRgListDeletedResultModel.data.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudapi.rg.list`: добавлен атрибут `CloudapiRgListResultModel.data.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudbroker.account.get`: добавлен атрибут `CloudbrokerAccountGetResultModel.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudbroker.account.list_deleted`: добавлен атрибут `CloudbrokerAccountListDeletedResultModel.data.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-836 | Функция `cloudbroker.account.list`: добавлен атрибут `CloudbrokerAccountListResultModel.data.acl.user_name` в связи с переименованием из `user_group_id`. | +| BPYS-838 | Функция `cloudapi.bservice.group_parent_add`: добавлен параметр `child_id` в связи с переименованием из `bsgroup_id`. | +| BPYS-838 | Функция `cloudapi.bservice.group_parent_remove`: добавлен параметр `child_id` в связи с переименованием из `bsgroup_id`. | +| BPYS-840 | Функция `cloudapi.compute.list_deleted`: добавлен атрибут `CloudapiComputeListDeletedResultModel.data.pci_devices` в связи с переименованием из `devices`. | +| BPYS-840 | Функция `cloudapi.compute.list`: добавлен атрибут `CloudapiComputeListResultModel.data.pci_devices` в связи с переименованием из `devices`. | +| BPYS-853 | Функция `cloudapi.vins.get`: добавлен атрибут `CloudapiVinsGetResultModel.vnfdev.config.mgmt.user_name` в связи с переименованием из `user`. | +| BPYS-866 | Функция `cloudbroker.user.create`: добавлен параметр `email_address` в связи с переименованием из `email_addresses`. | +| BPYS-866 | Функция `cloudbroker.user.create`: у параметра `email_address` изменен тип с `list[str]` на `str`. | +| BPYS-866 | Функция `cloudbroker.user.create`: тип ответа функции изменен с `bool` на `str`. | +| BPYS-869 | Функция `cloudbroker.user.list`: добавлено значение по умолчанию `1` для параметра `page_number`. | +| BPYS-870 | Функция `cloudbroker.user.list`: добавлено значение по умолчанию `100` для параметра `page_size`. | +| BPYS-858 | Функция `cloudapi.storage_policy.list`: добавлен параметр `sep_tech_status`. | +| BPYS-864 | Функция `cloudbroker.storage_policy.list`: добавлен параметр `sep_tech_status`. | +| BPYS-860 | Функция `cloudapi.storage_policy.list`: добавлен атрибут `CloudapiStoragePolicyListResultModel.data.sep_pools.sep_tech_status`. | +| BPYS-860 | Функция `cloudbroker.storage_policy.list`: добавлен атрибут `CloudbrokerStoragePolicyListResultModel.data.sep_pools.sep_tech_status`. | +| BPYS-885 | Функции `cloudapi.trunk.list`, `cloudapi.trunk.get`: добавлен атрибут `TrunkAPIResultNM.mtu`. | +| BPYS-875 | Функция `cloudapi.compute.list`: добавлен атрибут `CloudapiComputeListResultModel.data.disks.sep_id`. | +| BPYS-878 | Функция `cloudapi.kvmx86.create`: добавлен параметр `interfaces.net_prefix`. | +| BPYS-878 | Функция `cloudapi.kvmx86.create_blank`: добавлен параметр `interfaces.net_prefix`. | +| BPYS-874 | Функция `cloudapi.account.get`: добавлен атрибут `CloudapiAccountGetResultModel.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.account.list_deleted`: добавлен атрибут `CloudapiAccountListDeletedResultModel.data.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.account.list`: добавлен атрибут `CloudapiAccountListResultModel.data.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.account.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.rg.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.compute.get`: добавлен атрибут `CloudapiComputeGetResultModel.acl.vm.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.compute.user_list`: добавлен атрибут `CloudapiComputeUserListResultModel.data.acl.account.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.compute.user_list`: добавлен атрибут `CloudapiComputeUserListResultModel.data.acl.rg.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.compute.user_list`: добавлен атрибут `CloudapiComputeUserListResultModel.data.acl.vm.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.k8s.get`: добавлен атрибут `CloudapiK8sGetResultModel.acl.account.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.k8s.get`: добавлен атрибут `CloudapiK8sGetResultModel.acl.k8s.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.k8s.get`: добавлен атрибут `CloudapiK8sGetResultModel.acl.rg.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.rg.get`: добавлен атрибут `CloudapiRgGetResultModel.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.rg.list_deleted`: добавлен атрибут `CloudapiRgListDeletedResultModel.data.account_acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.rg.list_deleted`: добавлен атрибут `CloudapiRgListDeletedResultModel.data.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudapi.rg.list`: добавлен атрибут `CloudapiRgListResultModel.data.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudbroker.account.get`: добавлен атрибут `CloudbrokerAccountGetResultModel.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudbroker.account.list_deleted`: добавлен атрибут `CloudbrokerAccountListDeletedResultModel.data.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-874 | Функция `cloudbroker.account.list`: добавлен атрибут `CloudbrokerAccountListResultModel.data.acl.user_emails` в связи с переименованием из `emails`. | +| BPYS-895 | Функции `cloudapi.disks.get`, `cloudapi.disks.list`, `cloudapi.disks.list_deleted`, `cloudapi.sep.list_available_sep_and_pools`: в перечисляемый тип `SEPType` добавлен атрибут `USTOR`. | +| BPYS-910 | Функция `cloudapi.compute.get`: в модель результата добавлено поле `disks.cache_mode`. | +| BPYS-912 | Функция `cloudapi.disks.get`: в модель результата добавлено поле `cache_mode`. | +| BPYS-911 | Функции `cloudapi.disks.list`, `cloudapi.disks.list_deleted`: в модели результата добавлено поле `cache_mode`. | +| BPYS-880 | Функция `cloudapi.compute.net_attach`: добавлен параметр `net_prefix`. | +| BPYS-941 | Функция `cloudapi.zone.get`: в модель результата добавлено поле `node_auto_start`. | +| BPYS-942 | Функция `cloudapi.zone.list`: в модель результата добавлено поле `data.node_auto_start`. | +| BPYS-976 | Функция `cloudapi.compute.net_attach`: добавлен параметр `sdn_segment_id`. | +| BPYS-977 | Функция `cloudapi.compute.net_attach`: добавлен параметр `sdn_object_group_id`. | +| BPYS-978 | Функция `cloudapi.compute.net_attach`: добавлен параметр `sdn_logical_port_display_name`. | +| BPYS-979 | Функция `cloudapi.compute.net_attach`: добавлен параметр `sdn_logical_port_description`. | +| BPYS-984 | Функции `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: добавлен параметр `interfaces.sdn_segment_id`. | +| BPYS-985 | Функции `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: добавлен параметр `interfaces.sdn_object_group_id`. | +| BPYS-986 | Функции `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: добавлен параметр `interfaces.sdn_logical_port_display_name`. | +| BPYS-987 | Функции `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: добавлен параметр `interfaces.sdn_logical_port_description`. | +| BPYS-996 | Функция `cloudapi.compute.get`: в модель результата добавлено поле `disks.blkdiscard`. | +| BPYS-997 | Функция `cloudapi.disks.get`: в модель результата добавлено поле `blkdiscard`. | +| BPYS-998 | Функции `cloudapi.disks.list`, `cloudapi.disks.list_deleted`: в модели результата добавлено поле `data.blkdiscard`. | ## Удалено | Идентификатор
задачи | Описание | | --- | --- | +| BPYS-733 | Функция `cloudapi.account.get`: удален атрибут `CloudapiAccountGetResultModel.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudapi.account.update`: удален параметр `uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudapi.rg.get`: удален атрибут `CloudapiRgGetResultModel.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudapi.rg.list_deleted`: удален атрибут `CloudapiRgListDeletedResultModel.data.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudapi.rg.list`: удален атрибут `CloudapiRgListResultModel.data.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudapi.rg.update`: удален параметр `clear_uniq_pools` в связи с переименованием из `clear_sep_pools`. | +| BPYS-733 | Функция `cloudapi.rg.update`: удален параметр `uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudbroker.account.create`: удален параметр `uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudbroker.account.get`: удален атрибут `CloudbrokerAccountGetResultModel.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudbroker.account.list_deleted`: удален атрибут `CloudbrokerAccountListDeletedResultModel.data.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-733 | Функция `cloudbroker.account.list`: удален атрибут `CloudbrokerAccountListResultModel.data.uniq_pools` в связи с переименованием в `sep_pools`. | +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_remove`, `cloudapi.compute.anti_affinity_rule_add`, `cloudapi.compute.anti_affinity_rule_remove`: в перечисляемом типе `AffinityTopology` было удалено значение `vm` в связи с переименованием в `VM`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_add`, `cloudapi.compute.affinity_rule_remove`, `cloudapi.compute.anti_affinity_rule_add`, `cloudapi.compute.anti_affinity_rule_remove`: в перечисляемом типе `AffinityTopology` было удалено значение `node` в связи с переименованием в `NODE`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`: в перечисляемом типе `BootDevice` было удалено значение `cdrom` в связи с переименованием в `CDROM`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`: в перечисляемом типе `BootDevice` было удалено значение `hd` в связи с переименованием в `HD`.| +| BPYS-755 | Функции `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.compute.update`, `cloudapi.bservice.group_get`, `cloudapi.bservice.group_add`, `cloudapi.bservice.group_resize`, `cloudapi.k8s.create`, `cloudapi.k8s.worker_add`, `cloudapi.k8s.workers_group_add`, `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: в перечисляемом типе `Chipset` было удалено значение `i440fx` в связи с переименованием в `I440FX`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create`: в перечисляемом типе `NumaAffinity` было удалено значение `none` в связи с переименованием в `NONE`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create`: в перечисляемом типе `NumaAffinity` было удалено значение `strict` в связи с переименованием в `STRICT`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create`: в перечисляемом типе `NumaAffinity` было удалено значение `loose` в связи с переименованием в `LOOSE`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `TXMode` было удалено значение `iothread` в связи с переименованием в `IOTHREAD`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `TXMode` было удалено значение `selected by hypervisor` в связи с переименованием в `SELECTED_BY_HYPERVISOR`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `TXMode` было удалено значение `timer` в связи с переименованием в `TIMER`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `Ioeventfd` было удалено значение `off` в связи с переименованием в `OFF`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `Ioeventfd` было удалено значение `on` в связи с переименованием в `ON`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `Ioeventfd` было удалено значение `selected by hypervisor` в связи с переименованием в `SELECTED_BY_HYPERVISOR`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `EventIdx` было удалено значение `off` в связи с переименованием в `OFF`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `EventIdx` было удалено значение `on` в связи с переименованием в `ON`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.net_attach`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.vins.get`: в перечисляемом типе `EventIdx` было удалено значение `selected by hypervisor` в связи с переименованием в `SELECTED_BY_HYPERVISOR`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `changemac` в связи с переименованием в `CHANGEMAC`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `cpupin` в связи с переименованием в `CPUPIN`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `dpdk` в связи с переименованием в `DPDK`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `hugepages` в связи с переименованием в `HUGEPAGES`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `numa` в связи с переименованием в `NUMA`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `trunk` в связи с переименованием в `TRUNK`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudapi.account.list`, `cloudapi.account.list_deleted` `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`, `cloudbroker.account.create`, `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `VMFeature` было удалено значение `vfnic` в связи с переименованием в `VFNIC`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `RGResourceType` было удалено значение `vm` в связи с переименованием в `VM`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `RGResourceType` было удалено значение `k8s` в связи с переименованием в `K8S`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `RGResourceType` было удалено значение `lb` в связи с переименованием в `LB`.| +| BPYS-755 | Функции `cloudapi.rg.get`, `cloudapi.rg.list`, `cloudapi.rg.list_deleted`: в перечисляемом типе `RGResourceType` было удалено значение `vins` в связи с переименованием в `VINS`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемом типе `AccountResourceType` было удалено значение `vm` в связи с переименованием в `VM`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемом типе `AccountResourceType` было удалено значение `k8s` в связи с переименованием в `K8S`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемом типе `AccountResourceType` было удалено значение `lb` в связи с переименованием в `LB`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемом типе `AccountResourceType` было удалено значение `vins` в связи с переименованием в `VINS`.| +| BPYS-755 | Функции `cloudapi.account.get`, `cloudbroker.account.get`, `cloudbroker.account.list`, `cloudbroker.account.list_deleted`: в перечисляемом типе `AccountResourceType` было удалено значение `flipgroup` в связи с переименованием в `FLIPGROUP`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `ImageType` было удалено значение `cdrom` в связи с переименованием в `CDROM`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `ImageType` было удалено значение `linux` в связи с переименованием в `LINUX`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `ImageType` было удалено значение `unknown` в связи с переименованием в `UNKNOWN`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `ImageType` было удалено значение `virtual` в связи с переименованием в `VIRTUAL`.| +| BPYS-755 | Функции `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `ImageType` было удалено значение `windows` в связи с переименованием в `WINDOWS`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `NetIfaceNamingTemplate` было удалено значение `ens` в связи с переименованием в `ENS`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `NetIfaceNamingTemplate` было удалено значение `eth` в связи с переименованием в `ETH`.| +| BPYS-755 | Функции `cloudapi.vins.get`, `cloudapi.vins.nat_rule_add`, `cloudapi.vins.nat_rule_list`, `cloudapi.compute.pfw_list`, `cloudapi.compute.pfw_add`, `cloudapi.compute.pfw_del`: в перечисляемом типе `NATRuleProtocol` было удалено значение `tcp` в связи с переименованием в `TCP`.| +| BPYS-755 | Функции `cloudapi.vins.get`, `cloudapi.vins.nat_rule_add`, `cloudapi.vins.nat_rule_list`, `cloudapi.compute.pfw_list`, `cloudapi.compute.pfw_add`, `cloudapi.compute.pfw_del`: в перечисляемом типе `NATRuleProtocol` было удалено значение `udp` в связи с переименованием в `UDP`.| +| BPYS-755 | Функция `cloudapi.vins.get`: в перечисляемом типе `VNFDevType` было удалено значение `vyos` в связи с переименованием в `VYOS`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `BootMode` было удалено значение `bios` в связи с переименованием в `BIOS`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`, `cloudapi.image.list`: в перечисляемом типе `BootMode` было удалено значение `uefi` в связи с переименованием в `UEFI`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`: в перечисляемом типе `BootLoaderType` было удалено значение `linux` в связи с переименованием в `LINUX`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`: в перечисляемом типе `BootLoaderType` было удалено значение `unknown` в связи с переименованием в `UNKNOWN`.| +| BPYS-755 | Функции `cloudapi.compute.get`, `cloudapi.compute.update`, `cloudapi.compute.list`, `cloudapi.compute.list_deleted`, `cloudapi.kvmx86.create_blank`, `cloudapi.image.create`, `cloudapi.image.get`: в перечисляемом типе `BootLoaderType` было удалено значение `windows` в связи с переименованием в `WINDOWS`.| +| BPYS-755 | Функция `cloudapi.compute.change_link_state`: в перечисляемом типе `LinkState` было удалено значение `on` в связи с переименованием в `ON`.| +| BPYS-755 | Функция `cloudapi.compute.change_link_state`: в перечисляемом типе `LinkState` было удалено значение `off` в связи с переименованием в `OFF`.| +| BPYS-767 | Функция `cloudapi.rg.update`: удален параметр `storage_policies` в связи с переименованием в `storage_policies_quotas`. | +| BPYS-762 | Функция `cloudbroker.compute.migrate_storage_list`: удален атрибут `CloudbrokerComputeMigrateStorageListResultModel.data.source_stack_id` в связи с переименованием в `source_node_id`. | +| BPYS-763 | Функция `cloudbroker.compute.migrate_storage_list`: удален атрибут `CloudbrokerComputeMigrateStorageListResultModel.data.target_stack_id` в связи с переименованием в `target_node_id`. | +| BPYS-765 | Функция `cloudapi.account.update`: удален параметр `ext_traffic_quota`. | +| BPYS-771 | Функция `cloudbroker.account.create`: удален параметр `ext_traffic_quota`. | +| BPYS-783 | Функция `cloudapi.rg.update`: удален параметр `ext_traffic_quota`. | +| BPYS-810 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.pinned_to_stack` в связи с переименованием в `pinned_to_node`. | +| BPYS-807 | Удалена функция `cloudapi.compute.pin_to_stack` в связи с переименованием в `cloudapi.compute.pin_to_node`. | +| BPYS-808 | Удалена функция `cloudapi.compute.unpin_from_stack` в связи с переименованием в `cloudapi.compute.unpin_from_node`. | +| BPYS-830 | Функция `cloudapi.vins.get`: удален атрибут `CloudapiVinsGetResultModel.vnfdev.config.resources.stack_id` в связи с переименованием в `node_id`. | +| BPYS-828 | Функция `cloudapi.bservice.get`: удален атрибут `CloudapiBserviceGetResultModel.vms.stack_id` в связи с переименованием в `node_id`. | +| BPYS-824 | Функция `cloudbroker.compute.start_migration_in`: удален параметр `stack_id` в связи с переименованием в `node_id`. | +| BPYS-818 | Удалена функция `cloudapi.stack.get`. | +| BPYS-785 | Функция `cloudapi.rg.create`: удален параметр `ext_traffic_quota`. | +| BPYS-821 | Функция `cloudapi.compute.list`: удален атрибут `CloudapiComputeListResultModel.data.pinned_to_stack` в связи с переименованием в `pinned_to_node`. | +| BPYS-821 | Функция `cloudapi.compute.list_deleted`: удален атрибут `CloudapiComputeListDeletedResultModel.data.pinned_to_stack` в связи с переименованием в `pinned_to_node`. | +| BPYS-803 | Функция `cloudapi.compute.list`: удален атрибут `CloudapiComputeListResultModel.data.total_disks_size` в связи с переименованием в `total_disks_size_gb`. | +| BPYS-803 | Функция `cloudapi.compute.list_deleted`: удален атрибут `CloudapiComputeListDeletedResultModel.data.total_disks_size` в связи с переименованием в `total_disks_size_gb`. | +| BPYS-804 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.size_used` в связи с переименованием в `size_used_gb`. | +| BPYS-804 | Функция `cloudapi.disk.get`: удален атрибут `CloudapiDiskGetResultModel.size_used` в связи с переименованием в `size_used_gb`. | +| BPYS-804 | Функция `cloudapi.disk.list_deleted`: удален атрибут `CloudapiDiskListDeletedResultModel.data.size_used` в связи с переименованием в `size_used_gb`. | +| BPYS-804 | Функция `cloudapi.disk.list_unattached`: удален атрибут `CloudapiDiskListUnattachedResultModel.data.size_used` в связи с переименованием в `size_used_gb`. | +| BPYS-804 | Функция `cloudapi.disk.list`: удален атрибут `CloudapiDiskListResultModel.data.size_used` в связи с переименованием в `size_used_gb`. | +| BPYS-805 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.size_available` в связи с переименованием в `size_available_gb`. | +| BPYS-805 | Функция `cloudapi.disk.get`: удален атрибут `CloudapiDiskGetResultModel.size_available` в связи с переименованием в `size_available_gb`. | +| BPYS-805 | Функция `cloudapi.disk.list_deleted`: удален атрибут `CloudapiDiskListDeletedResultModel.data.size_available` в связи с переименованием в `size_available_gb`. | +| BPYS-805 | Функция `cloudapi.disk.list_unattached`: удален атрибут `CloudapiDiskListUnattachedResultModel.data.size_available` в связи с переименованием в `size_available_gb`. | +| BPYS-805 | Функция `cloudapi.disk.list`: удален атрибут `CloudapiDiskListResultModel.data.size_available` в связи с переименованием в `size_available_gb`. | +| BPYS-766 | Функция `cloudapi.account.get`: удален атрибут `CloudapiAccountGetResultModel.quotas.ext_traffic`. | +| BPYS-766 | Функция `cloudbroker.account.get`: удален атрибут `CloudbrokerAccountGetResultModel.quotas.ext_traffic`. | +| BPYS-766 | Функция `cloudbroker.account.list`: удален атрибут `CloudbrokerAccountListResultModel.data.quotas.ext_traffic`. | +| BPYS-766 | Функция `cloudbroker.account.list_deleted`: удален атрибут `CloudbrokerAccountListDeletedResultModel.data.quotas.ext_traffic`. | +| BPYS-766 | Функция `cloudapi.rg.get`: удален атрибут `CloudapiRgGetResultModel.quotas.ext_traffic`. | +| BPYS-766 | Функция `cloudapi.rg.list`: удален атрибут `CloudapiRgListResultModel.data.quotas.ext_traffic`. | +| BPYS-766 | Функция `cloudapi.rg.list_deleted`: удален атрибут `CloudapiRgListDeletedResultModel.data.quotas.ext_traffic`. | +| BPYS-819 | Удалена функция `cloudapi.stack.list`. | +| BPYS-832 | Функция `cloudapi.pcidevice.list`: удален атрибут `CloudapiPcideviceListResultModel.data.stack_id` в связи с переименованием в `node_id`. | +| BPYS-850 | Функция `cloudapi.account.get_resource_consumption`: удален атрибут `CloudapiAccountGetResourceConsumptionResultModel.consumed.ext_traffic`. | +| BPYS-850 | Функция `cloudapi.rg.get_resource_consumption`: удален атрибут `CloudapiRgGetResourceConsumptionResultModel.consumed.ext_traffic`. | +| BPYS-850 | Функция `cloudapi.user.get_resource_consumption`: удален атрибут `CloudapiUserGetResourceConsumptionResultModel.consumed.ext_traffic`. | +| BPYS-850 | Функция `cloudbroker.account.get_resource_consumption`: удален атрибут `CloudbrokerAccountGetResourceConsumptionResultModel.consumed.ext_traffic`. | +| BPYS-851 | Функция `cloudapi.account.get_resource_consumption`: удален атрибут `CloudapiAccountGetResourceConsumptionResultModel.reserved.ext_traffic`. | +| BPYS-851 | Функция `cloudapi.rg.get_resource_consumption`: удален атрибут `CloudapiRgGetResourceConsumptionResultModel.reserved.ext_traffic`. | +| BPYS-851 | Функция `cloudapi.user.get_resource_consumption`: удален атрибут `CloudapiUserGetResourceConsumptionResultModel.reserved.ext_traffic`. | +| BPYS-851 | Функция `cloudbroker.account.get_resource_consumption`: удален атрибут `CloudbrokerAccountGetResourceConsumptionResultModel.reserved.ext_traffic`. | +| BPYS-852 | Функция `cloudapi.account.get_resource_consumption`: удален атрибут `CloudapiAccountGetResourceConsumptionResultModel.quotas.ext_traffic`. | +| BPYS-852 | Функция `cloudapi.rg.get_resource_consumption`: удален атрибут `CloudapiRgGetResourceConsumptionResultModel.quotas.ext_traffic`. | +| BPYS-852 | Функция `cloudbroker.account.get_resource_consumption`: удален атрибут `CloudbrokerAccountGetResourceConsumptionResultModel.quotas.ext_traffic`. | +| BPYS-839 | Функция `cloudapi.disks.list_types`: в перечисляемом типе `PoolDiskType` был удален атрибут `B` в связи с переименованием в `BOOT`.| +| BPYS-839 | Функция `cloudapi.disks.list_types`: в перечисляемом типе `PoolDiskType` был удален атрибут `D` в связи с переименованием в `DATA`.| +| BPYS-839 | Функции `cloudapi.compute.disk_add`, `cloudapi.compute.disk_attach`, `cloudapi.compute.get`, `cloudapi.disks.get`, `cloudapi.disks.list`, `cloudapi.disks.list_deleted`, `cloudapi.disks.list_unattached`: в перечисляемом типе `DiskType` был удален атрибут `B` в связи с переименованием в `BOOT`.| +| BPYS-839 | Функции `cloudapi.compute.disk_add`, `cloudapi.compute.disk_attach`, `cloudapi.compute.get`, `cloudapi.disks.get`, `cloudapi.disks.list`, `cloudapi.disks.list_deleted`, `cloudapi.disks.list_unattached`: в перечисляемом типе `DiskType` был удален атрибут `D` в связи с переименованием в `DATA`.| +| BPYS-836 | Функция `cloudapi.account.get`: удален атрибут `CloudapiAccountGetResultModel.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.account.list_deleted`: удален атрибут `CloudapiAccountListDeletedResultModel.data.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.account.list`: удален атрибут `CloudapiAccountListResultModel.data.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.acl.account.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.acl.rg.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.acl.vm.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.compute.user_list`: удален атрибут `CloudapiComputeUserListResultModel.data.acl.account.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.compute.user_list`: удален атрибут `CloudapiComputeUserListResultModel.data.acl.rg.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.compute.user_list`: удален атрибут `CloudapiComputeUserListResultModel.data.acl.vm.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.k8s.get`: удален атрибут `CloudapiK8sGetResultModel.acl.account.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.k8s.get`: удален атрибут `CloudapiK8sGetResultModel.acl.k8s.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.k8s.get`: удален атрибут `CloudapiK8sGetResultModel.acl.rg.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.rg.get`: удален атрибут `CloudapiRgGetResultModel.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.rg.list_deleted`: удален атрибут `CloudapiRgListDeletedResultModel.data.account_acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.rg.list_deleted`: удален атрибут `CloudapiRgListDeletedResultModel.data.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudapi.rg.list`: удален атрибут `CloudapiRgListResultModel.data.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudbroker.account.get`: удален атрибут `CloudbrokerAccountGetResultModel.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudbroker.account.list_deleted`: удален атрибут `CloudbrokerAccountListDeletedResultModel.data.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-836 | Функция `cloudbroker.account.list`: удален атрибут `CloudbrokerAccountListResultModel.data.acl.user_group_id` в связи с переименованием в `user_name`. | +| BPYS-838 | Функция `cloudapi.bservice.group_parent_add`: удален параметр `bsgroup_id` в связи с переименованием в `child_id`. | +| BPYS-838 | Функция `cloudapi.bservice.group_parent_remove`: удален параметр `bsgroup_id` в связи с переименованием в `child_id`. | +| BPYS-840 | Функция `cloudapi.compute.list_deleted`: удален атрибут `CloudapiComputeListDeletedResultModel.data.devices` в связи с переименованием в `pci_devices`. | +| BPYS-840 | Функция `cloudapi.compute.list`: удален атрибут `CloudapiComputeListResultModel.data.devices` в связи с переименованием в `pci_devices`. | +| BPYS-853 | Функция `cloudapi.vins.get`: удален атрибут `CloudapiVinsGetResultModel.vnfdev.config.mgmt.user` в связи с переименованием в `user_name`. | +| BPYS-866 | Функция `cloudbroker.user.create`: удален параметр `email_addresses` в связи с переименованием в `email_address`. | +| BPYS-874 | Функция `cloudapi.account.get`: удален атрибут `CloudapiAccountGetResultModel.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.account.list_deleted`: удален атрибут `CloudapiAccountListDeletedResultModel.data.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.account.list`: удален атрибут `CloudapiAccountListResultModel.data.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.acl.account.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.acl.rg.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.compute.get`: удален атрибут `CloudapiComputeGetResultModel.acl.vm.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.compute.user_list`: удален атрибут `CloudapiComputeUserListResultModel.data.acl.account.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.compute.user_list`: удален атрибут `CloudapiComputeUserListResultModel.data.acl.rg.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.compute.user_list`: удален атрибут `CloudapiComputeUserListResultModel.data.acl.vm.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.k8s.get`: удален атрибут `CloudapiK8sGetResultModel.acl.account.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.k8s.get`: удален атрибут `CloudapiK8sGetResultModel.acl.k8s.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.k8s.get`: удален атрибут `CloudapiK8sGetResultModel.acl.rg.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.rg.get`: удален атрибут `CloudapiRgGetResultModel.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.rg.list_deleted`: удален атрибут `CloudapiRgListDeletedResultModel.data.account_acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.rg.list_deleted`: удален атрибут `CloudapiRgListDeletedResultModel.data.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudapi.rg.list`: удален атрибут `CloudapiRgListResultModel.data.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudbroker.account.get`: удален атрибут `CloudbrokerAccountGetResultModel.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudbroker.account.list_deleted`: удален атрибут `CloudbrokerAccountListDeletedResultModel.data.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-874 | Функция `cloudbroker.account.list`: удален атрибут `CloudbrokerAccountListResultModel.data.acl.emails` в связи с переименованием в `user_emails`. | +| BPYS-899 | Функция `cloudbroker.compute.clone`: удалена возможность не задавать параметр `storage_policy_id`. | +| BPYS-900 | Функции `cloudapi.compute.list`, `cloudapi.compute.list_deleted`: из модели результата удалено поле `data.snapshot_sets.disks` в связи с переименованием в `data.snapshot_sets.disk_ids`. | +| BPYS-900 | Функция `cloudapi.compute.get`: из модели результата удалено поле `snapshot_sets.disks` в связи с переименованием в `snapshot_sets.disk_ids`. | +| BPYS-900 | Функция `cloudapi.compute.snapshot_list`: из модели результата удалено поле `data.disks` в связи с переименованием в `data.disk_ids`. | +| BPYS-887 | Функции `cloudapi.security_group.get`, `cloudapi.security_group.update`, `cloudbroker.security_group.get`, `cloudbroker.security_group.update`: из модели результата удалено поле `rules.remote_ip_prefix` в связи с переименованием в `rules.remote_net_cidr`. | +| BPYS-887 | Функции `cloudapi.security_group.list`, `cloudbroker.security_group.list`: из модели результата удалено поле `data.rules.remote_ip_prefix` в связи с переименованием в `data.rules.remote_net_cidr`. | +| BPYS-887 | Функции `cloudapi.security_group.create_rule`, `cloudbroker.security_group.create_rule`: удален параметр `remote_ip_prefix` в связи с переименованием в `remote_net_cidr`. | +| BPYS-928 | Функция `cloudapi.image.get`: в моделе ответа тип поля `res_id` изменен с `str` на `str \| None`. | +| BPYS-924 | Функция `cloudbroker.account.update`: для параметра `send_access_emails` изменено значение по умолчанию с `False` на `None` . | +| BPYS-919 | Функция `cloudapi.account.update`: для параметра `send_access_emails` изменено значение по умолчанию с `False` на `None` . | +| BPYS-944 | Функция `cloudapi.bservice.group_add`: удален параметр `driver` . | +| BPYS-936 | Функции `cloudbroker.account.get`, `cloudapi.account.get`, `cloudapi.rg.get`: в моделе ответа тип поля `acl.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функции `cloudapi.account.list_deleted`, `cloudapi.account.list`, `cloudapi.rg.list`, `cloudbroker.account.list`, `cloudapi.rg.list_deleted`, `cloudbroker.account.list_deleted`: в моделе ответа тип поля `data.acl.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функции `cloudapi.k8s.get`, `cloudapi.compute.get`: в моделе ответа тип поля `acl.account.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функции `cloudapi.compute.get`, `cloudapi.k8s.get`: в моделе ответа тип поля `acl.rg.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функция `cloudapi.compute.get`: в моделе ответа тип поля `acl.vm.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функция `cloudapi.compute.user_list`: в моделе ответа тип поля `data.acl.account.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функция `cloudapi.compute.user_list`: в моделе ответа тип поля `data.acl.rg.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функция `cloudapi.compute.user_list`: в моделе ответа тип поля `data.acl.vm.guid` изменен с `str` на `str \| None`. | +| BPYS-936 | Функция `cloudapi.k8s.get`: в моделе ответа тип поля `acl.k8s.guid` изменен с `str` на `str \| None`. | +| BPYS-956 | Функция `cloudapi.flipgroup.list`: удален параметр `rg_id`. | +| BPYS-952 | Функция `cloudapi.flipgroup.get`: из модели результата удалено поле `rg_id` . | +| BPYS-953 | Функция `cloudapi.flipgroup.get`: из модели результата удалено поле `rg_name` . | +| BPYS-999 | Функция `cloudapi.image.get`: из модели результата удалено поле `ckey` . | ## Исправлено | Идентификатор
задачи | Описание | | --- | --- | -| BPYS-990 | Функции `cloudapi.kvmx86.create`, `cloudapi.kvmx86.create_blank`: вызов функций завершался ошибкой валидации поля `sdn_logical_port_id` для модели `InterfaceAPIParamsNM` при передаче данных в параметр `interfaces`. | +| BPYS-842 | Функция `cloudbroker.user.get`: вызов функции завершался ошибкой валидации полей `_ckey` и `_meta`. | +| BPYS-922 | Функция `cloudbroker.account.add_user`: вызов функции завершался ошибкой: `HTTPError: 400 Client Error` при передаче значения `CXDRAU` из перечисляемого типа `AccessType`. Тип параметра был исправлен с `AccessType` на `AccessTypeForSet`. | diff --git a/Makefile b/Makefile deleted file mode 100644 index cd801aa..0000000 --- a/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -dev: - pip install -e . - pip install -r requirements-dev.txt - pre-commit install diff --git a/README.md b/README.md index 0531fb2..ac4803d 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ - [Ошибки валидации данных](#ошибки-валидации-данных) - [Ошибки HTTP](#ошибки-http) - [Ошибка несовместимости c API](#ошибка-несовместимости-с-api) -- [Доступный функционал](#доступный-функционал) +- [Доступная функциональность](#доступная-функциональность) - [Способы авторизации](#способы-авторизации) - [Функции API](#функции-api) - [Cloudapi](#cloudapi) @@ -27,7 +27,7 @@ **Dynamix Python SDK** предоставляет удобный интерфейс для интеграции взаимодействия с API **Dynamix Enterprise** в программный код на языке Python. -**Примечание:** проект находится в стадии активной разработки, [доступный функционал](#доступный-функционал) будет расширяться с каждой новой версией. +**Примечание:** проект находится в стадии активной разработки, [доступная функциональность](#доступная-функциональность) будет расширяться с каждой новой версией. ## Системные требования @@ -35,6 +35,7 @@ | Версия платформы | Версия SDK | | --- | --- | +| 4.5.0 | 1.4.x | | 4.4.0 | 1.3.x | | 4.4.0 build 963 | 1.2.x | | 4.3.0 | 1.1.x | @@ -208,7 +209,7 @@ BVSAuth(
Игнорирование проверки совместимости с API -**Важно:** игнорирование проверки совместимости с API может вызвать непредвиденные ошибки в работе SDK, поэтому использование данного функционала допустимо только принимая на себя всю ответственность за возможные последствия. +**Важно:** игнорирование проверки совместимости с API может вызвать непредвиденные ошибки в работе SDK, поэтому использование данной возможности допустимо только принимая на себя всю ответственность за возможные последствия. При игнорирование выводится только сообщение с предупреждением о несовместимости. @@ -234,17 +235,35 @@ Dynamix( ![](/demo/select_api_function_and_passing_params_and_save_result.gif) +Предусмотрена возможность использования сокращённого названия для некоторых часто используемых атрибутов: + +```python +from dynamix_sdk import Dynamix + + +dx = Dynamix(...) + +# /cloudapi/kvmx86/create +dx.api.ca.kvmx86.create(...) # ca = cloudapi + +# /cloudbroker/account/create +dx.api.cb.account.create(...) # cb = cloudbroker + +# /system/usermanager/whoami +dx.api.sys.usermanager.whoami(...) # sys = system +``` +
Передача вложенных параметров ```python -from dynamix_sdk import Dynamix, types +from dynamix_sdk import Dynamix, types as sdk_types dx = Dynamix(...) -data_disk_1 = types.DiskAPIParamsNM(name='data_disk_1', size_gb=10) +data_disk_1 = sdk_types.DiskAPIParamsNM(name='data_disk_1', size_gb=10) # /cloudapi/kvmx86/create new_vm_id = dx.api.cloudapi.kvmx86.create( @@ -262,7 +281,7 @@ new_vm_id = dx.api.cloudapi.kvmx86.create(
Передача параметров перечисляемого типа (enum) ```python -from dynamix_sdk import Dynamix, types +from dynamix_sdk import Dynamix, types as sdk_types dx = Dynamix(...) @@ -274,8 +293,8 @@ new_vm_id = dx.api.cloudapi.kvmx86.create( cpu_count=1, ram_size_mb=1024, image_id=456, - chipset=types.Chipset.Q35, # enum - numa_affinity=types.NumaAffinity.none, # enum + chipset=sdk_types.Chipset.Q35, # enum + numa_affinity=sdk_types.NumaAffinity.NONE, # enum ) ``` @@ -493,8 +512,13 @@ SDK для выполнения HTTP-запросов использует би from requests.exceptions import RequestException, HTTPError from dynamix_sdk import Dynamix - -dx = Dynamix(...) +try: + dx = Dynamix(...) # происходит HTTP-запрос для проверки совместимости с API +except HTTPError as e: + resp = e.response + print(f'{e}: {resp.text}') +except RequestException as e: + print(e) vm_id = 1 @@ -524,16 +548,17 @@ class RequestException(Exception): orig_exception: requests.exceptions.RequestException func_name: str func_kwargs: None | dict = None + status_code: None | int = None ``` Чтобы включить использование исключения dynamix_sdk.exceptions.RequestException, необходимо передать в конструкторы классов Dynamix, DECS3OAuth, BVSAuth параметр wrap_request_exceptions=True
#### Ошибка несовместимости с API -SDK производит проверку совместимости с API. +При создании экземпляра класса `Dynamix`, SDK производит проверку совместимости с API. При несовместимости будет вызвано исключение `exceptions.IncompatibleAPIError`. -## Доступный функционал +## Доступная функциональность ### Способы авторизации @@ -656,7 +681,7 @@ SDK производит проверку совместимости с API. - /cloudapi/compute/pfwAdd - /cloudapi/compute/pfwDel - /cloudapi/compute/pfwList -- /cloudapi/compute/pinToStack +- /cloudapi/compute/pin_to_node - /cloudapi/compute/powerCycle - /cloudapi/compute/reboot - /cloudapi/compute/redeploy @@ -672,7 +697,7 @@ SDK производит проверку совместимости с API. - /cloudapi/compute/stop - /cloudapi/compute/tagAdd - /cloudapi/compute/tagRemove -- /cloudapi/compute/unpinFromStack +- /cloudapi/compute/unpin_from_node - /cloudapi/compute/update - /cloudapi/compute/userGrant - /cloudapi/compute/userList @@ -872,13 +897,6 @@ SDK производит проверку совместимости с API.
-
stack - -- /cloudapi/stack/get -- /cloudapi/stack/list - -
-
storage_policy - /cloudapi/storage_policy/get @@ -982,6 +1000,12 @@ SDK производит проверку совместимости с API. - /cloudbroker/account/listDeleted - /cloudbroker/account/removeZone - /cloudbroker/account/restore +- /cloudbroker/account/setCpuAllocationParameter +- /cloudbroker/account/setCpuAllocationRatio +- /cloudbroker/account/update +- /cloudbroker/account/updateComputeFeatures +- /cloudbroker/account/updateResourceTypes +- /cloudbroker/account/updateUser
@@ -993,6 +1017,7 @@ SDK производит проверку совместимости с API.
compute +- /cloudbroker/compute/change_read_only - /cloudbroker/compute/change_security_groups - /cloudbroker/compute/clone - /cloudbroker/compute/clone_abort diff --git a/pyproject.toml b/pyproject.toml index 7291146..d9d23c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ authors = [ {name = "Vladislav Nesterov"}, {name = "Stanislav Karimov"}, ] -version = "1.3.2" +version = "1.4.0" readme = "README.md" diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index 99819c6..0000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,2 +0,0 @@ -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 0c8c0d9..322d125 100644 --- a/src/dynamix_sdk/api/_api.py +++ b/src/dynamix_sdk/api/_api.py @@ -8,3 +8,15 @@ class API(_base.BaseAPI): cloudapi: CloudapiAPI cloudbroker: CloudbrokerAPI system: SystemAPI + + @property + def ca(self): + return self.cloudapi + + @property + def cb(self): + return self.cloudbroker + + @property + def sys(self): + return self.system diff --git a/src/dynamix_sdk/api/_nested/enums.py b/src/dynamix_sdk/api/_nested/enums.py index d8fff0d..8ce248c 100644 --- a/src/dynamix_sdk/api/_nested/enums.py +++ b/src/dynamix_sdk/api/_nested/enums.py @@ -25,19 +25,19 @@ class AffinityPolicy(str, _AutoNameEnum): class AffinityTopology(str, _AutoNameEnum): - vm = 'compute' - node = _enum_auto() + VM = 'compute' + NODE = 'node' class BootDevice(str, _AutoNameEnum): - cdrom = _enum_auto() - hd = _enum_auto() - network = _enum_auto() + CDROM = 'cdrom' + HD = 'hd' + NETWORK = 'network' class Chipset(str, _AutoNameEnum): Q35 = _enum_auto() - i440fx = _enum_auto() + I440FX = 'i440fx' class Driver(str, _AutoNameEnum): @@ -61,27 +61,27 @@ class NetTypeForChangeIP(str, _AutoNameEnum): class NumaAffinity(str, _AutoNameEnum): - none = _enum_auto() - strict = _enum_auto() - loose = _enum_auto() + NONE = 'none' + STRICT = 'strict' + LOOSE = 'loose' class TXMode(str, _AutoNameEnum): - iothread = _enum_auto() - selected_by_hypervisor = 'selected by hypervisor' - timer = _enum_auto() + IOTHREAD = 'iothread' + SELECTED_BY_HYPERVISOR = 'selected by hypervisor' + TIMER = 'timer' class Ioeventfd(str, _AutoNameEnum): - off = _enum_auto() - on = _enum_auto() - selected_by_hypervisor = 'selected by hypervisor' + OFF = 'off' + ON = 'on' + SELECTED_BY_HYPERVISOR = 'selected by hypervisor' class EventIdx(str, _AutoNameEnum): - off = _enum_auto() - on = _enum_auto() - selected_by_hypervisor = 'selected by hypervisor' + OFF = 'off' + ON = 'on' + SELECTED_BY_HYPERVISOR = 'selected by hypervisor' class ResourceGroupStatus(str, _AutoNameEnum): @@ -103,13 +103,13 @@ class LockStatus(str, _AutoNameEnum): class VMFeature(str, _AutoNameEnum): - changemac = _enum_auto() - cpupin = _enum_auto() - dpdk = _enum_auto() - hugepages = _enum_auto() - numa = _enum_auto() - trunk = _enum_auto() - vfnic = _enum_auto() + CHANGEMAC = 'changemac' + CPUPIN = 'cpupin' + DPDK = 'dpdk' + HUGEPAGES = 'hugepages' + NUMA = 'numa' + TRUNK = 'trunk' + VFNIC = 'vfnic' class RGDefaultNetTypeForSet(str, _AutoNameEnum): @@ -124,10 +124,10 @@ class RGDefaultNetType(str, _AutoNameEnum): class RGResourceType(str, _AutoNameEnum): - vm = 'compute' - k8s = _enum_auto() - lb = _enum_auto() - vins = _enum_auto() + VM = 'compute' + K8S = 'k8s' + LB = 'lb' + VINS = 'vins' class DiskStatus(str, _AutoNameEnum): @@ -185,8 +185,8 @@ class VMTechStatus(str, _AutoNameEnum): class DiskType(str, _AutoNameEnum): - B = _enum_auto() - D = _enum_auto() + BOOT = 'B' + DATA = 'D' class AccountStatus(str, _AutoNameEnum): @@ -198,11 +198,11 @@ class AccountStatus(str, _AutoNameEnum): class AccountResourceType(str, _AutoNameEnum): - vm = 'compute' - k8s = _enum_auto() - lb = _enum_auto() - vins = _enum_auto() - flipgroup = _enum_auto() + VM = 'compute' + K8S = 'k8s' + LB = 'lb' + VINS = 'vins' + FLIPGROUP = 'flipgroup' class ImageTechStatus(str, _AutoNameEnum): @@ -219,16 +219,16 @@ class ImageStatus(str, _AutoNameEnum): class ImageType(str, _AutoNameEnum): - cdrom = _enum_auto() - linux = _enum_auto() - unknown = _enum_auto() - virtual = _enum_auto() - windows = _enum_auto() + CDROM = 'cdrom' + LINUX = 'linux' + UNKNOWN = 'unknown' + VIRTUAL = 'virtual' + WINDOWS = 'windows' class NetIfaceNamingTemplate(str, _AutoNameEnum): - ens = _enum_auto() - eth = _enum_auto() + ENS = 'ens' + ETH = 'eth' class VINSStatus(str, _AutoNameEnum): @@ -290,17 +290,17 @@ class VINSInterfaceType(str, _AutoNameEnum): class NATRuleProtocol(str, _AutoNameEnum): - tcp = _enum_auto() - udp = _enum_auto() + TCP = 'tcp' + UDP = 'udp' class VNFDevType(str, _AutoNameEnum): - vyos = _enum_auto() + VYOS = 'vyos' class BootMode(str, _AutoNameEnum): - bios = _enum_auto() - uefi = _enum_auto() + BIOS = 'bios' + UEFI = 'uefi' class BServiceStatus(str, _AutoNameEnum): @@ -358,6 +358,7 @@ class SEPType(str, _AutoNameEnum): TATLIN = _enum_auto() DORADO = _enum_auto() SHARED = _enum_auto() + USTOR = _enum_auto() class ExtNetStatus(str, _AutoNameEnum): @@ -372,9 +373,9 @@ class ExtNetStatus(str, _AutoNameEnum): class BootLoaderType(str, _AutoNameEnum): - linux = _enum_auto() - unknown = _enum_auto() - windows = _enum_auto() + LINUX = 'linux' + UNKNOWN = 'unknown' + WINDOWS = 'windows' class FlipGroupClientType(str, _AutoNameEnum): @@ -392,8 +393,8 @@ class FlipGroupNetType(str, _AutoNameEnum): class PoolDiskType(str, _AutoNameEnum): - B = _enum_auto() - D = _enum_auto() + BOOT = 'B' + DATA = 'D' ANY = _enum_auto() @@ -447,16 +448,6 @@ class DataDisksChangeMode(str, _AutoNameEnum): KEEP = _enum_auto() -class PhysicalNodeStatus(str, _AutoNameEnum): - DECOMMISSIONED = _enum_auto() - DECOMMISSIONING = _enum_auto() - ENABLED = _enum_auto() - ERROR = _enum_auto() - INSTALLING = _enum_auto() - MAINTENANCE = _enum_auto() - RESTRICTED = _enum_auto() - - class AuthBroker(str, _AutoNameEnum): DECS3O = 'decs3o' BVS = 'bvs' @@ -530,8 +521,8 @@ class VFPoolStatus(str, _AutoNameEnum): class LinkState(str, _AutoNameEnum): - on = _enum_auto() - off = _enum_auto() + ON = 'on' + OFF = 'off' class ZoneStatus(str, _AutoNameEnum): @@ -618,3 +609,18 @@ class PCIDeviceStatus(str, _AutoNameEnum): DISABLED = _enum_auto() ENABLED = _enum_auto() ERROR = _enum_auto() + + +class CPUAllocationMode(str, _AutoNameEnum): + STRICT = 'strict' + LOOSE = 'loose' + + +class SEPTechStatus(str, _AutoNameEnum): + DISABLED = _enum_auto() + ENABLED = _enum_auto() + + +class DiskCacheMode(str, _AutoNameEnum): + NONE = 'none' + WRITETHROUGH = 'writethrough' diff --git a/src/dynamix_sdk/api/_nested/params.py b/src/dynamix_sdk/api/_nested/params.py index c98757e..21da7a5 100644 --- a/src/dynamix_sdk/api/_nested/params.py +++ b/src/dynamix_sdk/api/_nested/params.py @@ -16,10 +16,15 @@ class DiskAPIParamsNM(_base.BaseAPIParamsNestedModel): class InterfaceAPIParamsNM(_base.BaseAPIParamsNestedModel): enabled: bool = True net_id: int + net_prefix: None | int = None net_type: _enums.NetType sdn_logical_port_id: None | str = None security_group_ids: None | list[int] = None security_group_mode: bool = False + sdn_segment_id: None | str = None + sdn_object_group_id: None | str = None + sdn_logical_port_display_name: None | str = None + sdn_logical_port_description: None | str = None ip_addr: None | str = None mac: None | str = None diff --git a/src/dynamix_sdk/api/_nested/result.py b/src/dynamix_sdk/api/_nested/result.py index 5b95842..9e21d7b 100644 --- a/src/dynamix_sdk/api/_nested/result.py +++ b/src/dynamix_sdk/api/_nested/result.py @@ -7,14 +7,14 @@ from . import enums as _enums class AccessAPIResultNM(_base.BaseAPIResultNestedModel): explicit: bool - guid: str + guid: str | None = None access_type: _enums.AccessType status: str type: str - user_group_id: str + user_name: str can_be_deleted: None | bool = None - emails: list[str] | None = None + user_emails: list[str] | None = None class AffinityRuleAPIResultNM(_base.BaseAPIResultNestedModel): @@ -135,13 +135,13 @@ class VNFDevInterfaceAPIResultNM(_base.BaseAPIResultNestedModel): class SnapshotSetAPIResultNM(_base.BaseAPIResultNestedModel): - disks: list[int] + disk_ids: list[int] guid: str label: str timestamp: int - @property - def datetime(self): + @_base.computed_field + def datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.timestamp) @@ -170,12 +170,12 @@ class SnapshotAPIResultNM(_base.BaseAPIResultNestedModel): snapshot_set_timestamp: int timestamp: int - @property - def datetime(self): + @_base.computed_field + def datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.timestamp) - @property - def snapshot_set_datetime(self): + @_base.computed_field + def snapshot_set_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.snapshot_set_timestamp) @@ -190,13 +190,16 @@ class ReplicationAPIResultNM(_base.BaseAPIResultNestedModel): class DiskForCAComputeListAPIResultNM(_base.BaseAPIResultNestedModel): id: int + sep_id: int | None = None class DiskForCAComputeGetAPIResultNM(_base.BaseAPIResultNestedModel): account_id: int acl: dict + blkdiscard: bool boot_partition: int bus_num: int + cache_mode: _enums.DiskCacheMode created_by: str created_timestamp: int deleted_by: str @@ -229,10 +232,9 @@ class DiskForCAComputeGetAPIResultNM(_base.BaseAPIResultNestedModel): sep_id: int sep_pool_name: str shared: bool - size_available: float - size_available: float + size_available_gb: float size_max_gb: int - size_used: float + size_used_gb: float snapshots: list[SnapshotAPIResultNM] status: _enums.DiskStatus storage_policy_id: int @@ -243,24 +245,24 @@ class DiskForCAComputeGetAPIResultNM(_base.BaseAPIResultNestedModel): updated_by: str updated_timestamp: int = 0 - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def destruction_datetime(self): + @_base.computed_field + def destruction_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.destruction_timestamp) - @property - def purge_datetime(self): + @_base.computed_field + def purge_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.purge_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -268,6 +270,8 @@ class DiskForListAndListDeletedAPIResultNM(_base.BaseAPIResultNestedModel): account_id: int account_name: str acl: dict + blkdiscard: bool + cache_mode: _enums.DiskCacheMode created_by: str created_timestamp: int deleted_by: str @@ -294,10 +298,9 @@ class DiskForListAndListDeletedAPIResultNM(_base.BaseAPIResultNestedModel): sep_pool_name: str sep_type: _enums.SEPType shared: bool - size_available: float - size_available: float + size_available_gb: float size_max_gb: int - size_used: float + size_used_gb: float snapshots: list[SnapshotAPIResultNM] status: _enums.DiskStatus storage_policy_id: int @@ -310,24 +313,24 @@ class DiskForListAndListDeletedAPIResultNM(_base.BaseAPIResultNestedModel): vms: dict[str, str] updated_timestamp: int = 0 - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def destruction_datetime(self): + @_base.computed_field + def destruction_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.destruction_timestamp) - @property - def purge_datetime(self): + @_base.computed_field + def purge_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.purge_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -366,34 +369,33 @@ class DiskForListUnattachedAPIResultNM(_base.BaseAPIResultNestedModel): sep_id: int sep_pool_name: str shared: bool - size_available: float - size_available: float + size_available_gb: float size_max_gb: int - size_used: float + size_used_gb: float snapshots: list[SnapshotAPIResultNM] status: _enums.DiskStatus tech_status: _enums.DiskTechStatus type: _enums.DiskType updated_timestamp: int = 0 - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def destruction_datetime(self): + @_base.computed_field + def destruction_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.destruction_timestamp) - @property - def purge_datetime(self): + @_base.computed_field + def purge_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.purge_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -405,7 +407,6 @@ class StoragePolicyQuotasAPIResultNM(_base.BaseAPIResultNestedModel): class TenantQuotasAPIResultNM(_base.BaseAPIResultNestedModel): cpu_count: int disk_size_gb: int - ext_traffic: int gpu_count: int ext_ip_count: int ram_size_mb: float | int @@ -439,7 +440,7 @@ class ResourceGroupAPIResultNM(_base.BaseAPIResultNestedModel): secret: str status: _enums.ResourceGroupStatus storage_policy_ids: list[int] - uniq_pools: list[str] + sep_pools: list[str] updated_by: str updated_timestamp: int vins_ids: list[int] @@ -447,16 +448,16 @@ class ResourceGroupAPIResultNM(_base.BaseAPIResultNestedModel): dirty: bool | None = None - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -472,16 +473,16 @@ class AccountForCAAPIResultNM(_base.BaseAPIResultNestedModel): vm_features: list[_enums.VMFeature] zone_ids: list[int] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -492,8 +493,8 @@ class GuestAgentAPIResultNM(_base.BaseAPIResultNestedModel): last_update_timestamp: int user_name: str - @property - def last_update_datetime(self): + @_base.computed_field + def last_update_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.last_update_timestamp) @@ -518,16 +519,16 @@ class VGPUAPIResultNM(_base.BaseAPIResultNestedModel): status: _enums.VGPUStatus vm_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def last_update_datetime(self): + @_base.computed_field + def last_update_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.last_update_timestamp) @@ -558,7 +559,7 @@ class VMAPIResultNM(_base.BaseAPIResultNestedModel): deleted_by: str deleted_timestamp: int description: str - devices: dict + pci_devices: dict[str, int] disks: list[DiskForCAComputeListAPIResultNM] driver: _enums.Driver grid_id: int @@ -579,9 +580,10 @@ class VMAPIResultNM(_base.BaseAPIResultNestedModel): numa_affinity: _enums.NumaAffinity numa_node_id: int os_version: str - pinned_to_stack: bool + pinned_to_node: bool preferred_cpu_cores: list[int] ram_size_mb: int + read_only: bool reference_id: str res_name: str reserved_cpu_cores: list[int] @@ -593,7 +595,7 @@ class VMAPIResultNM(_base.BaseAPIResultNestedModel): status: _enums.VMStatus tags: dict tech_status: _enums.VMTechStatus - total_disks_size: int + total_disks_size_gb: int updated_by: str updated_timestamp: int user_managed: bool @@ -603,16 +605,16 @@ class VMAPIResultNM(_base.BaseAPIResultNestedModel): guest_agent: GuestAgentAPIResultNM zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -642,8 +644,8 @@ class ImageForListAPIResultNM(_base.BaseAPIResultNestedModel): type: _enums.ImageType virtual: bool | None = None - @property - def boot_loader_type(self): + @_base.computed_field + def boot_loader_type(self) -> _enums.BootLoaderType | None: if self.type in _enums.BootLoaderType._member_names_: return _enums.BootLoaderType[self.type] @@ -653,8 +655,8 @@ class ImageHistoryRecordAPIResultNM(_base.BaseAPIResultNestedModel): id: int timestamp: int - @property - def datetime(self): + @_base.computed_field + def datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.timestamp) @@ -683,16 +685,16 @@ class VINSForListAPIResultNM(_base.BaseAPIResultNestedModel): updated_timestamp: int vxlan_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -715,16 +717,16 @@ class VINSForListDeletedAPIResultNM(_base.BaseAPIResultNestedModel): updated_timestamp: int vxlan_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -817,8 +819,8 @@ class DHCPVNFAPIResultNM(_base.BaseAPIResultNestedModel): type: _enums.VNFType zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) @@ -841,8 +843,8 @@ class GWVNFAPIResultNM(_base.BaseAPIResultNestedModel): type: _enums.VNFType zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) @@ -865,8 +867,8 @@ class NATVNFAPIResultNM(_base.BaseAPIResultNestedModel): type: _enums.VNFType zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) @@ -880,13 +882,13 @@ class VNFDevMGMTConfigAPIResultNM(_base.BaseAPIResultNestedModel): ip_addr: str password: str ssh_public_key: str - user: str + user_name: str class VNFDevResourcesConfigAPIResultNM(_base.BaseAPIResultNestedModel): cpu_count: int ram_size_mb: int - stack_id: int | None + node_id: int | None uuid: str @@ -936,7 +938,7 @@ class BServiceVMAPIResultNM(_base.BaseAPIResultNestedModel): rg_id: int status: _enums.VMStatus tech_status: _enums.VMTechStatus - stack_id: int | None + node_id: int | None bsgroup_name: str bsgroup_role: str @@ -947,8 +949,8 @@ class BServiceSnapshotAPIResultNM(_base.BaseAPIResultNestedModel): valid: bool guid: str - @property - def datetime(self): + @_base.computed_field + def datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.timestamp) @@ -977,16 +979,16 @@ class BServiceAPIResultNM(_base.BaseAPIResultNestedModel): user_managed: bool zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1124,16 +1126,16 @@ class LBAPIResultNM(_base.BaseAPIResultNestedModel): vins_id: int zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1149,13 +1151,6 @@ class SEPAPIResultNM(_base.BaseAPIResultNestedModel): 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 @@ -1189,12 +1184,12 @@ class TaskAPIResultNM(_base.BaseAPIResultNestedModel): updated_by: None | str = None updated_timestamp: None | int = None - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: if self.updated_timestamp is None: return None return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1209,8 +1204,8 @@ class K8CIForListAPIResultNM(_base.BaseAPIResultNestedModel): status: _enums.K8CIStatus version: str - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) @@ -1306,16 +1301,16 @@ class K8sAPIResultNM(_base.BaseAPIResultNestedModel): worker_groups: list[WorkerGroupAPIResultNM] zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1335,12 +1330,12 @@ class DPDKNetAPIResultNM(_base.BaseAPIResultNestedModel): vlan_id: int vm_ids: list[int] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1376,12 +1371,12 @@ class VFPoolAPIResultNM(_base.BaseAPIResultNestedModel): updated_timestamp: int nodes: list[VFPoolNodeAPIResultNM] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1393,16 +1388,17 @@ class ZoneForListAPIResultNM(_base.BaseAPIResultNestedModel): guid: int id: int name: str + node_auto_start: bool node_ids: list[int] status: _enums.ZoneStatus updated_timestamp: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1413,7 +1409,7 @@ class SecurityGroupRuleAPIResultNM(_base.BaseAPIResultNestedModel): port_range_min: int | None protocol: _enums.SGRuleProtocol | None remote_group_id: int | None = None - remote_ip_prefix: str | None + remote_net_cidr: str | None traffic_direction: _enums.TrafficDirection @@ -1427,6 +1423,7 @@ class TrunkAPIResultNM(_base.BaseAPIResultNestedModel): guid: int id: int mac: str + mtu: int name: str native_vlan_id: int | None ovs_bridge: str @@ -1435,18 +1432,18 @@ class TrunkAPIResultNM(_base.BaseAPIResultNestedModel): updated_timestamp: int | None vlan_ids: str - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: if self.deleted_timestamp is None: return None return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: if self.updated_timestamp is None: return None return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1456,6 +1453,7 @@ class SEPPoolsAPIResultNM(_base.BaseAPIResultNestedModel): pool_names: list[str] sep_id: int sep_name: str | None = None + sep_tech_status: _enums.SEPTechStatus | None = None class TenantIDsAPIResultNM(_base.BaseAPIResultNestedModel): @@ -1494,12 +1492,12 @@ class SecurityGroupAPIResultNM(_base.BaseAPIResultNestedModel): updated_by: str | None updated_timestamp: int | None - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: if self.updated_timestamp is None: return None return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1515,9 +1513,9 @@ class MigrateStorageJobAPIResultNM(_base.BaseAPIResultNestedModel): domain_name: str id: int log: list[str] - source_stack_id: int + source_node_id: int status: _enums.JobStatus - target_stack_id: int + target_node_id: int class AuditAPIResultNM(_base.BaseAPIResultNestedModel): @@ -1546,12 +1544,12 @@ class AuditAPIResultNM(_base.BaseAPIResultNestedModel): vins_id: int | None = None vm_id: int | None = None - @property - def request_datetime(self): + @_base.computed_field + def request_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.request_timestamp) - @property - def response_datetime(self): + @_base.computed_field + def response_datetime(self) -> _base.datetime | None: if self.response_timestamp is None: return None return self._get_datetime_from_timestamp(self.response_timestamp) @@ -1579,8 +1577,8 @@ class UserAPIResultNM(_base.BaseAPIResultNestedModel): service_account: bool xmpp: list[_typing.Any] - @property - def last_check_datetime(self): + @_base.computed_field + def last_check_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.last_check_timestamp) @@ -1602,7 +1600,6 @@ class ResourceCountersAPIResultNM(_base.BaseAPIResultNestedModel): storage_size_gb_by_real_usage: int | float storage_size_gb_by_disk_max: int ext_ip_count: int - ext_traffic: int gpu_count: int sep_pools: dict[str, dict[str, StorageCountersAPIResultNM]] storage_policies: dict[str, StoragePolicyCountersAPIResultNM] @@ -1613,7 +1610,6 @@ class TenantQuotasForResourceConsumptionAPIResultNM( ): cpu_count: int disk_size_gb: int - ext_traffic: int gpu_count: int ext_ip_count: int ram_size_mb: float | int @@ -1628,7 +1624,7 @@ class PCIDeviceAPIResultNM(_base.BaseAPIResultNestedModel): id: int name: str rg_id: int - stack_id: int + node_id: int status: _enums.PCIDeviceStatus system_name: str @@ -1667,22 +1663,22 @@ class ResourceGroupForListDeletedAPIResultNM(_base.BaseAPIResultNestedModel): secret: str status: _enums.ResourceGroupStatus storage_policy_ids: list[int] - uniq_pools: list[str] + sep_pools: list[str] updated_by: str updated_timestamp: int vins_ids: list[int] vm_ids: list[int] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) @@ -1720,21 +1716,21 @@ class AccountForCBAPIResultNM(_base.BaseAPIResultNestedModel): send_access_emails: bool status: _enums.AccountStatus storage_policy_ids: list[int] - uniq_pools: list[str] + sep_pools: list[str] updated_timestamp: int version: int vm_features: list[_enums.VMFeature] zone_ids: list[int] zones: list[int] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | 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 f9812e7..658e403 100644 --- a/src/dynamix_sdk/api/cloudapi/_api.py +++ b/src/dynamix_sdk/api/cloudapi/_api.py @@ -17,7 +17,6 @@ from .pcidevice import * from .rg import * from .security_group import * from .sep import * -from .stack import * from .storage_policy import * from .tasks import * from .trunk import * @@ -47,7 +46,6 @@ class CloudapiAPI(_base.BaseAPI): rg: CloudapiRgAPI security_group: CloudapiSecurityGroupAPI sep: CloudapiSepAPI - stack: CloudapiStackAPI storage_policy: CloudapiStoragePolicyAPI tasks: CloudapiTasksAPI trunk: CloudapiTrunkAPI diff --git a/src/dynamix_sdk/api/cloudapi/account/get.py b/src/dynamix_sdk/api/cloudapi/account/get.py index d4fa0d1..9b49b32 100644 --- a/src/dynamix_sdk/api/cloudapi/account/get.py +++ b/src/dynamix_sdk/api/cloudapi/account/get.py @@ -26,7 +26,7 @@ class CloudapiAccountGetResultModel(_base.BaseAPIResultModel): send_access_emails: bool status: _nested.AccountStatus storage_policy_ids: list[int] - uniq_pools: list[str] + sep_pools: list[str] updated_timestamp: int version: int vins_count: int @@ -34,20 +34,20 @@ class CloudapiAccountGetResultModel(_base.BaseAPIResultModel): vm_features: list[_nested.VMFeature] zones: list[_nested.ZoneAPIResultNM] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deactivation_datetime(self): + @_base.computed_field + def deactivation_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deactivation_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/account/update.py b/src/dynamix_sdk/api/cloudapi/account/update.py index b8f1326..dad8029 100644 --- a/src/dynamix_sdk/api/cloudapi/account/update.py +++ b/src/dynamix_sdk/api/cloudapi/account/update.py @@ -11,14 +11,13 @@ class CloudapiAccountUpdateProtocol(_base.BasePostAPIFunctionProtocol): *, 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, ext_ip_count_quota: None | int = None, ram_size_quota_mb: None | int = None, - send_access_emails: bool = False, + send_access_emails: bool | None = None, storage_size_quota_gb: None | int = None, - uniq_pools: None | list[str] = None, + sep_pools: None | list[str] = None, description: str | None = None, default_zone_id: int | None = None, ) -> CloudapiAccountUpdateResultBool: diff --git a/src/dynamix_sdk/api/cloudapi/bservice/get.py b/src/dynamix_sdk/api/cloudapi/bservice/get.py index 69c3912..a04cd85 100644 --- a/src/dynamix_sdk/api/cloudapi/bservice/get.py +++ b/src/dynamix_sdk/api/cloudapi/bservice/get.py @@ -34,16 +34,16 @@ class CloudapiBserviceGetResultModel(_base.BaseAPIResultModel): vms: list[_nested.BServiceVMAPIResultNM] zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_add.py b/src/dynamix_sdk/api/cloudapi/bservice/group_add.py index c36fbfd..4702690 100644 --- a/src/dynamix_sdk/api/cloudapi/bservice/group_add.py +++ b/src/dynamix_sdk/api/cloudapi/bservice/group_add.py @@ -15,7 +15,6 @@ class CloudapiBserviceGroupAddProtocol(_base.BasePostAPIFunctionProtocol): cpu_count: int, boot_disk_size_gb: int, image_id: int, - driver: _nested.Driver, name: str, ram_size_mb: int, storage_policy_id: int | None = None, @@ -26,6 +25,6 @@ class CloudapiBserviceGroupAddProtocol(_base.BasePostAPIFunctionProtocol): sep_pool_name: str | None = None, start_timeout: int | None = None, vins_ids: list[int] | None = None, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, ) -> CloudapiBserviceGroupAddResultInt: ... diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_get.py b/src/dynamix_sdk/api/cloudapi/bservice/group_get.py index a70271f..286be11 100644 --- a/src/dynamix_sdk/api/cloudapi/bservice/group_get.py +++ b/src/dynamix_sdk/api/cloudapi/bservice/group_get.py @@ -39,16 +39,16 @@ class CloudapiBserviceGroupGetResultModel( vins_ids: list[int] vms: list[_nested.BServiceGroupVMAPIResultNM] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py index c86f876..eec0597 100644 --- a/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py +++ b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_add.py @@ -12,7 +12,7 @@ class CloudapiBserviceGroupParentAddProtocol( self, *, bservice_id: int, - bsgroup_id: int, + child_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 index 769eff3..9f2c683 100644 --- a/src/dynamix_sdk/api/cloudapi/bservice/group_parent_remove.py +++ b/src/dynamix_sdk/api/cloudapi/bservice/group_parent_remove.py @@ -12,7 +12,7 @@ class CloudapiBserviceGroupParentRemoveProtocol( self, *, bservice_id: int, - bsgroup_id: int, + child_id: int, parent_id: int, ) -> CloudapiBserviceGroupParentRemoveResultBool: ... diff --git a/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py b/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py index 8f27987..b9b274b 100644 --- a/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py +++ b/src/dynamix_sdk/api/cloudapi/bservice/group_resize.py @@ -14,7 +14,7 @@ class CloudapiBserviceGroupResizeProtocol( *, bservice_id: int, bsgroup_id: int, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, count_change_mode: _nested.CountChangeMode = ( _nested.CountChangeMode.RELATIVE ), diff --git a/src/dynamix_sdk/api/cloudapi/compute/_api.py b/src/dynamix_sdk/api/cloudapi/compute/_api.py index 77bbb08..fb8c278 100644 --- a/src/dynamix_sdk/api/cloudapi/compute/_api.py +++ b/src/dynamix_sdk/api/cloudapi/compute/_api.py @@ -50,7 +50,7 @@ from .pause import * from .pfw_add import * from .pfw_del import * from .pfw_list import * -from .pin_to_stack import * +from .pin_to_node import * from .power_cycle import * from .reboot import * from .redeploy import * @@ -66,7 +66,7 @@ from .start import * from .stop import * from .tag_add import * from .tag_remove import * -from .unpin_from_stack import * +from .unpin_from_node import * from .update import * from .user_grant import * from .user_list import * @@ -127,7 +127,7 @@ class CloudapiComputeAPI( CloudapiComputePfwAddProtocol, CloudapiComputePfwDelProtocol, CloudapiComputePfwListProtocol, - CloudapiComputePinToStackProtocol, + CloudapiComputePinToNodeProtocol, CloudapiComputePowerCycleProtocol, CloudapiComputeRebootProtocol, CloudapiComputeRedeployProtocol, @@ -143,7 +143,7 @@ class CloudapiComputeAPI( CloudapiComputeStopProtocol, CloudapiComputeTagAddProtocol, CloudapiComputeTagRemoveProtocol, - CloudapiComputeUnpinFromStackProtocol, + CloudapiComputeUnpinFromNodeProtocol, CloudapiComputeUpdateProtocol, CloudapiComputeUserGrantProtocol, CloudapiComputeUserListProtocol, diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_add.py b/src/dynamix_sdk/api/cloudapi/compute/disk_add.py index d2be762..adac04c 100644 --- a/src/dynamix_sdk/api/cloudapi/compute/disk_add.py +++ b/src/dynamix_sdk/api/cloudapi/compute/disk_add.py @@ -14,7 +14,7 @@ class CloudapiComputeDiskAddProtocol(_base.BasePostAPIFunctionProtocol): name: str, disk_size_gb: int, storage_policy_id: int, - disk_type: _nested.DiskType = _nested.DiskType.D, + disk_type: _nested.DiskType = _nested.DiskType.DATA, sep_id: int | None = None, sep_pool_name: str | None = None, description: str | None = None, diff --git a/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py b/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py index b0f47c6..209807b 100644 --- a/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py +++ b/src/dynamix_sdk/api/cloudapi/compute/disk_attach.py @@ -12,7 +12,7 @@ class CloudapiComputeDiskAttachProtocol(_base.BasePostAPIFunctionProtocol): *, vm_id: int, disk_id: int, - disk_type: _nested.DiskType = _nested.DiskType.D, + disk_type: _nested.DiskType = _nested.DiskType.DATA, pci_slot_num_hex: str | None = None, bus_num_hex: str | None = None, ) -> CloudapiComputeDiskAttachResultBool: diff --git a/src/dynamix_sdk/api/cloudapi/compute/get.py b/src/dynamix_sdk/api/cloudapi/compute/get.py index 1402a04..21b4513 100644 --- a/src/dynamix_sdk/api/cloudapi/compute/get.py +++ b/src/dynamix_sdk/api/cloudapi/compute/get.py @@ -55,9 +55,10 @@ class CloudapiComputeGetResultModel(_base.BaseAPIResultModel): numa_node_id: int os_users: list[_nested.OSUserAPIResultNM] os_version: str - pinned_to_stack: bool + pinned_to_node: bool preferred_cpu_cores: list[int] ram_size_mb: int + read_only: bool reference_id: str res_name: str reserved_cpu_cores: list[int] @@ -84,16 +85,16 @@ class CloudapiComputeGetResultModel(_base.BaseAPIResultModel): natable_vins_network: str = '' natable_vins_network_name: str = '' - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/compute/net_attach.py b/src/dynamix_sdk/api/cloudapi/compute/net_attach.py index ec0a208..832652d 100644 --- a/src/dynamix_sdk/api/cloudapi/compute/net_attach.py +++ b/src/dynamix_sdk/api/cloudapi/compute/net_attach.py @@ -23,5 +23,10 @@ class CloudapiComputeNetAttachProtocol(_base.BasePostAPIFunctionProtocol): mtu: None | int = None, mac: None | str = None, sdn_logical_port_id: None | str = None, + net_prefix: int | None = None, + sdn_segment_id: str | None = None, + sdn_object_group_id: str | None = None, + sdn_logical_port_display_name: str | None = None, + sdn_logical_port_description: str | None = None, ) -> CloudapiComputeNetAttachResultModel: ... diff --git a/src/dynamix_sdk/api/cloudapi/compute/pin_to_node.py b/src/dynamix_sdk/api/cloudapi/compute/pin_to_node.py new file mode 100644 index 0000000..e40636e --- /dev/null +++ b/src/dynamix_sdk/api/cloudapi/compute/pin_to_node.py @@ -0,0 +1,15 @@ +import dynamix_sdk.base as _base + + +class CloudapiComputePinToNodeResultBool(_base.BaseAPIResultBool): + pass + + +class CloudapiComputePinToNodeProtocol(_base.BasePostAPIFunctionProtocol): + def pin_to_node( + self, + *, + vm_id: int, + auto_start: bool = False, + ) -> CloudapiComputePinToNodeResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py b/src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py deleted file mode 100644 index 054fb4d..0000000 --- a/src/dynamix_sdk/api/cloudapi/compute/pin_to_stack.py +++ /dev/null @@ -1,15 +0,0 @@ -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/redeploy.py b/src/dynamix_sdk/api/cloudapi/compute/redeploy.py index c96659c..ceac93a 100644 --- a/src/dynamix_sdk/api/cloudapi/compute/redeploy.py +++ b/src/dynamix_sdk/api/cloudapi/compute/redeploy.py @@ -11,7 +11,7 @@ class CloudapiComputeRedeployProtocol(_base.BasePostAPIFunctionProtocol): self, *, vm_id: int, - storage_policy_id: int, + storage_policy_id: int | None = None, start: bool = False, boot_disk_size_gb: int | None = None, data_disks_change_mode: _nested.DataDisksChangeMode = ( diff --git a/src/dynamix_sdk/api/cloudapi/compute/unpin_from_node.py b/src/dynamix_sdk/api/cloudapi/compute/unpin_from_node.py new file mode 100644 index 0000000..22b2eb0 --- /dev/null +++ b/src/dynamix_sdk/api/cloudapi/compute/unpin_from_node.py @@ -0,0 +1,14 @@ +import dynamix_sdk.base as _base + + +class CloudapiComputeUnpinFromNodeResultBool(_base.BaseAPIResultBool): + pass + + +class CloudapiComputeUnpinFromNodeProtocol(_base.BasePostAPIFunctionProtocol): + def unpin_from_node( + self, + *, + vm_id: int, + ) -> CloudapiComputeUnpinFromNodeResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py b/src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py deleted file mode 100644 index dbe44e7..0000000 --- a/src/dynamix_sdk/api/cloudapi/compute/unpin_from_stack.py +++ /dev/null @@ -1,14 +0,0 @@ -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/disks/get.py b/src/dynamix_sdk/api/cloudapi/disks/get.py index 09244cd..5c98789 100644 --- a/src/dynamix_sdk/api/cloudapi/disks/get.py +++ b/src/dynamix_sdk/api/cloudapi/disks/get.py @@ -6,6 +6,8 @@ class CloudapiDisksGetResultModel(_base.BaseAPIResultModel): account_id: int account_name: str acl: dict + blkdiscard: bool + cache_mode: _nested.DiskCacheMode created_by: str created_timestamp: int deleted_by: str @@ -32,9 +34,9 @@ class CloudapiDisksGetResultModel(_base.BaseAPIResultModel): sep_pool_name: str sep_type: _nested.SEPType shared: bool - size_available: float + size_available_gb: float size_max_gb: int - size_used: float + size_used_gb: float snapshots: list[_nested.SnapshotAPIResultNM] status: _nested.DiskStatus storage_policy_id: int @@ -47,24 +49,24 @@ class CloudapiDisksGetResultModel(_base.BaseAPIResultModel): vms: dict[str, str] updated_timestamp: int = 0 - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def destruction_datetime(self): + @_base.computed_field + def destruction_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.destruction_timestamp) - @property - def purge_datetime(self): + @_base.computed_field + def purge_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.purge_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/get.py b/src/dynamix_sdk/api/cloudapi/flipgroup/get.py index f53b929..7b1f84c 100644 --- a/src/dynamix_sdk/api/cloudapi/flipgroup/get.py +++ b/src/dynamix_sdk/api/cloudapi/flipgroup/get.py @@ -25,22 +25,20 @@ class CloudapiFlipgroupGetResultModel(_base.BaseAPIResultModel): net_cidr: str net_id: int net_type: _nested.FlipGroupNetType - rg_id: int - rg_name: str status: _nested.FlipGroupStatus updated_by: str updated_timestamp: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/flipgroup/list.py b/src/dynamix_sdk/api/cloudapi/flipgroup/list.py index 2661025..519bc66 100644 --- a/src/dynamix_sdk/api/cloudapi/flipgroup/list.py +++ b/src/dynamix_sdk/api/cloudapi/flipgroup/list.py @@ -20,7 +20,6 @@ class CloudapiFlipgroupListProtocol(_base.BasePostAPIFunctionProtocol): 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, diff --git a/src/dynamix_sdk/api/cloudapi/image/create.py b/src/dynamix_sdk/api/cloudapi/image/create.py index 640da29..9364b2c 100644 --- a/src/dynamix_sdk/api/cloudapi/image/create.py +++ b/src/dynamix_sdk/api/cloudapi/image/create.py @@ -18,7 +18,7 @@ class CloudapiImageCreateProtocol(_base.BasePostAPIFunctionProtocol): storage_policy_id: int, hot_resize: bool = False, network_interface_naming: _nested.NetIfaceNamingTemplate = ( - _nested.NetIfaceNamingTemplate.ens + _nested.NetIfaceNamingTemplate.ENS ), download_password: str | None = None, os_password: str | None = None, diff --git a/src/dynamix_sdk/api/cloudapi/image/get.py b/src/dynamix_sdk/api/cloudapi/image/get.py index 3f9a87b..265bec3 100644 --- a/src/dynamix_sdk/api/cloudapi/image/get.py +++ b/src/dynamix_sdk/api/cloudapi/image/get.py @@ -12,7 +12,6 @@ class CloudapiImageGetResultModel(_base.BaseAPIResultModel): boot_mode: _nested.BootMode | _EmptyStr | None bootable: bool cd_presented_to: dict[str, list[int]] - ckey: str deleted_timestamp: int description: str drivers: list[_nested.Driver] @@ -32,7 +31,7 @@ class CloudapiImageGetResultModel(_base.BaseAPIResultModel): present_to: dict[str, int] provider_name: str purge_attempt_count: int - res_id: str + res_id: str | None rescue_cd: bool sep_id: int sep_pool_name: str @@ -48,13 +47,13 @@ class CloudapiImageGetResultModel(_base.BaseAPIResultModel): version: str vm_ci_id: int - @property - def boot_loader_type(self): + @_base.computed_field + def boot_loader_type(self) -> _nested.BootLoaderType | None: if self.type in _nested.BootLoaderType._member_names_: return _nested.BootLoaderType[self.type] - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/k8s/create.py b/src/dynamix_sdk/api/cloudapi/k8s/create.py index 00e63d6..4c830ed 100644 --- a/src/dynamix_sdk/api/cloudapi/k8s/create.py +++ b/src/dynamix_sdk/api/cloudapi/k8s/create.py @@ -44,7 +44,7 @@ class CloudapiK8sCreateProtocol(_base.BasePostAPIFunctionProtocol): extnet_only: bool = False, ci_user_data: str | None = None, additional_sans: list[str] | None = None, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, lb_sysctl_params: list[dict[str, str]] | None = None, zone_id: int | None = None, ) -> CloudapiK8sCreateResultStr: diff --git a/src/dynamix_sdk/api/cloudapi/k8s/get.py b/src/dynamix_sdk/api/cloudapi/k8s/get.py index c527fbc..56ab19a 100644 --- a/src/dynamix_sdk/api/cloudapi/k8s/get.py +++ b/src/dynamix_sdk/api/cloudapi/k8s/get.py @@ -31,16 +31,16 @@ class CloudapiK8sGetResultModel(_base.BaseAPIResultModel): with_lb: bool zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/k8s/worker_add.py b/src/dynamix_sdk/api/cloudapi/k8s/worker_add.py index 20e54cc..c85ef84 100644 --- a/src/dynamix_sdk/api/cloudapi/k8s/worker_add.py +++ b/src/dynamix_sdk/api/cloudapi/k8s/worker_add.py @@ -13,6 +13,6 @@ class CloudapiK8sWorkerAddProtocol(_base.BasePostAPIFunctionProtocol): k8s_id: int, worker_group_id: int, node_count: int = 1, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, ) -> CloudapiK8sWorkerAddResultBool: ... diff --git a/src/dynamix_sdk/api/cloudapi/k8s/workers_group_add.py b/src/dynamix_sdk/api/cloudapi/k8s/workers_group_add.py index f534e1f..87dd2dc 100644 --- a/src/dynamix_sdk/api/cloudapi/k8s/workers_group_add.py +++ b/src/dynamix_sdk/api/cloudapi/k8s/workers_group_add.py @@ -23,6 +23,6 @@ class CloudapiK8sWorkersGroupAddProtocol(_base.BasePostAPIFunctionProtocol): node_ram_size_mb: int = 1024, node_disk_size_gb: int | None = None, ci_user_data: str | None = None, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, ) -> CloudapiK8sWorkersGroupAddResultStr: ... diff --git a/src/dynamix_sdk/api/cloudapi/kvmx86/create.py b/src/dynamix_sdk/api/cloudapi/kvmx86/create.py index e8c7506..5bb0a89 100644 --- a/src/dynamix_sdk/api/cloudapi/kvmx86/create.py +++ b/src/dynamix_sdk/api/cloudapi/kvmx86/create.py @@ -16,7 +16,7 @@ class CloudapiKvmx86CreateProtocol(_base.BasePostAPIFunctionProtocol): rg_id: int, storage_policy_id: int, boot_disk_size_gb: None | int = None, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, ci_user_data: None | dict = None, cpu_pin: bool = False, custom_fields: None | str = None, @@ -26,7 +26,7 @@ class CloudapiKvmx86CreateProtocol(_base.BasePostAPIFunctionProtocol): image_id: None | int = None, interfaces: None | list[_nested.InterfaceAPIParamsNM] = None, ipa_type: None | str = None, - numa_affinity: _nested.NumaAffinity = _nested.NumaAffinity.none, + numa_affinity: _nested.NumaAffinity = _nested.NumaAffinity.NONE, preferred_cpu_cores: None | list[int] = None, sep_id: None | int = None, sep_pool_name: None | str = None, diff --git a/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py b/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py index 1402337..a586bf7 100644 --- a/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py +++ b/src/dynamix_sdk/api/cloudapi/kvmx86/create_blank.py @@ -16,7 +16,7 @@ class CloudapiKvmx86CreateBlankProtocol(_base.BasePostAPIFunctionProtocol): rg_id: int, storage_policy_id: int, boot_disk_size_gb: None | int = None, - chipset: _nested.Chipset = _nested.Chipset.i440fx, + chipset: _nested.Chipset = _nested.Chipset.Q35, data_disks: None | list[_nested.DiskAPIParamsNM] = None, description: None | str = None, interfaces: None | list[_nested.InterfaceAPIParamsNM] = None, @@ -25,14 +25,17 @@ class CloudapiKvmx86CreateBlankProtocol(_base.BasePostAPIFunctionProtocol): sep_pool_name: None | str = None, without_boot_disk: bool = False, boot_loader_type: _nested.BootLoaderType = ( - _nested.BootLoaderType.unknown + _nested.BootLoaderType.UNKNOWN ), - boot_mode: _nested.BootMode = _nested.BootMode.bios, + boot_mode: _nested.BootMode = _nested.BootMode.BIOS, network_interface_naming: _nested.NetIfaceNamingTemplate = ( - _nested.NetIfaceNamingTemplate.ens + _nested.NetIfaceNamingTemplate.ENS ), hot_resize: bool = False, zone_id: None | int = None, os_version: None | str = None, + cpu_pin: bool = False, + hp_backed: bool = False, + numa_affinity: _nested.NumaAffinity = _nested.NumaAffinity.NONE, ) -> CloudapiKvmx86CreateBlankResultInt: ... diff --git a/src/dynamix_sdk/api/cloudapi/lb/get.py b/src/dynamix_sdk/api/cloudapi/lb/get.py index e434c45..cafc854 100644 --- a/src/dynamix_sdk/api/cloudapi/lb/get.py +++ b/src/dynamix_sdk/api/cloudapi/lb/get.py @@ -40,16 +40,16 @@ class CloudapiLbGetResultModel(_base.BaseAPIResultModel): vins_id: int zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/rg/create.py b/src/dynamix_sdk/api/cloudapi/rg/create.py index 8624ae1..ba3ff70 100644 --- a/src/dynamix_sdk/api/cloudapi/rg/create.py +++ b/src/dynamix_sdk/api/cloudapi/rg/create.py @@ -21,7 +21,6 @@ class CloudapiRgCreateProtocol(_base.BasePostAPIFunctionProtocol): description: str | None = None, ext_net_id: int | None = None, ext_net_ip: str | None = None, - ext_traffic_quota: int | None = None, ip_cidr: str | None = None, owner: str | None = None, ext_ip_count_quota: int | None = None, diff --git a/src/dynamix_sdk/api/cloudapi/rg/update.py b/src/dynamix_sdk/api/cloudapi/rg/update.py index b3758cd..3e12b7d 100644 --- a/src/dynamix_sdk/api/cloudapi/rg/update.py +++ b/src/dynamix_sdk/api/cloudapi/rg/update.py @@ -11,15 +11,14 @@ class CloudapiRgUpdateProtocol(_base.BasePostAPIFunctionProtocol): self, *, rg_id: int, - clear_uniq_pools: bool = False, + clear_sep_pools: bool = False, cpu_count_quota: None | int = None, description: None | str = None, - ext_traffic_quota: None | int = None, name: None | str = None, ext_ip_count_quota: None | int = None, ram_size_quota_mb: None | int = None, storage_size_quota_gb: None | int = None, - uniq_pools: None | list[str] = None, - storage_policies: None | list[_nested.StoragePolicyQuotasAPIParamsNM] = None, # noqa: E501 + sep_pools: None | list[str] = None, + storage_policies_quotas: None | list[_nested.StoragePolicyQuotasAPIParamsNM] = None, # noqa: E501 ) -> CloudapiRgUpdateResultBool: ... diff --git a/src/dynamix_sdk/api/cloudapi/security_group/create_rule.py b/src/dynamix_sdk/api/cloudapi/security_group/create_rule.py index ec0d63e..0f252b9 100644 --- a/src/dynamix_sdk/api/cloudapi/security_group/create_rule.py +++ b/src/dynamix_sdk/api/cloudapi/security_group/create_rule.py @@ -18,6 +18,6 @@ class CloudapiSecurityGroupCreateRuleProtocol( protocol: _nested.SGRuleProtocol | None = None, port_range_max: int | None = None, port_range_min: int | None = None, - remote_ip_prefix: str | None = None, + remote_net_cidr: str | None = None, ) -> CloudapiSecurityGroupCreateRuleResultInt: ... diff --git a/src/dynamix_sdk/api/cloudapi/stack/__init__.py b/src/dynamix_sdk/api/cloudapi/stack/__init__.py deleted file mode 100644 index 24a9928..0000000 --- a/src/dynamix_sdk/api/cloudapi/stack/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from ._api import * diff --git a/src/dynamix_sdk/api/cloudapi/stack/_api.py b/src/dynamix_sdk/api/cloudapi/stack/_api.py deleted file mode 100644 index 920ac65..0000000 --- a/src/dynamix_sdk/api/cloudapi/stack/_api.py +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 8567638..0000000 --- a/src/dynamix_sdk/api/cloudapi/stack/get.py +++ /dev/null @@ -1,22 +0,0 @@ -import dynamix_sdk.base as _base -import dynamix_sdk.api._nested as _nested - - -class CloudapiStackGetResultModel(_base.BaseAPIResultModel): - cpu_allocation_ratio: float | None - description: str - drivers: list[_nested.Driver] - id: int - mem_allocation_ratio: float | None - name: str - status: _nested.PhysicalNodeStatus - type: str - - -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 deleted file mode 100644 index 8f4c869..0000000 --- a/src/dynamix_sdk/api/cloudapi/stack/list.py +++ /dev/null @@ -1,22 +0,0 @@ -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/storage_policy/list.py b/src/dynamix_sdk/api/cloudapi/storage_policy/list.py index 767f7e8..671ec33 100644 --- a/src/dynamix_sdk/api/cloudapi/storage_policy/list.py +++ b/src/dynamix_sdk/api/cloudapi/storage_policy/list.py @@ -23,5 +23,6 @@ class CloudapiStoragePolicyListProtocol(_base.BaseGetAPIFunctionProtocol): sep_pool_name: str | None = None, sort_by: str | None = None, status: _nested.StoragePolicyStatus | None = None, + sep_tech_status: _nested.SEPTechStatus | None = None, ) -> CloudapiStoragePolicyListResultModel: ... diff --git a/src/dynamix_sdk/api/cloudapi/vins/get.py b/src/dynamix_sdk/api/cloudapi/vins/get.py index 81bd0b5..e6773e7 100644 --- a/src/dynamix_sdk/api/cloudapi/vins/get.py +++ b/src/dynamix_sdk/api/cloudapi/vins/get.py @@ -38,16 +38,16 @@ class CloudapiVinsGetResultModel(_base.BaseAPIResultModel): vxlan_id: int zone_id: int - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudapi/vins/nat_rule_add.py b/src/dynamix_sdk/api/cloudapi/vins/nat_rule_add.py index 1050b85..5d8a549 100644 --- a/src/dynamix_sdk/api/cloudapi/vins/nat_rule_add.py +++ b/src/dynamix_sdk/api/cloudapi/vins/nat_rule_add.py @@ -14,7 +14,7 @@ class CloudapiVinsNatRuleAddProtocol(_base.BasePostAPIFunctionProtocol): public_port_start: int, vins_id: int, local_port: int | None = None, - protocol: _nested.NATRuleProtocol = _nested.NATRuleProtocol.tcp, + protocol: _nested.NATRuleProtocol = _nested.NATRuleProtocol.TCP, public_port_end: int | None = None, ) -> CloudapiVinsNatRuleAddResultInt: ... diff --git a/src/dynamix_sdk/api/cloudapi/zone/get.py b/src/dynamix_sdk/api/cloudapi/zone/get.py index 1ae9321..a6ca1f2 100644 --- a/src/dynamix_sdk/api/cloudapi/zone/get.py +++ b/src/dynamix_sdk/api/cloudapi/zone/get.py @@ -15,18 +15,19 @@ class CloudapiZoneGetResultModel(_base.BaseAPIResultModel): k8s_ids: list[int] lb_ids: list[int] name: str + node_auto_start: bool node_ids: list[int] status: _nested.ZoneStatus updated_timestamp: int vins_ids: list[int] vm_ids: list[int] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudbroker/account/_api.py b/src/dynamix_sdk/api/cloudbroker/account/_api.py index 860a489..e48086a 100644 --- a/src/dynamix_sdk/api/cloudbroker/account/_api.py +++ b/src/dynamix_sdk/api/cloudbroker/account/_api.py @@ -17,6 +17,12 @@ from .list import * from .list_deleted import * from .remove_zone import * from .restore import * +from .set_cpu_allocation_parameter import * +from .set_cpu_allocation_ratio import * +from .update import * +from .update_compute_features import * +from .update_resource_types import * +from .update_user import * class CloudbrokerAccountAPI( @@ -39,5 +45,11 @@ class CloudbrokerAccountAPI( CloudbrokerAccountListProtocol, CloudbrokerAccountRemoveZoneProtocol, CloudbrokerAccountRestoreProtocol, + CloudbrokerAccountSetCpuAllocationParameterProtocol, + CloudbrokerAccountSetCpuAllocationRatioProtocol, + CloudbrokerAccountUpdateProtocol, + CloudbrokerAccountUpdateComputeFeaturesProtocol, + CloudbrokerAccountUpdateResourceTypesProtocol, + CloudbrokerAccountUpdateUserProtocol, ): pass diff --git a/src/dynamix_sdk/api/cloudbroker/account/add_user.py b/src/dynamix_sdk/api/cloudbroker/account/add_user.py index 913eddd..f2e600d 100644 --- a/src/dynamix_sdk/api/cloudbroker/account/add_user.py +++ b/src/dynamix_sdk/api/cloudbroker/account/add_user.py @@ -14,6 +14,6 @@ class CloudbrokerAccountAddUserProtocol( *, account_id: int, user_name: str, - access_type: _nested.AccessType, + access_type: _nested.AccessTypeForSet, ) -> CloudbrokerAccountAddUserResultBool: ... diff --git a/src/dynamix_sdk/api/cloudbroker/account/create.py b/src/dynamix_sdk/api/cloudbroker/account/create.py index f6ee36e..a976d8b 100644 --- a/src/dynamix_sdk/api/cloudbroker/account/create.py +++ b/src/dynamix_sdk/api/cloudbroker/account/create.py @@ -16,13 +16,12 @@ class CloudbrokerAccountCreateProtocol(_base.BasePostAPIFunctionProtocol): cpu_count_quota: None | int = None, email_address: None | str = None, storage_policy_quotas: list[_nested.StoragePolicyQuotasAPIParamsNM] | None = None, # noqa: E501 - ext_traffic_quota: None | int = None, gpu_count_quota: None | int = None, ext_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, + sep_pools: None | list[str] = None, description: str | None = None, zone_ids: None | list[int] = None, default_zone_id: None | int = None, diff --git a/src/dynamix_sdk/api/cloudbroker/account/get.py b/src/dynamix_sdk/api/cloudbroker/account/get.py index 804a5af..5c0f1c3 100644 --- a/src/dynamix_sdk/api/cloudbroker/account/get.py +++ b/src/dynamix_sdk/api/cloudbroker/account/get.py @@ -26,26 +26,26 @@ class CloudbrokerAccountGetResultModel(_base.BaseAPIResultModel): send_access_emails: bool status: _nested.AccountStatus storage_policy_ids: list[int] - uniq_pools: list[str] + sep_pools: list[str] updated_timestamp: int version: int vm_features: list[_nested.VMFeature] zones: list[_nested.ZoneAPIResultNM] - @property - def created_datetime(self): + @_base.computed_field + def created_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.created_timestamp) - @property - def deactivation_datetime(self): + @_base.computed_field + def deactivation_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deactivation_timestamp) - @property - def deleted_datetime(self): + @_base.computed_field + def deleted_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.deleted_timestamp) - @property - def updated_datetime(self): + @_base.computed_field + def updated_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.updated_timestamp) diff --git a/src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_parameter.py b/src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_parameter.py new file mode 100644 index 0000000..8ba8f8b --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_parameter.py @@ -0,0 +1,20 @@ +import dynamix_sdk.base as _base +import dynamix_sdk.api._nested as _nested + + +class CloudbrokerAccountSetCpuAllocationParameterResultBool( + _base.BaseAPIResultBool, +): + pass + + +class CloudbrokerAccountSetCpuAllocationParameterProtocol( + _base.BasePostAPIFunctionProtocol, +): + def set_cpu_allocation_parameter( + self, + *, + account_id: int, + cpu_allocation_mode: _nested.CPUAllocationMode, + ) -> CloudbrokerAccountSetCpuAllocationParameterResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_ratio.py b/src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_ratio.py new file mode 100644 index 0000000..095602e --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/account/set_cpu_allocation_ratio.py @@ -0,0 +1,19 @@ +import dynamix_sdk.base as _base + + +class CloudbrokerAccountSetCpuAllocationRatioResultBool( + _base.BaseAPIResultBool, +): + pass + + +class CloudbrokerAccountSetCpuAllocationRatioProtocol( + _base.BasePostAPIFunctionProtocol, +): + def set_cpu_allocation_ratio( + self, + *, + account_id: int, + ratio: float, + ) -> CloudbrokerAccountSetCpuAllocationRatioResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/account/update.py b/src/dynamix_sdk/api/cloudbroker/account/update.py new file mode 100644 index 0000000..f00d42c --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/account/update.py @@ -0,0 +1,27 @@ +import dynamix_sdk.base as _base +import dynamix_sdk.api._nested as _nested + + +class CloudbrokerAccountUpdateResultBool(_base.BaseAPIResultBool): + pass + + +class CloudbrokerAccountUpdateProtocol(_base.BasePostAPIFunctionProtocol): + def update( + self, + *, + account_id: int, + name: None | str = None, + ram_size_quota_mb: None | int = None, + storage_size_quota_gb: None | int = None, + cpu_count_quota: None | int = None, + ext_ip_count_quota: None | int = None, + send_access_emails: bool | None = None, + gpu_count_quota: None | int = None, + sep_pools: None | list[str] = None, + description: str | None = None, + clear_sep_pools: bool = False, + default_zone_id: int | None = None, + storage_policies_quotas: list[_nested.StoragePolicyQuotasAPIParamsNM] | None = None, # noqa: E501 + ) -> CloudbrokerAccountUpdateResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/account/update_compute_features.py b/src/dynamix_sdk/api/cloudbroker/account/update_compute_features.py new file mode 100644 index 0000000..5318794 --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/account/update_compute_features.py @@ -0,0 +1,20 @@ +import dynamix_sdk.base as _base +import dynamix_sdk.api._nested as _nested + + +class CloudbrokerAccountUpdateComputeFeaturesResultBool( + _base.BaseAPIResultBool, +): + pass + + +class CloudbrokerAccountUpdateComputeFeaturesProtocol( + _base.BasePostAPIFunctionProtocol, +): + def update_compute_features( + self, + *, + account_id: int, + vm_features: list[_nested.VMFeature] | None = None, + ) -> CloudbrokerAccountUpdateComputeFeaturesResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/account/update_resource_types.py b/src/dynamix_sdk/api/cloudbroker/account/update_resource_types.py new file mode 100644 index 0000000..dc2f602 --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/account/update_resource_types.py @@ -0,0 +1,18 @@ +import dynamix_sdk.base as _base +import dynamix_sdk.api._nested as _nested + + +class CloudbrokerAccountUpdateResourceTypesResultBool(_base.BaseAPIResultBool): + pass + + +class CloudbrokerAccountUpdateResourceTypesProtocol( + _base.BasePostAPIFunctionProtocol, +): + def update_resource_types( + self, + *, + account_id: int, + resource_types: list[_nested.AccountResourceType], + ) -> CloudbrokerAccountUpdateResourceTypesResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/account/update_user.py b/src/dynamix_sdk/api/cloudbroker/account/update_user.py new file mode 100644 index 0000000..4a2f951 --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/account/update_user.py @@ -0,0 +1,19 @@ +import dynamix_sdk.base as _base +import dynamix_sdk.api._nested as _nested + + +class CloudbrokerAccountUpdateUserResultBool(_base.BaseAPIResultBool): + pass + + +class CloudbrokerAccountUpdateUserProtocol( + _base.BasePostAPIFunctionProtocol, +): + def update_user( + self, + *, + account_id: int, + user_name: str, + access_type: _nested.AccessTypeForSet, + ) -> CloudbrokerAccountUpdateUserResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/compute/_api.py b/src/dynamix_sdk/api/cloudbroker/compute/_api.py index 5490860..622926d 100644 --- a/src/dynamix_sdk/api/cloudbroker/compute/_api.py +++ b/src/dynamix_sdk/api/cloudbroker/compute/_api.py @@ -1,4 +1,5 @@ import dynamix_sdk.base as _base +from .change_read_only import * from .change_security_groups import * from .clone import * from .clone_abort import * @@ -11,6 +12,7 @@ from .stop_migration_out import * class CloudbrokerComputeAPI( _base.BaseAPI, + CloudbrokerComputeChangeReadOnlyProtocol, CloudbrokerComputeChangeSecurityGroupsProtocol, CloudbrokerComputeCloneProtocol, CloudbrokerComputeCloneAbortProtocol, diff --git a/src/dynamix_sdk/api/cloudbroker/compute/change_read_only.py b/src/dynamix_sdk/api/cloudbroker/compute/change_read_only.py new file mode 100644 index 0000000..9f6bd71 --- /dev/null +++ b/src/dynamix_sdk/api/cloudbroker/compute/change_read_only.py @@ -0,0 +1,19 @@ +import dynamix_sdk.base as _base + + +class CloudbrokerComputeChangeReadOnlyResultBool( + _base.BaseAPIResultBool, +): + pass + + +class CloudbrokerComputeChangeReadOnlyProtocol( + _base.BasePostAPIFunctionProtocol +): + def change_read_only( + self, + *, + vm_id: int, + read_only: bool, + ) -> CloudbrokerComputeChangeReadOnlyResultBool: + ... diff --git a/src/dynamix_sdk/api/cloudbroker/compute/clone.py b/src/dynamix_sdk/api/cloudbroker/compute/clone.py index a264fda..fa44159 100644 --- a/src/dynamix_sdk/api/cloudbroker/compute/clone.py +++ b/src/dynamix_sdk/api/cloudbroker/compute/clone.py @@ -16,6 +16,6 @@ class CloudbrokerComputeCloneProtocol(_base.BasePostAPIFunctionProtocol): snapshot_name: str | None = None, sep_pool_name: str | None = None, sep_id: int | None = None, - storage_policy_id: int | None = None, + storage_policy_id: int, ) -> CloudbrokerComputeCloneResultStr: ... diff --git a/src/dynamix_sdk/api/cloudbroker/compute/start_migration_in.py b/src/dynamix_sdk/api/cloudbroker/compute/start_migration_in.py index a6dd09f..80f7774 100644 --- a/src/dynamix_sdk/api/cloudbroker/compute/start_migration_in.py +++ b/src/dynamix_sdk/api/cloudbroker/compute/start_migration_in.py @@ -14,6 +14,6 @@ class CloudbrokerComputeStartMigrationInProtocol( self, *, vm_id: int, - stack_id: int | None = None, + node_id: int | None = None, ) -> CloudbrokerComputeStartMigrationInResultStr: ... diff --git a/src/dynamix_sdk/api/cloudbroker/security_group/create_rule.py b/src/dynamix_sdk/api/cloudbroker/security_group/create_rule.py index 2caed92..ff02bf5 100644 --- a/src/dynamix_sdk/api/cloudbroker/security_group/create_rule.py +++ b/src/dynamix_sdk/api/cloudbroker/security_group/create_rule.py @@ -18,6 +18,6 @@ class CloudbrokerSecurityGroupCreateRuleProtocol( protocol: _nested.SGRuleProtocol | None = None, port_range_max: int | None = None, port_range_min: int | None = None, - remote_ip_prefix: str | None = None, + remote_net_cidr: str | None = None, ) -> CloudbrokerSecurityGroupCreateRuleResultInt: ... diff --git a/src/dynamix_sdk/api/cloudbroker/storage_policy/list.py b/src/dynamix_sdk/api/cloudbroker/storage_policy/list.py index 3d24a0d..4cb1a88 100644 --- a/src/dynamix_sdk/api/cloudbroker/storage_policy/list.py +++ b/src/dynamix_sdk/api/cloudbroker/storage_policy/list.py @@ -23,5 +23,6 @@ class CloudbrokerStoragePolicyListProtocol(_base.BaseGetAPIFunctionProtocol): sep_pool_name: str | None = None, sort_by: str | None = None, status: _nested.StoragePolicyStatus | None = None, + sep_tech_status: _nested.SEPTechStatus | None = None, ) -> CloudbrokerStoragePolicyListResultModel: ... diff --git a/src/dynamix_sdk/api/cloudbroker/user/create.py b/src/dynamix_sdk/api/cloudbroker/user/create.py index 3a928bc..f165e42 100644 --- a/src/dynamix_sdk/api/cloudbroker/user/create.py +++ b/src/dynamix_sdk/api/cloudbroker/user/create.py @@ -2,7 +2,7 @@ import dynamix_sdk.base as _base import dynamix_sdk.api._nested as _nested -class CloudbrokerUserCreateResultBool(_base.BaseAPIResultBool): +class CloudbrokerUserCreateResultStr(_base.BaseAPIResultStr): pass @@ -11,9 +11,9 @@ class CloudbrokerUserCreateProtocol(_base.BasePostAPIFunctionProtocol): self, *, user_name: str, - email_addresses: list[str], + email_address: str, password: str, api_access_group_ids: list[int] | None = None, auth_broker: _nested.AuthBroker | None = None, - ) -> CloudbrokerUserCreateResultBool: + ) -> CloudbrokerUserCreateResultStr: ... diff --git a/src/dynamix_sdk/api/cloudbroker/user/get.py b/src/dynamix_sdk/api/cloudbroker/user/get.py index 1b4603b..7d75b7a 100644 --- a/src/dynamix_sdk/api/cloudbroker/user/get.py +++ b/src/dynamix_sdk/api/cloudbroker/user/get.py @@ -26,8 +26,8 @@ class CloudbrokerUserGetResultModel(_base.BaseAPIResultModel): service_account: bool xmpp: list[_typing.Any] - @property - def last_check_datetime(self): + @_base.computed_field + def last_check_datetime(self) -> _base.datetime | None: return self._get_datetime_from_timestamp(self.last_check_timestamp) diff --git a/src/dynamix_sdk/api/cloudbroker/user/list.py b/src/dynamix_sdk/api/cloudbroker/user/list.py index 4dfb7af..5dc43d9 100644 --- a/src/dynamix_sdk/api/cloudbroker/user/list.py +++ b/src/dynamix_sdk/api/cloudbroker/user/list.py @@ -14,8 +14,8 @@ class CloudbrokerUserListProtocol(_base.BasePostAPIFunctionProtocol): active: bool | None = None, email: str | None = None, name: str | None = None, - page_number: int | None = None, - page_size: int | None = None, + page_number: int = 1, + page_size: int = 100, service_account: bool | None = None, sort_by: str | None = None, ) -> CloudbrokerUserListResultModel: diff --git a/src/dynamix_sdk/api/name_mapping.yml b/src/dynamix_sdk/api/name_mapping.yml index 095046f..21a350a 100644 --- a/src/dynamix_sdk/api/name_mapping.yml +++ b/src/dynamix_sdk/api/name_mapping.yml @@ -87,6 +87,7 @@ bandwidth_limit: bandwidth base_domain: baseDomain binding_name: bindingName bindings: bindings +blkdiscard: blkdiscard blocked: blocked boot_cdrom_image_id: altBootId boot_disk_size_gb: bootdiskSize @@ -124,6 +125,7 @@ bus_num: bus_number bus_num__VGPUAPIResultNM: bus_number bus_num_hex__CloudapiComputeDiskAddParamsModel: bus_number bus_num_hex__CloudapiComputeDiskAttachParamsModel: bus_number +cache_mode: cache can_be_deleted: canBeDeleted capabilities: capabilities cd_presented_to: cdPresentedTo @@ -134,6 +136,8 @@ cdrom_image_id__VMAPIResultNM: cdImageId cdrom_mapping: cdrommap check: check check_ips: checkIps +child_id__CloudapiBserviceGroupParentAddParamsModel: compgroupId +child_id__CloudapiBserviceGroupParentRemoveParamsModel: compgroupId chipset: chipset ci_user_data: userdata ci_user_data__CloudapiBserviceGroupAddParamsModel: userData @@ -142,7 +146,7 @@ ci_user_data__CloudapiK8sUpdateWorkerNodesMetaDataParamsModel: userData ci_user_data__CloudapiK8sWorkersGroupAddParamsModel: userData ckey: _ckey claimed: claimed -clear_uniq_pools: clearUniqPools +clear_sep_pools: clearUniqPools client_host_key__CloudbrokerNodeAddSshIdentityParamsModel: client_host_key client_hostname__CloudbrokerNodeAddSshIdentityParamsModel: client_host_name client_ids: clientIds @@ -168,6 +172,7 @@ consistency: consistency consumed: Consumed correlation_id: correlation_id count_change_mode__CloudapiBserviceGroupResizeParamsModel: mode +cpu_allocation_mode__CloudbrokerAccountSetCpuAllocationParameterParamsModel: strict_loose cpu_allocation_parameter: cpu_allocation_parameter cpu_allocation_ratio: cpu_allocation_ratio cpu_count: cpu @@ -178,6 +183,7 @@ cpu_count__VMAPIResultNM: cpus cpu_count_quota: maxCPUCapacity cpu_count_total: cpuTotal cpu_pin: cpupin +cpu_pin__CloudapiKvmx86CreateBlankParamsModel: cpu_pin created_after_timestamp: createdAfter created_after_timestamp__CloudapiSecurityGroupListParamsModel: created_min created_after_timestamp__CloudapiTasksListParamsModel: updateTimeAt @@ -226,7 +232,6 @@ description__CloudapiDpdknetListParamsModel: description description__CloudapiSecurityGroupCreateParamsModel: description description__CloudapiSecurityGroupListParamsModel: description description__CloudapiSecurityGroupUpdateParamsModel: description -description__CloudapiStackGetResultModel: descr description__CloudapiVfpoolListParamsModel: description description__CloudapiZoneGetResultModel: description description__CloudapiZoneListParamsModel: description @@ -266,6 +271,7 @@ disk_id__CloudbrokerDisksMigrateAbortParamsModel: disk_id disk_id__CloudbrokerDisksMigrateParamsModel: disk_id disk_id__CloudbrokerDisksMigrateStatusParamsModel: disk_id disk_ids: diskIds +disk_ids__SnapshotSetAPIResultNM: disks disk_mapping: diskmap disk_max_size_gb: diskMaxSize disk_path: diskPath @@ -301,7 +307,6 @@ egress_rate: eRate email: email email_address: emailaddress email_addresses: emailaddresses -email_addresses__CloudbrokerUserCreateParamsModel: emailaddress emails: emails enabled: enabled enabled__TenantStatusCountersAPIResultNM: ENABLED @@ -331,9 +336,6 @@ ext_net_ip__VINSForListAPIResultNM: externalIP ext_net_ip__VINSForListDeletedAPIResultNM: externalIP ext_net_name: extNetName ext_net_prefix: ext_netmask -ext_traffic: CU_NP -ext_traffic__ResourceCountersAPIResultNM: exttraffic -ext_traffic_quota: maxNetworkPeerTransfer extnet_ids: extnets extnet_ids__CloudapiZoneGetResultModel: extnetIds extnet_only: extnetOnly @@ -359,6 +361,7 @@ gpu_count: gpu_units gpu_count__ResourceCountersAPIResultNM: gpu gpu_count_quota__CloudapiAccountUpdateParamsModel: gpu_units gpu_count_quota__CloudbrokerAccountCreateParamsModel: gpu_units +gpu_count_quota__CloudbrokerAccountUpdateParamsModel: gpu_units graphics_listen_addr: graphics grid_id: gid group_ids__BServiceAPIResultNM: groups @@ -375,6 +378,7 @@ hostname__CloudbrokerNodeGetSshIdentityResultModel: host_name hot_resize: hotResize hot_resize__CloudapiImageCreateParamsModel: hotresize hp_backed: hpBacked +hp_backed__CloudapiKvmx86CreateBlankParamsModel: hp_backed hw_path: hwPath id: id id__CloudapiAccountListDeletedParamsModel: by_id @@ -400,7 +404,6 @@ id__CloudapiPcideviceListParamsModel: by_id id__CloudapiRgListDeletedParamsModel: by_id id__CloudapiRgListParamsModel: by_id id__CloudapiSecurityGroupListParamsModel: by_id -id__CloudapiStackListParamsModel: by_id id__CloudapiStoragePolicyGetParamsModel: storage_policy_id id__CloudapiStoragePolicyListParamsModel: by_id id__CloudapiVfpoolListParamsModel: by_id @@ -529,7 +532,6 @@ max_status_code__CloudapiAuditListParamsModel: max_status_code max_status_code__CloudbrokerAuditListParamsModel: max_status_code maxconn: maxconn maxqueue: maxqueue -mem_allocation_ratio: mem_allocation_ratio meta: _meta mgmt: mgmt mgmt_ip: mgmtIp @@ -564,8 +566,10 @@ net_ip: network net_ip__CloudapiExtnetListParamsModel: network net_mapping: netmap net_prefix: netmask +net_prefix__CloudapiComputeNetAttachParamsModel: netMask net_prefix__CloudapiExtnetGetResultModel: prefix net_prefix__CloudapiVinsGetResultModel: netMask +net_prefix__InterfaceAPIParamsNM: netMask net_prefix__InterfaceForComputeGetAPIResultNM: netMask net_prefix__InterfaceForComputeListAPIResultNM: netMask net_prefix__VINSExtNetAPIResultNM: prefixlen @@ -583,6 +587,8 @@ new_mac: new_mac_address new_name: new_name new_vm_name__CloudapiComputeMoveToRgParamsModel: name new_vm_uuid: new_vm_uuid +node_auto_start__CloudapiZoneGetResultModel: autostart +node_auto_start__ZoneForListAPIResultNM: autostart node_boot_disk_size_gb__CloudapiK8sWorkersGroupGetByNameResultModel: disk node_boot_disk_size_gb__K8sNodeGroupAPIResultNM: disk node_count__CloudapiK8sWorkerAddParamsModel: num @@ -595,10 +601,13 @@ node_cpu_count__K8sNodeGroupAPIResultNM: cpu node_disk_size_gb__CloudapiK8sWorkersGroupAddParamsModel: workerDisk node_groups: k8sGroups node_id: nodeId +node_id__BServiceVMAPIResultNM: node_id node_id__CloudbrokerAuditListParamsModel: node_id +node_id__CloudbrokerComputeStartMigrationInParamsModel: node_id node_id__CloudbrokerNodeAddSshIdentityParamsModel: node_id node_id__CloudbrokerNodeGetSshIdentityParamsModel: node_id node_id__CloudbrokerNodeUpdateDescriptionParamsModel: nid +node_id__VNFDevResourcesConfigAPIResultNM: node_id node_ids: nodeIds node_ids__AuditAPIResultNM: node_ids node_ram_size_mb__CloudapiK8sWorkersGroupAddParamsModel: workerRam @@ -607,6 +616,7 @@ node_ram_size_mb__K8sNodeGroupAPIResultNM: ram nodes: vfs ntp_servers: ntp numa_affinity: numaAffinity +numa_affinity__CloudapiKvmx86CreateBlankParamsModel: numa_affinity numa_node_id: numaNodeId os_password__CloudapiImageCreateParamsModel: password os_password__CloudapiImageGetResultModel: password @@ -639,6 +649,7 @@ password__DiskForListUnattachedAPIResultNM: passwd password__UserAPIResultNM: passwd path: path pci_device_id: deviceId +pci_devices__VMAPIResultNM: devices pci_slot_num: pciSlot pci_slot_num__DiskForCAComputeGetAPIResultNM: pci_slot pci_slot_num__VGPUAPIResultNM: pciSlot @@ -651,7 +662,7 @@ pgpu_mode__CloudapiVgpuListParamsModel: mode pgpu_mode__VGPUAPIResultNM: mode pgpu_processor_type__CloudapiVgpuListParamsModel: type pgpu_processor_type__VGPUAPIResultNM: type -pinned_to_stack: pinnedToStack +pinned_to_node: pinnedToNode policy: policy pool_id: poolId pool_names: pool_names @@ -693,16 +704,18 @@ ram_size_mb__TenantQuotasAPIResultNM: CU_M ram_size_mb__TenantQuotasForResourceConsumptionAPIResultNM: CU_M ram_size_quota_mb: maxMemoryCapacity ram_size_total_mb: ramTotal +ratio: ratio 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 +read_only: read_only reality_device_number: realityDeviceNumber recursively__CloudapiRgDeleteParamsModel: force redundant: redundant reference_id: referenceId remote_group_id: remote_group_id -remote_ip_prefix: remote_ip_prefix +remote_net_cidr: remote_ip_prefix replication: replication request_datetime_iso8601: _ttl request_id: request_id @@ -754,7 +767,11 @@ same_node: sameNode same_node_soft: sameNodeSoft sdn: sdn sdn_access_group_id: sdn_access_group_id +sdn_logical_port_description: sdn_logical_port_description +sdn_logical_port_display_name: sdn_logical_port_display_name sdn_logical_port_id: sdn_interface_id +sdn_object_group_id: sdn_object_group_id +sdn_segment_id: sdn_segment_id sdn_support: sdn_support secondary: secondary secondary_node: secondaryNode @@ -795,8 +812,17 @@ sep_pool_name__CloudbrokerStoragePolicyAddPoolParamsModel: pool_name sep_pool_name__CloudbrokerStoragePolicyDeletePoolParamsModel: pool_name sep_pool_name__CloudbrokerStoragePolicyListParamsModel: pool_name sep_pools: access_seps_pools +sep_pools__AccountForCBAPIResultNM: uniqPools +sep_pools__CloudapiAccountGetResultModel: uniqPools +sep_pools__CloudapiAccountUpdateParamsModel: uniqPools +sep_pools__CloudapiRgUpdateParamsModel: uniqPools +sep_pools__CloudbrokerAccountCreateParamsModel: uniqPools +sep_pools__CloudbrokerAccountGetResultModel: uniqPools +sep_pools__CloudbrokerAccountUpdateParamsModel: uniqPools sep_pools__ResourceCountersAPIResultNM: seps +sep_pools__ResourceGroupAPIResultNM: uniqPools sep_pools__StoragePolicyCountersAPIResultNM: seps +sep_tech_status: sep_tech_status sep_type: sepType seq_no: seqNo server_default_settings: serverDefaultSettings @@ -812,7 +838,7 @@ shared__CloudapiDisksListDeletedParamsModel: shared shared__CloudapiDisksListParamsModel: shared shared_with: sharedWith show_all: showAll -size_available: sizeAvailable +size_available_gb: sizeAvailable size_gb__CloudapiDisksCreateParamsModel: size size_gb__CloudapiImageGetResultModel: size size_gb__CloudapiImageListParamsModel: imageSize @@ -820,7 +846,7 @@ size_gb__DiskAPIParamsNM: size size_gb__ImageForListAPIResultNM: size size_iops_sec: size_iops_sec size_max_gb: sizeMax -size_used: sizeUsed +size_used_gb: sizeUsed slowstart: slowstart snapshot_id: snapshotId snapshot_name: snapshotName @@ -838,7 +864,7 @@ sort_by__CloudbrokerAuditListParamsModel: sort_by sort_by__CloudbrokerComputeMigrateStorageListParamsModel: sort_by sort_by__CloudbrokerSecurityGroupListParamsModel: sort_by sort_by__CloudbrokerStoragePolicyListParamsModel: sort_by -source_stack_id: sourceStackId +source_node_id: sourceNodeId source_type: source_type source_value: source_value ssh_public_key: pubkey @@ -846,7 +872,6 @@ ssh_public_key__CloudapiBserviceCreateParamsModel: sshKey ssh_public_key__CloudapiBserviceGetResultModel: sshKey ssh_public_key__VNFDevMGMTConfigAPIResultNM: sshkey ssh_user_name: sshUser -stack_id: stackId stage: stage start: start start__CloudapiComputeRedeployParamsModel: autoStart @@ -863,8 +888,9 @@ stopped: stopped stopped__VMStatusCountersAPIResultNM: Stopped storage_id: storageId storage_policies: storage_policy -storage_policies__CloudapiRgUpdateParamsModel: storage_policies storage_policies__ResourceCountersAPIResultNM: policies +storage_policies_quotas__CloudapiRgUpdateParamsModel: storage_policies +storage_policies_quotas__CloudbrokerAccountUpdateParamsModel: storage_policies storage_policy_id: storage_policy_id storage_policy_ids: storage_policy_ids storage_policy_quotas__CloudapiRgCreateParamsModel: storage_policies @@ -893,7 +919,7 @@ target: target target_dev: target_dev target_disk_id: targetDiskId target_image_id: targetId -target_stack_id: targetStackId +target_node_id: targetNodeId task_guid: taskId tech_status: techStatus timestamp: timestamp @@ -902,7 +928,7 @@ topology: topology total_bytes : end total_bytes_sec: total_bytes_sec total_bytes_sec_max: total_bytes_sec_max -total_disks_size: totalDisksSize +total_disks_size_gb: totalDisksSize total_iops_sec: total_iops_sec total_iops_sec_max: total_iops_sec_max traffic_direction: direction @@ -913,7 +939,6 @@ type: type type__CloudapiImageListParamsModel: typeImage types: types unc_path: UNCPath -uniq_pools: uniqPools updated_after_timestamp__CloudapiSecurityGroupListParamsModel: updated_min updated_after_timestamp__CloudbrokerSecurityGroupListParamsModel: updated_min updated_before_timestamp__CloudapiSecurityGroupListParamsModel: updated_max @@ -926,10 +951,10 @@ updated_timestamp__SecurityGroupAPIResultNM: updated_at updated_timestamp__TrunkAPIResultNM: updated_at usage: usage use_unsafe: use_unsafe -user: user -user_group_id: userGroupId +user_emails__AccessAPIResultNM: emails user_managed: userManaged user_name: username +user_name__AccessAPIResultNM: userGroupId user_name__AuditAPIResultNM: user user_name__CloudapiAccountAddUserParamsModel: userId user_name__CloudapiAccountDeleteUserParamsModel: userId @@ -941,11 +966,13 @@ user_name__CloudapiComputeUserUpdateParamsModel: userName user_name__CloudapiRgAccessGrantParamsModel: user user_name__CloudapiRgAccessRevokeParamsModel: user user_name__CloudapiUserApiListParamsModel: userId +user_name__CloudbrokerAccountUpdateUserParamsModel: userId user_name__CloudbrokerAuditListParamsModel: user user_name__CloudbrokerUserBlockParamsModel: user_id user_name__CloudbrokerUserGetParamsModel: userId user_name__CloudbrokerUserUnblockParamsModel: user_id user_name__GuestAgentAPIResultNM: user +user_name__VNFDevMGMTConfigAPIResultNM: user uuid: uuid valid: valid value: value @@ -996,6 +1023,7 @@ vm_id__CloudapiComputeGuestAgentExecuteParamsModel: compute_id vm_id__CloudapiComputeGuestAgentFeatureUpdateParamsModel: compute_id vm_id__CloudapiDisksGetResultModel: machineId vm_id__CloudbrokerAuditListParamsModel: compute_id +vm_id__CloudbrokerComputeChangeReadOnlyParamsModel: compute_id vm_id__CloudbrokerComputeChangeSecurityGroupsParamsModel: compute_id vm_id__CloudbrokerComputeCloneAbortParamsModel: compute_id vm_id__CloudbrokerComputeStartMigrationOutParamsModel: compute_id diff --git a/src/dynamix_sdk/api/path_mapping.yml b/src/dynamix_sdk/api/path_mapping.yml index 6d24202..41d055f 100644 --- a/src/dynamix_sdk/api/path_mapping.yml +++ b/src/dynamix_sdk/api/path_mapping.yml @@ -99,10 +99,11 @@ net_detach: netDetach pfw_add: pfwAdd pfw_del: pfwDel pfw_list: pfwList -pin_to_stack: pinToStack power_cycle: powerCycle remove_def_net: removeDefNet remove_zone: removeZone +set_cpu_allocation_parameter: setCpuAllocationParameter +set_cpu_allocation_ratio: setCpuAllocationRatio set_custom_fields: setCustomFields set_data: setData set_def_net: setDefNet @@ -116,6 +117,8 @@ static_route_list: staticRouteList tag_add: tagAdd tag_remove: tagRemove unpin_from_stack: unpinFromStack +update_compute_features: updateComputeFeatures +update_resource_types: updateResourceTypes update_sysctl_params: updateSysctlParams update_user: updateUser update_worker_nodes_meta_data: updateWorkerNodesMetaData diff --git a/src/dynamix_sdk/base.py b/src/dynamix_sdk/base.py index 351a514..4c3b7e8 100644 --- a/src/dynamix_sdk/base.py +++ b/src/dynamix_sdk/base.py @@ -18,12 +18,13 @@ from typing import ( ) import requests -from pydantic import ( +from pydantic import ( # noqa: F401 AliasGenerator, BaseModel as PydanticBaseModel, ConfigDict, PrivateAttr, create_model, + computed_field, ) import yaml @@ -248,11 +249,17 @@ def get_alias( f' not found in name mapping dictionary.' ) + if field_name in model_cls.model_computed_fields: + return field_name + for base_cls in model_cls.__bases__: if not issubclass(base_cls, BaseModel): continue - if field_name not in base_cls.model_fields.keys(): + if ( + field_name not in base_cls.model_fields.keys() + and field_name not in base_cls.model_computed_fields + ): continue return get_alias( @@ -391,23 +398,22 @@ class BaseAPI(ABC): def __getattribute__(self, name: str) -> Any: if name.startswith('_'): return super().__getattribute__(name) - else: - if name in self.__annotations__: - annotation = self.__annotations__[name] - if issubclass(annotation, BaseAPI): - api_cls = annotation - return api_cls( - config=self._config, - parent_api_group_names=( - self._parent_api_group_names + [name] - ) + if name in self.__annotations__: + annotation = self.__annotations__[name] + if issubclass(annotation, BaseAPI): + api_cls = annotation + return api_cls( + config=self._config, + parent_api_group_names=( + self._parent_api_group_names + [name] ) - else: - attr_value = super().__getattribute__(name) - if not inspect.ismethod(attr_value): - raise ValueError + ) + attr_value = super().__getattribute__(name) - return self._make_api_function(attr_value) + if inspect.ismethod(attr_value): + return self._make_api_function(attr_value) + + return attr_value def _make_api_function( self, @@ -523,6 +529,7 @@ class BaseAPI(ABC): ).prepare() attempts = config.http503_attempts + status_code = None try: with requests.Session() as session: while True: @@ -531,7 +538,8 @@ class BaseAPI(ABC): verify=config.verify_ssl, ) - if http_response.status_code == 503: + status_code = http_response.status_code + if status_code == 503: if attempts < 1: break else: @@ -547,6 +555,7 @@ class BaseAPI(ABC): orig_exception=e, func_name=func_name, func_kwargs=kwargs, + status_code=status_code, ) else: raise e diff --git a/src/dynamix_sdk/dynamix.py b/src/dynamix_sdk/dynamix.py index a902178..5340a40 100644 --- a/src/dynamix_sdk/dynamix.py +++ b/src/dynamix_sdk/dynamix.py @@ -8,7 +8,10 @@ from .api import API class Dynamix: _config: config.ConfigWithAuth - _COMPATIBLE_DX_BUILD = 1145 + _COMPATIBLE_DX_MINOR_VERSION: str = '4.5' + _COMPATIBLE_DX_BUILD: int = 1269 + _COMPATIBILITY_WITH_NEWER_DX_BUILDS: bool = True + _dx_version: str _dx_build: int def __init__( @@ -35,35 +38,90 @@ class Dynamix: wrap_request_exceptions=wrap_request_exceptions, f_decorators=f_decorators, ) - self._dx_build = self._get_dx_build() + + self._dx_version, self._dx_build = self._get_dx_version_and_build() + self._check_dx_compatibility(ignore_api_compatibility) @property def api(self): return API(config=self._config) + @property + def compatible_dx_minor_version(self) -> str: + return self._COMPATIBLE_DX_MINOR_VERSION + @property def compatible_dx_build(self) -> int: return self._COMPATIBLE_DX_BUILD + @property + def compatibility_with_newer_dx_builds(self) -> bool: + return self._COMPATIBILITY_WITH_NEWER_DX_BUILDS + + @property + def dx_version(self) -> str: + return self._dx_version + @property def dx_build(self) -> int: return self._dx_build - def _get_dx_build(self) -> int: + def _get_dx_version_and_build(self) -> tuple[str, int]: result = self.api.system.info.version() - dx_build = json.loads(result.replace("'", '"'))['build'] + + decoded_data = json.loads(result.replace("'", '"')) + + dx_version = decoded_data['version'] + if not isinstance(dx_version, str): + raise TypeError(f'DX version must be an str, got {type(dx_version)}') # noqa: E501 + + dx_build = decoded_data['build'] if not isinstance(dx_build, int): raise TypeError(f'DX build must be an int, got {type(dx_build)}') - return dx_build + + return dx_version, dx_build def _check_dx_compatibility(self, ignore_api_compatibility: bool): - if self.dx_build != self.compatible_dx_build: + if ( + self.dx_version.rsplit('.', 1)[0] + != self.compatible_dx_minor_version + ): + message = ( + f'Incompatible minor Dynamix version. ' + f'Dynamix version: {self.dx_version}. ' + f'Compatible minor version: ' + f'{self.compatible_dx_minor_version}.' + ) + + if ignore_api_compatibility: + warn(message=message) + return + else: + raise IncompatibleAPIError(message=message) + + build_is_compatible = ( + ( + self.compatibility_with_newer_dx_builds + and self.dx_build >= self.compatible_dx_build + ) + or ( + not self.compatibility_with_newer_dx_builds + and self.dx_build == self.compatible_dx_build + ) + ) + + if not build_is_compatible: + compatible_build_str = f'{self.compatible_dx_build}' + if self.compatibility_with_newer_dx_builds: + compatible_build_str = f'>={compatible_build_str}' + message = ( f'Incompatible Dynamix build. ' f'Dynamix build: {self.dx_build}. ' - f'Compatible build: {self.compatible_dx_build}' + f'Compatible build: {compatible_build_str}.' ) + if ignore_api_compatibility: warn(message=message) else: diff --git a/src/dynamix_sdk/exceptions.py b/src/dynamix_sdk/exceptions.py index 024cdd7..ffa610c 100644 --- a/src/dynamix_sdk/exceptions.py +++ b/src/dynamix_sdk/exceptions.py @@ -17,13 +17,16 @@ class RequestException(Exception): orig_exception: requests.exceptions.RequestException func_name: str func_kwargs: None | dict = None + status_code: None | int = None def __init__( self, orig_exception: requests.exceptions.RequestException, func_name: str, func_kwargs: None | dict, + status_code: None | int, ): self.orig_exception = orig_exception self.func_name = func_name self.func_kwargs = func_kwargs + self.status_code = status_code diff --git a/src/dynamix_sdk/utils.py b/src/dynamix_sdk/utils.py index e96aaaf..b076a56 100644 --- a/src/dynamix_sdk/utils.py +++ b/src/dynamix_sdk/utils.py @@ -68,3 +68,15 @@ def get_nested_value( f'The key {key} found, but its value is not a dictionary.' ) return value + + +def camel_to_snake(name: str) -> str: + result = [] + for i, ch in enumerate(name): + if ch.isupper(): + if i > 0 and not name[i - 1].isupper(): + result.append('_') + result.append(ch.lower()) + else: + result.append(ch) + return ''.join(result) diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index 3826a46..0000000 --- a/tests/conftest.py +++ /dev/null @@ -1,224 +0,0 @@ -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 deleted file mode 100644 index e69de29..0000000 diff --git a/tests/local/test_class_naming.py b/tests/local/test_class_naming.py deleted file mode 100644 index 64281d7..0000000 --- a/tests/local/test_class_naming.py +++ /dev/null @@ -1,101 +0,0 @@ -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 = gen_cls_name_from_url_path( - url_path=api_group.name, - postfix='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 = gen_cls_name_from_url_path( - url_path=f'{api_group.name}/{api_subgroup.name}', - postfix='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 deleted file mode 100644 index 83146d7..0000000 --- a/tests/local/test_name_mapping_file.py +++ /dev/null @@ -1,68 +0,0 @@ -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 deleted file mode 100644 index 60597b4..0000000 --- a/tests/local/test_types.py +++ /dev/null @@ -1,154 +0,0 @@ -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 deleted file mode 100644 index 00bf90b..0000000 --- a/tests/test_with_api_definition.py +++ /dev/null @@ -1,442 +0,0 @@ -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.sep.list_available_sep_and_pools: result type must be child of BaseAPIParamsNestedModel.''', # noqa E501 - '''cloudapi.k8s.create: parameter "lb_sysctl_params", target_annotation = dict[str, str], expected_annot = ''', # noqa E501 - 'cloudbroker.storage_policy.get: result type must be child of BaseAPIParamsNestedModel.', # noqa: E501 - 'cloudbroker.storage_policy.add_pool: result type must be child of BaseAPIParamsNestedModel.', # noqa: E501 - '''cloudapi.lb.create: parameter "sysctl_params", target_annotation = dict[str, str], expected_annot = ''', # noqa E501 - 'cloudbroker.storage_policy.delete_pool: result type must be child of BaseAPIParamsNestedModel.', # noqa: E501 - 'cloudbroker.storage_policy.update: result type must be child of BaseAPIParamsNestedModel.', # noqa: E501 - 'cloudapi.zone.list: result type must be child of BaseAPIParamsNestedModel.', # noqa: E501 - 'cloudapi.storage_policy.get: result type must be child of BaseAPIParamsNestedModel.', # noqa: E501 - '''cloudapi.compute.guest_agent_execute: parameter "args", target_annotation = dict[str, typing.Any], expected_annot = ''', # noqa: E501 - '''cloudapi.image.create: API has parameter "asyncMode" but this SDK function doesn't have corresponding parameter.''', # noqa: E501 - '''cloudapi.flipgroup.create: API has parameter "clientType" but this SDK function doesn't have corresponding parameter.''', # noqa: E501 - '''cloudapi.k8s.create: API has parameter "oidcCertificate" but this SDK function doesn't have corresponding parameter.''', # noqa: E501 - 'cloudapi.disks.limit_io: API has parameter "iops" 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.compute.net_attach: default value of parameter "mtu" must be 1500.', # noqa: E501 - 'cloudapi.disks.create: default value of parameter "size_gb" must be 10.', - 'cloudapi.kvmx86.create: annotation of parameter "ci_user_data" must contain BaseAPIParamsNestedModel.', # noqa: E501 - '''cloudapi.lb.update_sysctl_params: parameter "sysctl_params", target_annotation = dict[str, str], expected_annot = ''', # noqa: E501 - '''cloudbroker.compute.start_migration_out: parameter "disk_mapping", target_annotation = dict[str, str], expected_annot = ''', # noqa E501 - '''cloudbroker.compute.start_migration_out: parameter "cdrom_mapping", target_annotation = dict[str, str], expected_annot = ''', # noqa E501 - '''cloudbroker.compute.start_migration_out: parameter "net_mapping", target_annotation = dict[str, dynamix_sdk.api._nested.params.NetMapConfigAPIParamsNM], expected_annot = ''', # noqa E501 - 'cloudbroker.user.create: default value of parameter "password" must be strongpassword.', # noqa: E501 -] - -type_mappings = { - 'integer': int, - 'string': str, - 'boolean': bool, - 'object': sdk_types.BaseAPIParamsNestedModel, - 'number': float, - 'dict': sdk_types.BaseAPIResultModel, - 'array': list, -} - - -def check_param( - *, - sdk_func_name: str, - sdk_func_params: dict[str, inspect.Parameter], - param_name: str, - param_def: dict, - required: bool, -) -> list[str]: - inconsistencies: list[str] = [] - api_def_param_enum = param_def.get('enum') - if ( - api_def_param_enum is not None - and not isinstance(api_def_param_enum, list) - ): - raise TypeError - - api_def_param_default = param_def.get('default') - api_def_param_type = param_def.get('type') - if ( - api_def_param_type is not None - and not isinstance(api_def_param_type, str) - ): - raise TypeError - - api_def_param_items = param_def.get('items') - if ( - api_def_param_items is not None - and not isinstance(api_def_param_items, dict) - ): - raise TypeError - - necessary_dx_param = required or not ( - api_def_param_enum - and len(api_def_param_enum) == 1 - and api_def_param_default is not None - ) - - if not isinstance(param_name, str): - raise TypeError - - param_exists_in_sdk = param_name in sdk_func_params.keys() - - if not param_exists_in_sdk: - if necessary_dx_param: - inconsistencies.append( - f'{sdk_func_name}:' - f' API has parameter "{param_name}"' - f" but this SDK function doesn't have" - f' corresponding parameter.' - ) - return inconsistencies - - sdk_func_param = sdk_func_params[param_name] - sdk_param_name = sdk_func_param.name - - if not necessary_dx_param: - inconsistencies.append( - f'{sdk_func_name}:' - f' parameter "{sdk_param_name} is unnecessary in SDK.' - ) - return inconsistencies - - if sdk_func_param.annotation is Any: - inconsistencies.append( - f'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must not be Any.' - ) - return inconsistencies - - if api_def_param_default and api_def_param_default != -1: - if sdk_func_param.default != api_def_param_default: - inconsistencies.append( - f'{sdk_func_name}:' - f' default value of parameter "{sdk_param_name}"' - f' must be {api_def_param_default}.' - ) - - target_annotation = sdk_func_param.annotation - if not 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 - or api_def_param_default == [] - ): - if sdk_func_param.default is not None: - inconsistencies.append( - f'{sdk_func_name}:' - f' default value of parameter "{sdk_param_name}"' - f' must be None.' - ) - - if not isinstance(sdk_func_param.annotation, UnionType): - inconsistencies.append( - f'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must be Union.' - ) - return inconsistencies - - annot_union_args = get_args(sdk_func_param.annotation) - if NoneType not in annot_union_args: - inconsistencies.append( - f'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must contain None.' - ) - return inconsistencies - - if not len(annot_union_args) == 2: - inconsistencies.append( - f'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must contain two types.' - ) - return inconsistencies - - 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'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must contain list[...]' - ) - return inconsistencies - - 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: - return inconsistencies - 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: - return inconsistencies - - elif api_def_param_type is not None: - expected_annot = type_mappings.get(api_def_param_type) - if expected_annot is None: - return inconsistencies - - if ( - not inspect.isclass(target_annotation) - or isinstance(target_annotation, GenericAlias) - ): - inconsistencies.append( - f'{sdk_func_name}:' - f' parameter "{sdk_param_name}",' - f' {target_annotation = },' # noqa: E202, E251 - f' {expected_annot = }' # noqa: E202, E251 - ) - return inconsistencies - - if api_def_param_enum: - if not issubclass(target_annotation, Enum): - inconsistencies.append( - f'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must contain enum.' - ) - return inconsistencies - - enum_from_annot = target_annotation - enum_values = [e.value for e in enum_from_annot] - if sorted(api_def_param_enum) != sorted(enum_values): - inconsistencies.append( - f'{sdk_func_name}:' - f' parameter "{sdk_param_name}":' - f' enum {enum_from_annot.__qualname__}' - f' must contain these values:' - f' {api_def_param_enum}.' - ) - elif not issubclass(target_annotation, expected_annot): - inconsistencies.append( - f'{sdk_func_name}:' - f' annotation of parameter "{sdk_param_name}"' - f' must contain {expected_annot.__qualname__}.' - ) - - return inconsistencies - - -def find_unused_sdk_params( - *, - sdk_func_name: str, - sdk_func_params: dict[str, inspect.Parameter], - dx_param_names: set[str], -) -> list[str]: - inconsistencies: list[str] = [] - unused_sdk_param_names = [ - sdk_param.name - for alias, sdk_param in sdk_func_params.items() - if alias not in dx_param_names - ] - - if unused_sdk_param_names: - inconsistencies.append( - f'{sdk_func_name}:' - f' unused parameters:' - f' {", ".join(sorted(unused_sdk_param_names))}' - ) - return inconsistencies - - -def test_with_api_definition( - dx_api_definition: JSON, - sdk_dx_functions: tuple[SDKFunction, ...], -): - inconsistencies: list[str] = [] - for sdk_func in sdk_dx_functions: - sdk_func_name = ".".join(sdk_func.call_attrs) - 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"{sdk_func_name}:" - 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'{sdk_func_name}:' - 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 - - 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'{sdk_func_name}:' - 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') or [] - body_schema = None - - if not isinstance(api_definition_params, list): - raise TypeError - - for p in api_definition_params: - if ( - isinstance(p, dict) - and p.get('name') == 'body' and 'schema' in p - ): - body_schema = p['schema'] - break - - dx_param_names = set() - param_defs = dict() - required_params = set() - - if isinstance(body_schema, dict) and 'properties' in body_schema: - properties = body_schema['properties'] - - if not isinstance(properties, dict): - raise TypeError - - required = body_schema.get('required', []) - if not isinstance(required, list): - raise TypeError - - dx_param_names.update(properties.keys()) - param_defs.update(properties) - required_params.update(required) - - else: - if not api_definition_params: - if sdk_func_params: - inconsistencies.append( - f'{sdk_func_name}: this function ' - f'must not have parameters.' - ) - continue - - for p in api_definition_params: - if not isinstance(p, dict): - raise TypeError - param_name = p['name'] - if not isinstance(param_name, str): - raise TypeError - - dx_param_names.add(param_name) - param_defs[param_name] = p - if p.get('required', False): - required_params.add(param_name) - - if not dx_param_names: - if sdk_func_params: - inconsistencies.append( - f"{sdk_func_name}: this function must not have parameters." - ) - else: - inconsistencies.extend( - find_unused_sdk_params( - sdk_func_name=sdk_func_name, - sdk_func_params=sdk_func_params, - dx_param_names=dx_param_names, - ) - ) - - for param_name, param_def in param_defs.items(): - if not isinstance(param_def, dict): - raise TypeError - - inconsistencies.extend( - check_param( - sdk_func_name=sdk_func_name, - sdk_func_params=sdk_func_params, - param_name=param_name, - param_def=param_def, - required=param_name in required_params, - ) - ) - - 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) - )