Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 12e0b306ba | |||
|
|
42271b7a65 | ||
| 8ac3b274ea | |||
| 9950acd535 | |||
| 0903c452d9 | |||
|
|
cf584c8123 |
213
README.md
213
README.md
@@ -7,6 +7,7 @@ Dynamix SDK - это библиотека, написанная на языке
|
||||
- Версия 9.0.х Dynamix-SDK соответствует 4.1.0 версии платформы
|
||||
- Версия 10.0.х Dynamix-SDK соответствует 4.2.0 версии платформы
|
||||
- Версия 11.0.х Dynamix-SDK соответствует 4.3.0 версии платформы
|
||||
- Версия 12.x.х Dynamix-SDK соответствует 4.4.0 версии платформы
|
||||
|
||||
## Оглавление
|
||||
|
||||
@@ -76,7 +77,7 @@ Dynamix SDK - это библиотека, написанная на языке
|
||||
Выполните команду в терминале:
|
||||
|
||||
```bash
|
||||
go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v12
|
||||
```
|
||||
|
||||
## Список API
|
||||
@@ -85,6 +86,7 @@ go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
|
||||
- `cloudapi` - пользовательская группа, которая позволяет воспользоваться всем стардартным функционалом платформы;
|
||||
- `cloudbroker` - административная группа, которая позволяет воспользоваться всем стандартным функционалом платформы и расширенными возможностями, включающими в себя управление пользователями, ресурсами, платформами размещения ресурсов и т.д.
|
||||
- `sdn` - группа для работы с SDN;
|
||||
|
||||
### Cloudapi
|
||||
|
||||
@@ -107,11 +109,15 @@ go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
- `Locations` - получение информации о grid площадки;
|
||||
- `Prometheus` - получение статистики prometheus;
|
||||
- `RG` - управление ресурсными группами аккаунта;
|
||||
- `Security group` – управление группами безопасности;
|
||||
- `SEP` - управление storage endpoint (sep);
|
||||
- `Stack` - получение информации о вычислительных узлах;
|
||||
- `Storage policy` – получение информации о политиках хранения;
|
||||
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
|
||||
- `Trunk` - получение информации о транковых портах;
|
||||
- `VFPool` - управление пулом виртуальных сетевых функций;
|
||||
- `VINS` - управление виртуальными изолированными сетями.
|
||||
- `VINS` - управление виртуальными изолированными сетями;
|
||||
- `Zone` - управление зонами.
|
||||
|
||||
### Cloudbroker
|
||||
|
||||
@@ -122,6 +128,7 @@ go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
- `Audit` - получение информации о событиях системы;
|
||||
- `APIAccess` - управление доступом к API и его объектам;
|
||||
- `Backup` - управление резервным копированием;
|
||||
- `BService` - управление группами виртуальных машин (computes);
|
||||
- `Compute` - управление виртуальными машинами (индивидуально);
|
||||
- `Disks` - управление виртуальными дисками;
|
||||
- `DPDK` - управление виртуальными сетями DPDK;
|
||||
@@ -139,13 +146,24 @@ go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
- `Prometheus` - получение статистики prometheus;
|
||||
- `Resmon` - получение статистики resource monitoring;
|
||||
- `RG` - управление ресурсными группами аккаунта;
|
||||
- `Security group` – управление группами безопасности;
|
||||
- `SEP` - управление storage endpoint (sep);
|
||||
- `Stack` - получение информации о вычислительных узлах;
|
||||
- `Storage policy` – управление политиками хранения;
|
||||
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
|
||||
- `Trunk` - управление транковыми портами;
|
||||
- `User` - управление пользователями (индивидуально);
|
||||
- `VGPU` - управление виртуальными графическими процессорами;
|
||||
- `VFPool` - управление пулом виртуальных сетевых функций;
|
||||
- `VINS` - управление виртуальными изолированными сетями.
|
||||
- `Zone` - управление зонами.
|
||||
|
||||
### SDN
|
||||
|
||||
`SDN` позволяет выполнять запросы к группе пользовательских конечных точек
|
||||
Данная группа ручек позволяет выполнять следующие операции в платформе:
|
||||
|
||||
- `AccessGroup` - управление группами доступа
|
||||
|
||||
## Работа с библиотекой
|
||||
|
||||
@@ -176,7 +194,7 @@ go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main(){
|
||||
@@ -201,7 +219,7 @@ func main(){
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -246,8 +264,8 @@ sslSkipVerify: false
|
||||
package main
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -273,6 +291,7 @@ func main() {
|
||||
|
||||
- `pkg/cloudapi` - для `cloudapi`
|
||||
- `pkg/cloudbroker` - для `cloudbroker`
|
||||
- `pkg/sdn` - для `sdn`
|
||||
|
||||
В каждом пакете находятся пакеты групп API:
|
||||
|
||||
@@ -293,16 +312,21 @@ func main() {
|
||||
- `pkg/cloudapi/locations` - для `Locations`
|
||||
- `pkg/cloudapi/prometheus` - для `Prometheus`
|
||||
- `pkg/cloudapi/rg` - для `RG`
|
||||
- `pkg/cloudapi/secgroup` - для `Security group`
|
||||
- `pkg/cloudapi/sep` - для `SEP`
|
||||
- `pkg/cloudapi/stack` - для `Stack`
|
||||
- `pkg/cloudapi/stpolicy` - для `Storage policy`
|
||||
- `pkg/cloudapi/tasks` - для `Tasks`
|
||||
- `pkg/cloudapi/trunk` - для `Trunk`
|
||||
- `pkg/cloudapi/vfpool` - для `VFPool`
|
||||
- `pkg/cloudapi/vins` - для `VINS`
|
||||
- `pkg/cloudapi/zone` - для `Zone`
|
||||
- **cloudbroker**:
|
||||
- `pkg/cloudbroker/account` - для `Account`
|
||||
- `pkg/cloudbroker/audit` - для `Audit`
|
||||
- `pkg/cloudbroker/apiaccess` - для `APIAccess`
|
||||
- `pkg/cloudbroker/backup` - для `Backup`
|
||||
- `pkg/cloudbroker/bservice` - для `Basic Service`
|
||||
- `pkg/cloudbroker/compute` - для `Compute`
|
||||
- `pkg/cloudbroker/disks` - для `Disks`
|
||||
- `pkg/cloudbroker/dpdknet` - для `DPDK`
|
||||
@@ -320,13 +344,19 @@ func main() {
|
||||
- `pkg/cloudbroker/prometheus` - для `Prometheus`
|
||||
- `pkg/cloudbroker/resmon` - для `Resmon`
|
||||
- `pkg/cloudbroker/rg` - для `RG`
|
||||
- `pkg/cloudbroker/secgroup` - для `Security group`
|
||||
- `pkg/cloudbroker/sep` - для `SEP`
|
||||
- `pkg/cloudbroker/stack` - для `Stack`
|
||||
- `pkg/cloudbroker/stpolicy` - для `Storage policy`
|
||||
- `pkg/cloudbroker/tasks` - для `Tasks`
|
||||
- `pkg/cloudbroker/trunk` - для `Trunk`
|
||||
- `pkg/cloudbroker/user` - для `User`
|
||||
- `pkg/cloudbroker/vgpu` - для `VGPU`
|
||||
- `pkg/cloudbroker/vfpool` - для `VFPool`
|
||||
- `pkg/cloudbroker/vins` - для `VINS`
|
||||
- `pkg/cloudbroker/zone` - для `Zone`
|
||||
- **sdn**:
|
||||
- `pkg/sdn/access_groups` - для `AccessGroups`
|
||||
|
||||
Все поля структуры имеют описание, в которых содержится:
|
||||
|
||||
@@ -426,9 +456,9 @@ type CreateRequest struct {
|
||||
package main
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/kvmx86"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/kvmx86"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -460,7 +490,7 @@ func main() {
|
||||
|
||||
Чтобы выполнить запрос, необходимо:
|
||||
|
||||
1. Вызвать у клиента метод, отвечаеющий за определение группы API для взаимодействия, это может быть `.CloudAPI()`, либо `.CloudBroker()`. Данные методы возвращаеют соответствующие структуры, с помощью которых можно совершать запросы.
|
||||
1. Вызвать у клиента метод, отвечающий за определение группы API для взаимодействия, это может быть `.CloudAPI()`, `.CloudBroker()` или `.SDN()`. Данные методы возвращают соответствующие структуры, с помощью которых можно совершать запросы.
|
||||
2. Вызвать у возвращенной структуры метод, определяющий группу ручек для взаимодействия.
|
||||
|
||||
Доступные методы для `.CloudAPI()`:
|
||||
@@ -481,11 +511,15 @@ func main() {
|
||||
- `.Locations()` - для работы с `Locations`
|
||||
- `.Prometheus()` - для работы с `Prometheus`
|
||||
- `.RG()` - для работы с `RG`
|
||||
- `.SecurityGroup()` - для работы с `Security Group`
|
||||
- `.SEP()` - для работы с `SEP`
|
||||
- `.Stack()` - для работы с `Stack`
|
||||
- `.StPolicy()` - для работы с `Storage Policy`
|
||||
- `.Tasks()` - для работы с `Tasks`
|
||||
- `.Trunk()` - для работы с `Trunk`
|
||||
- `.VFPool()` - для работы с `VFPool`
|
||||
- `.VINS()` - для работы с `VINS`
|
||||
- `.Zone()` - для работы с `Zone`
|
||||
|
||||
Доступные методы для `.CloudBroker()`:
|
||||
|
||||
@@ -493,6 +527,7 @@ func main() {
|
||||
- `.Audit()` - для работы с `Audit`
|
||||
- `.APIAccess()` - для работы с `APIAccess`
|
||||
- `.Backup()` - для работы с `Backup`
|
||||
- `.BService()` - для работы с `BService`
|
||||
- `.Compute()` - для работы с `Compute`
|
||||
- `.Disks()` - для работы с `Disks`
|
||||
- `.DPDKNet()` - для работы с `DPDK`
|
||||
@@ -510,13 +545,21 @@ func main() {
|
||||
- `.Prometheus()` - для работы с `Prometheus`
|
||||
- `.Resmon()` - для работы с `Resmon`
|
||||
- `.RG()` - для работы с `RG`
|
||||
- `.SecurityGroup()` - для работы с `Security Group`
|
||||
- `.SEP()` - для работы с `SEP`
|
||||
- `.Stack()` - для работы с `Stack`
|
||||
- `.StPolicy()` - для работы с `Storage Policy`
|
||||
- `.Tasks()` - для работы с `Tasks`
|
||||
- `.Trunk()` - для работы с `Trunk`
|
||||
- `.User()` - для работы с `User`
|
||||
- `.VGPU()` - для работы с `VGPU`
|
||||
- `.VFPool()` - для работы с `VFPool`
|
||||
- `.VINS()` - для работы с `VINS`
|
||||
- `.Zone()` - для работы с `Zone`
|
||||
|
||||
Доступные методы для `.SDN()`:
|
||||
|
||||
- `.AccessGroup()` - для работы с `AccessGroup`
|
||||
|
||||
3. Вызвать метод, отвечающий за выполнение запроса и передать в него:
|
||||
|
||||
@@ -542,9 +585,9 @@ import (
|
||||
"log"
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/kvmx86"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/kvmx86"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -592,9 +635,9 @@ import (
|
||||
"log"
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/account"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/account"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -772,9 +815,9 @@ import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudbroker/compute"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudbroker/compute"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -830,9 +873,9 @@ import (
|
||||
"log"
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/bservice"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/bservice"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -885,10 +928,10 @@ import (
|
||||
"log"
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/tasks"
|
||||
tasks_cb "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudbroker/tasks"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/tasks"
|
||||
tasks_cb "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudbroker/tasks"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -968,7 +1011,7 @@ func main() {
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main(){
|
||||
@@ -992,7 +1035,7 @@ func main(){
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1033,8 +1076,8 @@ sslSkipVerify: true
|
||||
package main
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1061,8 +1104,8 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1144,7 +1187,7 @@ func main() {
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main(){
|
||||
@@ -1172,7 +1215,7 @@ func main(){
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1189,7 +1232,7 @@ func main() {
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1255,8 +1298,8 @@ func main() {
|
||||
package main
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1289,8 +1332,8 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1330,8 +1373,8 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1369,8 +1412,8 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1423,11 +1466,11 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudbroker/kvmx86"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudbroker/kvmx86"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1489,7 +1532,7 @@ func main() {
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main(){
|
||||
@@ -1522,8 +1565,8 @@ func main(){
|
||||
package main
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -1554,46 +1597,46 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Настройка конфигурации
|
||||
legacyCfg := config.LegacyConfig{
|
||||
Username: "<USERNAME>",
|
||||
Password: "<PASSWORD>",
|
||||
Domain: "dynamix",
|
||||
DecortURL: "https://mr4.digitalenergy.online",
|
||||
Retries: 5,
|
||||
}
|
||||
|
||||
legacyCfg.SetTimeout(5 * time.Minute)
|
||||
|
||||
cfg := config.UniversalConfig{
|
||||
LegacyConfig: &legacyCfg,
|
||||
// Настройка конфигурации
|
||||
legacyCfg := config.LegacyConfig{
|
||||
Username: "<USERNAME>",
|
||||
Password: "<PASSWORD>",
|
||||
Domain: "dynamix",
|
||||
DecortURL: "https://mr4.digitalenergy.online",
|
||||
Retries: 5,
|
||||
}
|
||||
|
||||
// Создание клиента
|
||||
universalClient := decort.NewUniversal(cfg)
|
||||
|
||||
// Создание структуры запроса
|
||||
// CreateRequest - реквест на создание виртуальной машины
|
||||
req := kvmx86.CreateRequest{
|
||||
RGID: 123,
|
||||
Name: "compute",
|
||||
CPU: 4,
|
||||
RAM: 4096,
|
||||
ImageID: 321,
|
||||
}
|
||||
legacyCfg.SetTimeout(5 * time.Minute)
|
||||
|
||||
// Выполнение запроса
|
||||
res, err := universalClient.CloudAPI().KVMX86().Create(context.Background(), req)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cfg := config.UniversalConfig{
|
||||
LegacyConfig: &legacyCfg,
|
||||
}
|
||||
|
||||
fmt.Println(res)
|
||||
// Создание клиента
|
||||
universalClient := decort.NewUniversal(cfg)
|
||||
|
||||
// Создание структуры запроса
|
||||
// CreateRequest - реквест на создание виртуальной машины
|
||||
req := kvmx86.CreateRequest{
|
||||
RGID: 123,
|
||||
Name: "compute",
|
||||
CPU: 4,
|
||||
RAM: 4096,
|
||||
ImageID: 321,
|
||||
}
|
||||
|
||||
// Выполнение запроса
|
||||
res, err := universalClient.CloudAPI().KVMX86().Create(context.Background(), req)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
fmt.Println(res)
|
||||
}
|
||||
```
|
||||
|
||||
@@ -1607,7 +1650,7 @@ func main() {
|
||||
|
||||
```go
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
)
|
||||
|
||||
func main(){
|
||||
|
||||
26
check.go
26
check.go
@@ -8,7 +8,7 @@ import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/constants"
|
||||
)
|
||||
|
||||
type CheckInfo struct {
|
||||
@@ -28,7 +28,13 @@ func (de DecortClient) Check() (*CheckInfo, error) {
|
||||
|
||||
err = json.Unmarshal([]byte(strings.Replace(strings.Trim(string(res), `"`), "\\", "", -1)), &info)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var v string
|
||||
json.Unmarshal([]byte(res), &v)
|
||||
if _, exists := constants.VersionMap[v]; exists {
|
||||
info.Version = v
|
||||
} else {
|
||||
return nil, fmt.Errorf("platform version isn't supported")
|
||||
}
|
||||
}
|
||||
|
||||
if v, ok := constants.VersionMap[info.Version]; ok {
|
||||
@@ -51,7 +57,13 @@ func (bvs BVSDecortClient) Check() (*CheckInfo, error) {
|
||||
|
||||
err = json.Unmarshal([]byte(strings.Replace(strings.Trim(string(res), `"`), "\\", "", -1)), &info)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var v string
|
||||
json.Unmarshal([]byte(res), &v)
|
||||
if _, exists := constants.VersionMap[v]; exists {
|
||||
info.Version = v
|
||||
} else {
|
||||
return nil, fmt.Errorf("platform version isn't supported")
|
||||
}
|
||||
}
|
||||
|
||||
if v, ok := constants.VersionMap[info.Version]; ok {
|
||||
@@ -74,7 +86,13 @@ func (ldc LegacyDecortClient) Check() (*CheckInfo, error) {
|
||||
|
||||
err = json.Unmarshal([]byte(strings.Replace(strings.Trim(string(res), `"`), "\\", "", -1)), &info)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
var v string
|
||||
json.Unmarshal([]byte(res), &v)
|
||||
if _, exists := constants.VersionMap[v]; exists {
|
||||
info.Version = v
|
||||
} else {
|
||||
return nil, fmt.Errorf("platform version isn't supported")
|
||||
}
|
||||
}
|
||||
|
||||
if v, ok := constants.VersionMap[info.Version]; ok {
|
||||
|
||||
102
client.go
102
client.go
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -16,11 +17,12 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/go-querystring/query"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudbroker"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudbroker"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/sdn"
|
||||
)
|
||||
|
||||
// DecortClient is HTTP-client for platform
|
||||
@@ -38,12 +40,6 @@ func New(cfg config.Config) *DecortClient {
|
||||
cfg.Retries = 5
|
||||
}
|
||||
|
||||
var expiryTime time.Time
|
||||
|
||||
if cfg.Token != "" {
|
||||
expiryTime = time.Now().AddDate(0, 0, 1)
|
||||
}
|
||||
|
||||
return &DecortClient{
|
||||
decortURL: cfg.DecortURL,
|
||||
client: &http.Client{
|
||||
@@ -54,9 +50,8 @@ func New(cfg config.Config) *DecortClient {
|
||||
},
|
||||
},
|
||||
},
|
||||
cfg: trimConfig(&cfg),
|
||||
expiryTime: expiryTime,
|
||||
mutex: &sync.Mutex{},
|
||||
cfg: trimConfig(&cfg),
|
||||
mutex: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,6 +65,11 @@ func (dc *DecortClient) CloudBroker() *cloudbroker.CloudBroker {
|
||||
return cloudbroker.New(dc)
|
||||
}
|
||||
|
||||
// SDN builder
|
||||
func (dc *DecortClient) SDN() *sdn.SDN {
|
||||
return sdn.New(dc)
|
||||
}
|
||||
|
||||
// DecortApiCall method for sending requests to the platform
|
||||
func (dc *DecortClient) DecortApiCall(ctx context.Context, method, url string, params interface{}) ([]byte, error) {
|
||||
|
||||
@@ -107,6 +107,47 @@ func (dc *DecortClient) DecortApiCall(ctx context.Context, method, url string, p
|
||||
return respBytes, err
|
||||
}
|
||||
|
||||
// DecortApiCallCtype method for sending requests to the platform with content type
|
||||
func (dc *DecortClient) DecortApiCallCtype(ctx context.Context, method, url, ctype string, params interface{}) ([]byte, error) {
|
||||
|
||||
var body *bytes.Buffer
|
||||
|
||||
switch ctype {
|
||||
case constants.MIMESTREAM:
|
||||
body = bytes.NewBuffer(params.([]byte))
|
||||
case constants.MIMEJSON:
|
||||
jsonBody, err := json.Marshal(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBuffer(jsonBody)
|
||||
default:
|
||||
ctype = constants.MIMEPOSTForm
|
||||
values, err := query.Values(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBufferString(values.Encode())
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, method, dc.decortURL+constants.RESTMACHINE+url, body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// get token
|
||||
if err = dc.getToken(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// perform request
|
||||
respBytes, err := dc.do(req, ctype)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return respBytes, err
|
||||
}
|
||||
|
||||
// DecortApiCallMP method for sending requests to the platform
|
||||
func (dc *DecortClient) DecortApiCallMP(ctx context.Context, method, url string, params interface{}) ([]byte, error) {
|
||||
body, ctype, err := multiPartReq(params)
|
||||
@@ -170,8 +211,13 @@ func (dc *DecortClient) getToken(ctx context.Context) error {
|
||||
|
||||
// save token in config
|
||||
token := string(tokenBytes)
|
||||
expiryTime, err := getTokenExp(token)
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot get expiry time: %w", err)
|
||||
}
|
||||
|
||||
dc.cfg.Token = token
|
||||
dc.expiryTime = time.Now().AddDate(0, 0, 1)
|
||||
dc.expiryTime = expiryTime
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -375,3 +421,29 @@ func trimConfig(cfg *config.Config) config.Config {
|
||||
cfg.DecortURL = strings.TrimSuffix(cfg.DecortURL, "/")
|
||||
return *cfg
|
||||
}
|
||||
|
||||
func getTokenExp(token string) (time.Time, error) {
|
||||
parts := strings.Split(token, ".")
|
||||
if len(parts) != 3 {
|
||||
return time.Time{}, fmt.Errorf("invalid token format")
|
||||
}
|
||||
|
||||
payload, err := base64.RawURLEncoding.DecodeString(parts[1])
|
||||
if err != nil {
|
||||
return time.Time{}, fmt.Errorf("error decode payload from token: %w", err)
|
||||
}
|
||||
|
||||
var claims map[string]interface{}
|
||||
if err := json.Unmarshal(payload, &claims); err != nil {
|
||||
return time.Time{}, err
|
||||
}
|
||||
|
||||
exp, ok := claims["exp"]
|
||||
if !ok {
|
||||
return time.Time{}, fmt.Errorf("exp time bot found")
|
||||
}
|
||||
|
||||
expTime := time.Unix(int64(exp.(float64)), 0)
|
||||
|
||||
return expTime, nil
|
||||
}
|
||||
|
||||
@@ -14,10 +14,10 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/go-querystring/query"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudbroker"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudbroker"
|
||||
)
|
||||
|
||||
// BVSDecortClient is HTTP-client for platform
|
||||
@@ -131,6 +131,72 @@ func (bdc *BVSDecortClient) DecortApiCall(ctx context.Context, method, url strin
|
||||
return respBytes, err
|
||||
}
|
||||
|
||||
// DecortApiCallCtype method for sending requests to the platform with content type
|
||||
func (bdc *BVSDecortClient) DecortApiCallCtype(ctx context.Context, method, url, ctype string, params interface{}) ([]byte, error) {
|
||||
var body *bytes.Buffer
|
||||
|
||||
switch ctype {
|
||||
case constants.MIMESTREAM:
|
||||
body = bytes.NewBuffer(params.([]byte))
|
||||
case constants.MIMEJSON:
|
||||
jsonBody, err := json.Marshal(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBuffer(jsonBody)
|
||||
default:
|
||||
ctype = constants.MIMEPOSTForm
|
||||
values, err := query.Values(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBufferString(values.Encode())
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, method, bdc.decortURL+constants.RESTMACHINE+url, body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// get token
|
||||
if bdc.cfg.Token.AccessToken == "" {
|
||||
if _, err = bdc.GetToken(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// refresh token
|
||||
if bdc.cfg.Token.RefreshToken != "" && bdc.cfg.Token.Expiry.Add(-time.Duration(bdc.cfg.TimeToRefresh)*time.Minute).Before(time.Now()) {
|
||||
if _, err := bdc.RefreshToken(ctx); err != nil {
|
||||
if _, err = bdc.GetToken(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// perform request
|
||||
reqCopy := req.Clone(ctx)
|
||||
respBytes, err := bdc.do(req, ctype)
|
||||
if err == nil {
|
||||
return respBytes, nil
|
||||
}
|
||||
|
||||
// get token and retry in case of access denied
|
||||
if err.Error() == "access is denied" {
|
||||
_, err = bdc.GetToken(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
respBytes, err = bdc.do(reqCopy, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return respBytes, err
|
||||
}
|
||||
|
||||
func (bdc *BVSDecortClient) DecortApiCallMP(ctx context.Context, method, url string, params interface{}) ([]byte, error) {
|
||||
body, ctype, err := multiPartReq(params)
|
||||
if err != nil {
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// Configuration for creating request to platform
|
||||
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"time"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/serialization"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/serialization"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
type BVSConfig struct {
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"time"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// Legacy client configuration
|
||||
|
||||
2
go.mod
2
go.mod
@@ -1,4 +1,4 @@
|
||||
module repository.basistech.ru/BASIS/dynamix-golang-sdk/v11
|
||||
module repository.basistech.ru/BASIS/dynamix-golang-sdk/v12
|
||||
|
||||
go 1.20
|
||||
|
||||
|
||||
@@ -7,6 +7,9 @@ type Caller interface {
|
||||
// DecortApiCall method for sending requests to the platform
|
||||
DecortApiCall(ctx context.Context, method, url string, params interface{}) ([]byte, error)
|
||||
|
||||
// DecortApiCallCtype method for sending requests to the platform
|
||||
DecortApiCallCtype(ctx context.Context, method, url, ctype string, params interface{}) ([]byte, error)
|
||||
|
||||
// DecortApiCallMP method for sending requests to the platform
|
||||
DecortApiCallMP(ctx context.Context, method, url string, params interface{}) ([]byte, error)
|
||||
}
|
||||
|
||||
@@ -2,9 +2,23 @@ package constants
|
||||
|
||||
const (
|
||||
RESTMACHINE = "/restmachine"
|
||||
)
|
||||
|
||||
// RAM_DIVISIBILITY sets divisibility of RAM value
|
||||
RAM_DIVISIBILITY uint64 = 128
|
||||
const (
|
||||
MIMEJSON = "application/json"
|
||||
MIMEHTML = "text/html"
|
||||
MIMEXML = "application/xml"
|
||||
MIMEXML2 = "text/xml"
|
||||
MIMEPlain = "text/plain"
|
||||
MIMEPOSTForm = "application/x-www-form-urlencoded"
|
||||
MIMEMultipartPOSTForm = "multipart/form-data"
|
||||
MIMEPROTOBUF = "application/x-protobuf"
|
||||
MIMEMSGPACK = "application/x-msgpack"
|
||||
MIMEMSGPACK2 = "application/msgpack"
|
||||
MIMEYAML = "application/x-yaml"
|
||||
MIMEYAML2 = "application/yaml"
|
||||
MIMETOML = "application/toml"
|
||||
MIMESTREAM = "application/octet-stream"
|
||||
)
|
||||
|
||||
var FileName = map[string]string{
|
||||
@@ -14,5 +28,9 @@ var FileName = map[string]string{
|
||||
var K8sValues = []string{"labels", "taints", "annotations, additionalSANs"}
|
||||
|
||||
var VersionMap = map[string]string{
|
||||
"4.4.0": "-",
|
||||
"4.3.0": "-",
|
||||
"4.2.0": "-",
|
||||
"4.1.1": "-",
|
||||
"4.1.0": "-",
|
||||
}
|
||||
|
||||
@@ -6,20 +6,14 @@ import (
|
||||
"net/url"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/interfaces"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/multierror"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/interfaces"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/multierror"
|
||||
)
|
||||
|
||||
// computeDriverValidator is used to validate Driver field in kvmx86 create.
|
||||
func computeDriverValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, computeDriverValues)
|
||||
}
|
||||
|
||||
// protoValidator is used to validate Proto fields.
|
||||
func protoValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
@@ -57,13 +51,6 @@ func resTypesValidator(fe validator.FieldLevel) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// driverValidator is used to validate Driver fields.
|
||||
func driverValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, driverValues)
|
||||
}
|
||||
|
||||
// accountCUTypeValidator is used to validate CUType field.
|
||||
func accountCUTypeValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
@@ -120,6 +107,27 @@ func computex86NetTypeValidator(fe validator.FieldLevel) bool {
|
||||
return IsInSlice(fieldValue, computex86NetTypeValues)
|
||||
}
|
||||
|
||||
// securityGroupDirectionValidator is used to validate Direction field
|
||||
func securityGroupDirectionValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, securityGroupDirectionValues)
|
||||
}
|
||||
|
||||
// securityGroupEthertypeValidator is used to validate Ethertype field
|
||||
func securityGroupEthertypeValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, securityGroupEthertypeValues)
|
||||
}
|
||||
|
||||
// securityGroupProtocolValidator is used to validate Protocol field
|
||||
func securityGroupProtocolValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, securityGroupProtocolValues)
|
||||
}
|
||||
|
||||
// computeOrderValidator is used to validate Order field.
|
||||
func computeOrderValidator(fe validator.FieldLevel) bool {
|
||||
fieldSlice, ok := fe.Field().Interface().([]string)
|
||||
@@ -206,22 +214,6 @@ func imageTypeValidator(fe validator.FieldLevel) bool {
|
||||
return IsInSlice(fieldValue, imageTypeValues)
|
||||
}
|
||||
|
||||
// imageDriversValidator is used to validate Drivers field.
|
||||
func imageDriversValidator(fe validator.FieldLevel) bool {
|
||||
fieldSlice, ok := fe.Field().Interface().([]string)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, item := range fieldSlice {
|
||||
if !IsInSlice(item, imageDriversValues) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// imageArchitectureValidator is used to validate Architecture field.
|
||||
func imageArchitectureValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
@@ -414,6 +406,12 @@ func languageValidator(fe validator.FieldLevel) bool {
|
||||
return IsInSlice(fieldValue, languageValues)
|
||||
}
|
||||
|
||||
func userProviderValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, userProviders)
|
||||
}
|
||||
|
||||
// sepTypeValidator is used to validate sepType fields
|
||||
func sepTypeValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
@@ -421,6 +419,13 @@ func sepTypeValidator(fe validator.FieldLevel) bool {
|
||||
return IsInSlice(fieldValue, sepTypeValues)
|
||||
}
|
||||
|
||||
// deviceValidator is used to validate extnet device fields
|
||||
func deviceValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
|
||||
return IsInSlice(fieldValue, deviceValues)
|
||||
}
|
||||
|
||||
// ValidateRAM checks if request contains RAM value that is positive integer divisible by divisibility passed.
|
||||
// It is recommended to pass constants.RAM_DIVISIBILITY as divisility arguement
|
||||
func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {
|
||||
@@ -442,3 +447,13 @@ func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {
|
||||
}
|
||||
return multierror.Join(errs...)
|
||||
}
|
||||
|
||||
// trunkTagsValidator checks if trunk_tags is in range from 1 to 4095
|
||||
func trunkTagsValidator(fe validator.FieldLevel) bool {
|
||||
fieldValue := fe.Field().String()
|
||||
numFieldValue, err := strconv.ParseInt(fieldValue, 10, 64)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return uint64(numFieldValue) >= uint64(trunkTagsMin) && uint64(numFieldValue) <= uint64(trunkTagsMax)
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package validators
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/multierror"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/multierror"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
@@ -28,12 +28,6 @@ func errorMessage(fe validator.FieldError) string {
|
||||
case "isBool":
|
||||
return fmt.Sprintf("%s %s: must be bool type", prefix, fe.Field())
|
||||
|
||||
case "driver":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(driverValues))
|
||||
|
||||
case "accessType":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
@@ -128,12 +122,6 @@ func errorMessage(fe validator.FieldError) string {
|
||||
fe.Field(),
|
||||
joinValues(computeDataDisksValues))
|
||||
|
||||
case "computeDriver":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(computeDriverValues))
|
||||
|
||||
// Disk Validators
|
||||
case "diskType":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
@@ -201,12 +189,6 @@ func errorMessage(fe validator.FieldError) string {
|
||||
fe.Field(),
|
||||
joinValues(imageTypeValues))
|
||||
|
||||
case "imageDrivers":
|
||||
return fmt.Sprintf("%s %s must contain only the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(imageDriversValues))
|
||||
|
||||
case "imageArchitecture":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
@@ -333,6 +315,44 @@ func errorMessage(fe validator.FieldError) string {
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(sepTypeValues))
|
||||
|
||||
// user validators
|
||||
case "userProvider":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(userProviders))
|
||||
|
||||
// security group validators
|
||||
case "securityGroupDirection":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(securityGroupDirectionValues))
|
||||
|
||||
case "securityGroupEthertype":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(securityGroupEthertypeValues))
|
||||
|
||||
case "securityGroupProtocol":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(securityGroupProtocolValues))
|
||||
|
||||
// trunk tags validator
|
||||
case "trunkTags":
|
||||
return fmt.Sprintf("%s %s must be in range from 1 to 4095",
|
||||
prefix,
|
||||
fe.Field())
|
||||
|
||||
case "device":
|
||||
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||
prefix,
|
||||
fe.Field(),
|
||||
joinValues(deviceValues))
|
||||
}
|
||||
|
||||
return fe.Error()
|
||||
|
||||
@@ -31,11 +31,6 @@ func registerAllValidators(validate *validator.Validate) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("computeDriver", computeDriverValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("apiGroup", apiGroupValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -51,11 +46,6 @@ func registerAllValidators(validate *validator.Validate) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("driver", driverValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("imageBootType", imageBootTypeValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -66,11 +56,6 @@ func registerAllValidators(validate *validator.Validate) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("imageDrivers", imageDriversValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("imageArchitecture", imageArchitectureValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -281,10 +266,40 @@ func registerAllValidators(validate *validator.Validate) error {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("userProvider", userProviderValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("sepType", sepTypeValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("device", deviceValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("trunkTags", trunkTagsValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("securityGroupDirection", securityGroupDirectionValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("securityGroupEthertype", securityGroupEthertypeValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = validate.RegisterValidation("securityGroupProtocol", securityGroupProtocolValidator)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package validators
|
||||
var (
|
||||
apiGroupValues = []string{"cloudapi", "cloudbroker", "system"}
|
||||
|
||||
driverValues = []string{"KVM_X86"}
|
||||
accessTypeValues = []string{"R", "RCX", "ARCXDU"}
|
||||
resTypesValues = []string{"compute", "vins", "k8s", "openshift", "lb", "flipgroup"}
|
||||
protoValues = []string{"tcp", "udp"}
|
||||
@@ -17,17 +16,16 @@ var (
|
||||
computeModeValues = []string{"EQ", "EN", "ANY"}
|
||||
computeDiskTypeValues = []string{"D", "B"}
|
||||
computeNetTypeValues = []string{"EXTNET", "VINS"}
|
||||
computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK"}
|
||||
computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK", "SDN", "EMPTY", "TRUNK"}
|
||||
computeOrderValues = []string{"cdrom", "network", "hd"}
|
||||
computeDataDisksValues = []string{"KEEP", "DETACH", "DESTROY"}
|
||||
computeDriverValues = []string{"KVM_X86", "SVA_KVM_X86"}
|
||||
|
||||
diskTypeValues = []string{"B", "T", "D"}
|
||||
|
||||
flipgroupClientTypeValues = []string{"compute", "vins"}
|
||||
|
||||
kvmNetTypeValues = []string{"EXTNET", "VINS", "NONE"}
|
||||
kvmx86NetTypeValues = []string{"EXTNET", "VINS", "NONE", "VFNIC", "DPDK"}
|
||||
kvmx86NetTypeValues = []string{"EXTNET", "VINS", "EMPTY", "VFNIC", "DPDK", "SDN", "TRUNK"}
|
||||
|
||||
lbAlgorithmValues = []string{"roundrobin", "static-rr", "leastconn"}
|
||||
|
||||
@@ -38,7 +36,6 @@ var (
|
||||
|
||||
imageBootTypeValues = []string{"uefi", "bios"}
|
||||
imageTypeValues = []string{"windows", "linux", "unknown"}
|
||||
imageDriversValues = []string{"KVM_X86"}
|
||||
imageArchitectureValues = []string{"X86_64"}
|
||||
|
||||
sepFieldTypeValues = []string{"int", "str", "bool", "list", "dict"}
|
||||
@@ -49,11 +46,11 @@ var (
|
||||
|
||||
interfaceStateValues = []string{"on", "off"}
|
||||
|
||||
actionValues = []string{"power_on", "shutdown", "force_shutdown", "reboot"}
|
||||
actionValues = []string{"is_powered", "power_on", "shutdown", "force_shutdown", "reboot"}
|
||||
|
||||
vmActionValues = []string{"stop", "move"}
|
||||
|
||||
computeFeaturesValues = []string{"hugepages", "numa", "cpupin", "vfnic", "dpdk", "changemac"}
|
||||
computeFeaturesValues = []string{"hugepages", "numa", "cpupin", "vfnic", "dpdk", "changemac", "trunk"}
|
||||
|
||||
networkInterfaceNamingValues = []string{"eth", "ens"}
|
||||
|
||||
@@ -72,10 +69,20 @@ var (
|
||||
sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des"}
|
||||
|
||||
languageValues = []string{"ru", "en"}
|
||||
|
||||
userProviders = []string{"bvs", "decs3o"}
|
||||
|
||||
deviceValues = []string{"primary", "secondary"}
|
||||
|
||||
securityGroupDirectionValues = []string{"inbound", "outbound"}
|
||||
securityGroupEthertypeValues = []string{"IPv4", "IPv6"}
|
||||
securityGroupProtocolValues = []string{"icmp", "tcp", "udp"}
|
||||
)
|
||||
|
||||
const (
|
||||
mtuMin = 1
|
||||
|
||||
mtuMax = 9216
|
||||
|
||||
trunkTagsMin = 1
|
||||
trunkTagsMax = 4095
|
||||
)
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
@@ -13,10 +14,10 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/go-querystring/query"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudbroker"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/config"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/constants"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudbroker"
|
||||
)
|
||||
|
||||
// LegacyDecortClient is Legacy HTTP-client for platform
|
||||
@@ -102,6 +103,47 @@ func (ldc *LegacyDecortClient) DecortApiCall(ctx context.Context, method, url st
|
||||
return respBytes, err
|
||||
}
|
||||
|
||||
// DecortApiCallCtype method for sending requests to the platform with content type
|
||||
func (ldc *LegacyDecortClient) DecortApiCallCtype(ctx context.Context, method, url, ctype string, params interface{}) ([]byte, error) {
|
||||
// get token
|
||||
if err := ldc.getToken(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var body *bytes.Buffer
|
||||
|
||||
switch ctype {
|
||||
case constants.MIMESTREAM:
|
||||
body = bytes.NewBuffer(params.([]byte))
|
||||
case constants.MIMEJSON:
|
||||
jsonBody, err := json.Marshal(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBuffer(jsonBody)
|
||||
default:
|
||||
ctype = constants.MIMEPOSTForm
|
||||
values, err := query.Values(params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
body = bytes.NewBufferString(values.Encode() + fmt.Sprintf("&authkey=%s", ldc.cfg.Token))
|
||||
}
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, method, ldc.decortURL+constants.RESTMACHINE+url, body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// perform request
|
||||
respBytes, err := ldc.do(req, ctype)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return respBytes, err
|
||||
}
|
||||
|
||||
func (ldc *LegacyDecortClient) DecortApiCallMP(ctx context.Context, method, url string, params interface{}) ([]byte, error) {
|
||||
body, ctype, err := multiPartReq(params)
|
||||
if err != nil {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package cloudapi
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/account"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/account"
|
||||
)
|
||||
|
||||
// Accessing the Account method group
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package account
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/interfaces"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/interfaces"
|
||||
)
|
||||
|
||||
// Structure for creating request to account
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AddUserRequest struct to add permission to access account for a user
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AuditsRequest struct to give list of account audits
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// DeleteRequest struct to delete account
|
||||
@@ -19,18 +19,18 @@ type DeleteRequest struct {
|
||||
}
|
||||
|
||||
// Delete completes delete an account from the system Returns true if account is deleted or was already deleted or never existed
|
||||
func (a Account) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
|
||||
func (a Account) Delete(ctx context.Context, req DeleteRequest) (string, error) {
|
||||
err := validators.ValidateRequest(req)
|
||||
if err != nil {
|
||||
return false, validators.ValidationErrors(validators.GetErrors(err))
|
||||
return "", validators.ValidationErrors(validators.GetErrors(err))
|
||||
}
|
||||
|
||||
url := "/cloudapi/account/delete"
|
||||
|
||||
_, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
result, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
return "", err
|
||||
}
|
||||
|
||||
return true, nil
|
||||
return string(result), nil
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// DeleteUserRequest struct to revoke access to account
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// DisableEnableRequest struct to change status of account
|
||||
@@ -13,10 +13,6 @@ type DisableEnableRequest struct {
|
||||
// ID of account
|
||||
// Required: true
|
||||
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
|
||||
|
||||
// Reason of disabling
|
||||
// Required: false
|
||||
Reason string `url:"reason,omitempty" json:"reason,omitempty"`
|
||||
}
|
||||
|
||||
// Disable disables an account
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
var accounts = ListAccounts{
|
||||
Data: []ItemAccount{
|
||||
{
|
||||
ACL: []RecordACL{
|
||||
ACL: []ListRecordACL{
|
||||
{
|
||||
IsExplicit: true,
|
||||
GUID: "",
|
||||
@@ -25,7 +25,7 @@ var accounts = ListAccounts{
|
||||
UpdatedTime: 1676645275,
|
||||
},
|
||||
{
|
||||
ACL: []RecordACL{
|
||||
ACL: []ListRecordACL{
|
||||
{
|
||||
IsExplicit: true,
|
||||
GUID: "",
|
||||
@@ -43,7 +43,7 @@ var accounts = ListAccounts{
|
||||
UpdatedTime: 1676645275,
|
||||
},
|
||||
{
|
||||
ACL: []RecordACL{
|
||||
ACL: []ListRecordACL{
|
||||
{
|
||||
IsExplicit: true,
|
||||
GUID: "",
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetRequest struct to get information about account
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetConsumedAccountUnitsRequest struct to calculate the currently consumed units for all cloudspaces and resource groups in the account
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetConsumedCloudUnitsByTypeRequest struct to calculate the currently consumed cloud units of the specified type for all cloudspaces and resource groups in the account
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetReservedAccountUnitsRequest struct to calculate the reserved units for all cloudspaces and resource groups in the account
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetResourceConsumptionRequest struct to get resource consumption
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListRequest struct to get list of accounts
|
||||
@@ -30,6 +30,11 @@ type ListRequest struct {
|
||||
// Required: false
|
||||
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
|
||||
|
||||
// Sort by zone id
|
||||
// Default value: 0
|
||||
// Required: false
|
||||
ZoneID uint64 `url:"zone_id,omitempty" json:"zone_id,omitempty"`
|
||||
|
||||
// Page number
|
||||
// Required: false
|
||||
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListComputesRequest struct to get a list of compute instances
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListDeletedRequest struct to get a list of deleted accounts
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListDisksRequest struct to get a list of deleted disks
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListFLIPGroupsRequest struct to get a list of FLIPGroups
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListRGRequest struct to get a list of resource groups
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListTemplatesRequest struct to get a list of templates
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListVINSRequest struct to get a list of VINS
|
||||
|
||||
@@ -1,7 +1,34 @@
|
||||
package account
|
||||
|
||||
// Access Control List
|
||||
type ListRecordACL struct {
|
||||
// Whether access is explicitly specified
|
||||
IsExplicit bool `json:"explicit"`
|
||||
|
||||
// GUID
|
||||
GUID string `json:"guid"`
|
||||
|
||||
// Access rights
|
||||
Rights string `json:"right"`
|
||||
|
||||
// Status
|
||||
Status string `json:"status"`
|
||||
|
||||
// Account Type
|
||||
Type string `json:"type"`
|
||||
|
||||
// Account owner ID
|
||||
UgroupID string `json:"userGroupId"`
|
||||
|
||||
// Is it possible to remove
|
||||
CanBeDeleted bool `json:"canBeDeleted"`
|
||||
}
|
||||
|
||||
// Access Control List
|
||||
type RecordACL struct {
|
||||
// Emails
|
||||
Emails []string `json:"emails"`
|
||||
|
||||
// Whether access is explicitly specified
|
||||
IsExplicit bool `json:"explicit"`
|
||||
|
||||
@@ -46,12 +73,21 @@ type ResourceLimits struct {
|
||||
|
||||
// Number of graphics cores
|
||||
GPUUnits float64 `json:"gpu_units"`
|
||||
|
||||
// Storage policy
|
||||
StoragePolicy []StoragePolicyItem `json:"storage_policy"`
|
||||
}
|
||||
|
||||
type StoragePolicyItem struct {
|
||||
ID uint64 `json:"id"`
|
||||
|
||||
Limit int `json:"limit"`
|
||||
}
|
||||
|
||||
// Main information in one of if the list of accounts
|
||||
type ItemAccount struct {
|
||||
// Access Control List
|
||||
ACL []RecordACL `json:"acl"`
|
||||
ACL []ListRecordACL `json:"acl"`
|
||||
|
||||
// Compute Features
|
||||
ComputeFeatures []string `json:"computeFeatures"`
|
||||
@@ -76,6 +112,9 @@ type ItemAccount struct {
|
||||
|
||||
// Updated time
|
||||
UpdatedTime uint64 `json:"updatedTime"`
|
||||
|
||||
// Zones
|
||||
ZoneIDs []uint64 `json:"zoneIds"`
|
||||
}
|
||||
|
||||
// List of accounts
|
||||
@@ -85,6 +124,18 @@ type ListAccounts struct {
|
||||
EntryCount uint64 `json:"entryCount"`
|
||||
}
|
||||
|
||||
// Policy
|
||||
type Policy struct {
|
||||
// Size of the disk
|
||||
DiskSize float64 `json:"disksize"`
|
||||
|
||||
// Max size of the disk
|
||||
DiskSizeMax float64 `json:"disksizemax"`
|
||||
|
||||
// SEPs used
|
||||
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
||||
}
|
||||
|
||||
// Resources used
|
||||
type Resource struct {
|
||||
// Number of cores
|
||||
@@ -105,6 +156,9 @@ type Resource struct {
|
||||
// Number of grafic cores
|
||||
GPU int64 `json:"gpu"`
|
||||
|
||||
// Policies
|
||||
Policies map[string]Policy `json:"policies"`
|
||||
|
||||
// Number of RAM
|
||||
RAM int64 `json:"ram"`
|
||||
|
||||
@@ -165,14 +219,20 @@ type Machines struct {
|
||||
Halted uint64 `json:"halted"`
|
||||
}
|
||||
|
||||
// Detailed information about the account zone
|
||||
type ZoneID struct {
|
||||
// ID of zone
|
||||
ID int64 `json:"id"`
|
||||
|
||||
// Name of zone
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// Main information about account
|
||||
type RecordAccount struct {
|
||||
// DCLocation
|
||||
DCLocation string `json:"DCLocation"`
|
||||
|
||||
// CKey
|
||||
CKey string `json:"_ckey"`
|
||||
|
||||
// Access control list
|
||||
ACL []RecordACL `json:"acl"`
|
||||
|
||||
@@ -239,6 +299,9 @@ type RecordAccount struct {
|
||||
// Status
|
||||
Status string `json:"status"`
|
||||
|
||||
// Storage policy ids
|
||||
StoragePolicyIDs []uint64 `json:"storage_policy_ids"`
|
||||
|
||||
// UniqPools
|
||||
UniqPools []interface{} `json:"uniqPools"`
|
||||
|
||||
@@ -253,6 +316,12 @@ type RecordAccount struct {
|
||||
|
||||
// VINSes
|
||||
VINSes uint64 `json:"vinses"`
|
||||
|
||||
// Zone
|
||||
ZoneIDs []ZoneID `json:"zoneIds"`
|
||||
|
||||
// Zones
|
||||
DefaultZoneID uint64 `json:"defaultZoneId"`
|
||||
}
|
||||
|
||||
// Main information about compute
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// RestoreRequest struct to restore a deleted account
|
||||
@@ -15,18 +15,18 @@ type RestoreRequest struct {
|
||||
}
|
||||
|
||||
// Restore restores a deleted account
|
||||
func (a Account) Restore(ctx context.Context, req RestoreRequest) (bool, error) {
|
||||
func (a Account) Restore(ctx context.Context, req RestoreRequest) (string, error) {
|
||||
err := validators.ValidateRequest(req)
|
||||
if err != nil {
|
||||
return false, validators.ValidationErrors(validators.GetErrors(err))
|
||||
return "", validators.ValidationErrors(validators.GetErrors(err))
|
||||
}
|
||||
|
||||
url := "/cloudapi/account/restore"
|
||||
|
||||
_, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
result, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
return "", err
|
||||
}
|
||||
|
||||
return true, nil
|
||||
return string(result), nil
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package account
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/serialization"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/serialization"
|
||||
)
|
||||
|
||||
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// UpdateRequest struct to update account
|
||||
@@ -54,6 +54,10 @@ type UpdateRequest struct {
|
||||
// i.e.: ["sep1_poolName1", "sep2_poolName2", etc]
|
||||
// Required: false
|
||||
UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"`
|
||||
|
||||
// Default zone ID
|
||||
// Required: false
|
||||
DefaultZoneID uint64 `url:"defaultZoneId,omitempty" json:"defaultZoneId,omitempty"`
|
||||
}
|
||||
|
||||
// Update updates an account name and resource types and limits
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// UpdateUserRequest struct to update user access rights
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package cloudapi
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/audit"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/audit"
|
||||
)
|
||||
|
||||
// Accessing the Stack method group
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package audit
|
||||
|
||||
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/interfaces"
|
||||
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/interfaces"
|
||||
|
||||
// Structure for creating request to audit
|
||||
type Audit struct {
|
||||
|
||||
81
pkg/cloudapi/audit/filter.go
Normal file
81
pkg/cloudapi/audit/filter.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package audit
|
||||
|
||||
// FilterByID returns ListAudits with specified ID.
|
||||
func (la ListAudits) FilterByID(guid string) ListAudits {
|
||||
predicate := func(ia ItemAudit) bool {
|
||||
return ia.GUID == guid
|
||||
}
|
||||
|
||||
return la.FilterFunc(predicate)
|
||||
}
|
||||
|
||||
// FilterByCall returns ListAudits with specified call.
|
||||
func (la ListAudits) FilterByCall(call string) ListAudits {
|
||||
predicate := func(ic ItemAudit) bool {
|
||||
return ic.Call == call
|
||||
}
|
||||
|
||||
return la.FilterFunc(predicate)
|
||||
}
|
||||
|
||||
// FilterByCorrelationID returns ListAudits with specified correlation id.
|
||||
func (la ListAudits) FilterByCorrelationID(correlationID string) ListAudits {
|
||||
predicate := func(ic ItemAudit) bool {
|
||||
return ic.CorrelationID == correlationID
|
||||
}
|
||||
|
||||
return la.FilterFunc(predicate)
|
||||
}
|
||||
|
||||
// FilterByRemoteAddr returns ListAudits with specified remote address.
|
||||
func (la ListAudits) FilterByRemoteAddr(remoteAddr string) ListAudits {
|
||||
predicate := func(ic ItemAudit) bool {
|
||||
return ic.RemoteAddr == remoteAddr
|
||||
}
|
||||
|
||||
return la.FilterFunc(predicate)
|
||||
}
|
||||
|
||||
// FilterByUser returns ListAudits with specified user name.
|
||||
func (la ListAudits) FilterByUser(user string) ListAudits {
|
||||
predicate := func(ic ItemAudit) bool {
|
||||
return ic.User == user
|
||||
}
|
||||
|
||||
return la.FilterFunc(predicate)
|
||||
}
|
||||
|
||||
// FilterByStatusCode return ListAudits with specified status code.
|
||||
func (la ListAudits) FilterByStatusCode(statusCode uint64) ListAudits {
|
||||
predicate := func(ic ItemAudit) bool {
|
||||
return ic.StatusCode == statusCode
|
||||
}
|
||||
|
||||
return la.FilterFunc(predicate)
|
||||
|
||||
}
|
||||
|
||||
// FilterFunc allows filtering ListAudits based on a user-specified predicate.
|
||||
func (la ListAudits) FilterFunc(predicate func(ItemAudit) bool) ListAudits {
|
||||
var result ListAudits
|
||||
|
||||
for _, item := range la.Data {
|
||||
if predicate(item) {
|
||||
result.Data = append(result.Data, item)
|
||||
}
|
||||
}
|
||||
|
||||
result.EntryCount = uint64(len(result.Data))
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// FindOne returns first found ItemAudit
|
||||
// If none was found, returns an empty struct.
|
||||
func (la ListAudits) FindOne() ItemAudit {
|
||||
if len(la.Data) == 0 {
|
||||
return ItemAudit{}
|
||||
}
|
||||
|
||||
return la.Data[0]
|
||||
}
|
||||
115
pkg/cloudapi/audit/filter_test.go
Normal file
115
pkg/cloudapi/audit/filter_test.go
Normal file
@@ -0,0 +1,115 @@
|
||||
package audit
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
var audits = ListAudits{
|
||||
Data: []ItemAudit{
|
||||
{
|
||||
Args: "[]",
|
||||
Call: "/restmachine/cloudapi/audit/linkedJobs",
|
||||
GUID: "550e8400-e29b-41d4-a716-446655440001",
|
||||
CorrelationID: "550e8400-e29b-41d4-a716-446655440001",
|
||||
Kwargs: `{\"audit_guid\":\"dd8623a1-a887-48c1-a500-c10210d404cf\"}`,
|
||||
RemoteAddr: "192.168.1.100",
|
||||
ResponseTime: 1,
|
||||
Result: `[]`,
|
||||
StatusCode: 200,
|
||||
Timestamp: 1640995200,
|
||||
TimestampEnd: 1640995201,
|
||||
User: "test@example.com",
|
||||
TTL: "2025-07-31T14:22:57.028000",
|
||||
},
|
||||
{
|
||||
Args: "[]",
|
||||
Call: "/restmachine/cloudapi/audit/test",
|
||||
GUID: "550e8400-e29b-41d4-a716-446655440002",
|
||||
CorrelationID: "550e8400-e29b-41d4-a716-446655440002",
|
||||
Kwargs: `{\"audit_guid\":\"dd8623a1-a887-48c1-a500-c10210d404cf\"}`,
|
||||
RemoteAddr: "192.168.1.105",
|
||||
ResponseTime: 5,
|
||||
Result: `[]`,
|
||||
StatusCode: 400,
|
||||
Timestamp: 1640995200,
|
||||
TimestampEnd: 1640995201,
|
||||
User: "test2@example.com",
|
||||
TTL: "2025-07-31T14:22:57.028000",
|
||||
},
|
||||
},
|
||||
EntryCount: 2,
|
||||
}
|
||||
|
||||
func TestFilterByID(t *testing.T) {
|
||||
actual := audits.FilterByID("550e8400-e29b-41d4-a716-446655440002").FindOne()
|
||||
|
||||
if actual.GUID != "550e8400-e29b-41d4-a716-446655440002" {
|
||||
t.Fatal("expected GUID 550e8400-e29b-41d4-a716-446655440002, found: ", actual.GUID)
|
||||
}
|
||||
|
||||
actualEmpty := audits.FilterByID("")
|
||||
|
||||
if len(actualEmpty.Data) != 0 {
|
||||
t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterByCorrelationID(t *testing.T) {
|
||||
actual := audits.FilterByCorrelationID("550e8400-e29b-41d4-a716-446655440002").FindOne()
|
||||
|
||||
if actual.CorrelationID != "550e8400-e29b-41d4-a716-446655440002" {
|
||||
t.Fatal("expected GUID 550e8400-e29b-41d4-a716-446655440002, found: ", actual.CorrelationID)
|
||||
}
|
||||
|
||||
actualEmpty := audits.FilterByCorrelationID("")
|
||||
|
||||
if len(actualEmpty.Data) != 0 {
|
||||
t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterByRemoteAddr(t *testing.T) {
|
||||
actual := audits.FilterByRemoteAddr("192.168.1.100").FindOne()
|
||||
|
||||
if actual.RemoteAddr != "192.168.1.100" {
|
||||
t.Fatal("expected remote address 192.168.1.100, found: ", actual.RemoteAddr)
|
||||
}
|
||||
|
||||
actualEmpty := audits.FilterByRemoteAddr("")
|
||||
|
||||
if len(actualEmpty.Data) != 0 {
|
||||
t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterByUser(t *testing.T) {
|
||||
actual := audits.FilterByUser("test@example.com").FindOne()
|
||||
|
||||
if actual.User != "test@example.com" {
|
||||
t.Fatal("expected user test@example.com, found: ", actual.RemoteAddr)
|
||||
}
|
||||
|
||||
actualEmpty := audits.FilterByUser("")
|
||||
|
||||
if len(actualEmpty.Data) != 0 {
|
||||
t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterByCall(t *testing.T) {
|
||||
actual := audits.FilterByCall("/restmachine/cloudapi/audit/test").FindOne()
|
||||
|
||||
if actual.Call != "/restmachine/cloudapi/audit/test" {
|
||||
t.Fatal("expected call /restmachine/cloudapi/audit/test, found: ", actual.Call)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterByStatusCode(t *testing.T) {
|
||||
actual := audits.FilterByStatusCode(200)
|
||||
|
||||
for _, item := range actual.Data {
|
||||
if item.StatusCode != 200 {
|
||||
t.Fatal("expected 200 status code, found: ", item.StatusCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetRequest struct to get information about account
|
||||
|
||||
124
pkg/cloudapi/audit/list.go
Normal file
124
pkg/cloudapi/audit/list.go
Normal file
@@ -0,0 +1,124 @@
|
||||
package audit
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListRequest struct to give list of account audits
|
||||
type ListRequest struct {
|
||||
|
||||
// Find all audits after point in time (unixtime)
|
||||
// Required: false
|
||||
TimestampAt uint64 `url:"timestamp_at,omitempty" json:"timestamp_at,omitempty"`
|
||||
|
||||
// Find all audits before point in time (unixtime)
|
||||
// Required: false
|
||||
TimestampTo uint64 `url:"timestamp_to,omitempty" json:"timestamp_to,omitempty"`
|
||||
|
||||
// Find by user (Mongo RegExp supported)
|
||||
// Required: false
|
||||
User string `url:"user,omitempty" json:"user,omitempty"`
|
||||
|
||||
// Find by api endpoint (Mongo RegExp supported)
|
||||
// Required: false
|
||||
Call string `url:"call,omitempty" json:"call,omitempty"`
|
||||
|
||||
// Find by request id
|
||||
// Required: false
|
||||
RequestID string `url:"request_id,omitempty" json:"request_id,omitempty"`
|
||||
|
||||
// Find by HTTP min status code
|
||||
// Required: false
|
||||
MinStatusCode uint64 `url:"min_status_code,omitempty" json:"min_status_code,omitempty"`
|
||||
|
||||
// Find by HTTP max status code
|
||||
// Required: false
|
||||
MaxStatusCode uint64 `url:"max_status_code,omitempty" json:"max_status_code,omitempty"`
|
||||
|
||||
// Sort by one of supported fields, format +|-(field)
|
||||
// Required: false
|
||||
SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty" validate:"omitempty,sortBy"`
|
||||
|
||||
// Page number
|
||||
// Required: false
|
||||
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||
|
||||
// Page size
|
||||
// Required: false
|
||||
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
|
||||
|
||||
// Find by resource group id
|
||||
// Required: false
|
||||
RGID uint64 `url:"resgroup_id,omitempty" json:"resgroup_id,omitempty"`
|
||||
|
||||
// Find by compute id
|
||||
// Required: false
|
||||
ComputeID uint64 `url:"compute_id,omitempty" json:"compute_id,omitempty"`
|
||||
|
||||
// Find by account id
|
||||
// Required: false
|
||||
AccountID uint64 `url:"account_id,omitempty" json:"account_id,omitempty"`
|
||||
|
||||
// Find by vins id
|
||||
// Required: false
|
||||
VINSID uint64 `url:"vins_id,omitempty" json:"vins_id,omitempty"`
|
||||
|
||||
// Find by service id
|
||||
// Required: false
|
||||
ServiceID uint64 `url:"service_id,omitempty" json:"service_id,omitempty"`
|
||||
|
||||
// Find by k8s id
|
||||
// Required: false
|
||||
K8SID uint64 `url:"k8s_id,omitempty" json:"k8s_id,omitempty"`
|
||||
|
||||
// Find by flipgroup id
|
||||
// Required: false
|
||||
FLIPGroupID uint64 `url:"flipgroup_id,omitempty" json:"flipgroup_id,omitempty"`
|
||||
|
||||
// Find by load balancer id
|
||||
// Required: false
|
||||
LBID uint64 `url:"lb_id,omitempty" json:"lb_id,omitempty"`
|
||||
|
||||
// Find by sep id
|
||||
// Required: false
|
||||
SEPID uint64 `url:"sep_id,omitempty" json:"sep_id,omitempty"`
|
||||
|
||||
// Exclude audit lines from response
|
||||
// Required: false
|
||||
ExcludeAuditLines bool `url:"exclude_audit_lines,omitempty" json:"exclude_audit_lines,omitempty"`
|
||||
}
|
||||
|
||||
// List gets audit records for the specified account object
|
||||
func (a Audit) List(ctx context.Context, req ListRequest) (*ListAudits, error) {
|
||||
|
||||
res, err := a.ListRaw(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
list := ListAudits{}
|
||||
|
||||
err = json.Unmarshal(res, &list)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &list, nil
|
||||
}
|
||||
|
||||
// ListRaw gets list of audit records an array of bytes
|
||||
func (a Audit) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
|
||||
|
||||
if err := validators.ValidateRequest(req); err != nil {
|
||||
return nil, validators.ValidationErrors(validators.GetErrors(err))
|
||||
}
|
||||
|
||||
url := "/cloudapi/audit/list"
|
||||
|
||||
res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
return res, err
|
||||
}
|
||||
@@ -12,6 +12,9 @@ type RecordAudit struct {
|
||||
// GUID
|
||||
GUID string `json:"guid"`
|
||||
|
||||
// Correlation ID
|
||||
CorrelationID string `json:"correlation_id"`
|
||||
|
||||
// Kwargs
|
||||
Kwargs string `json:"kwargs"`
|
||||
|
||||
@@ -39,3 +42,54 @@ type RecordAudit struct {
|
||||
// User
|
||||
User string `json:"user"`
|
||||
}
|
||||
|
||||
// Main info about audit
|
||||
type ItemAudit struct {
|
||||
// Args
|
||||
Args string `json:"args"`
|
||||
|
||||
// Call
|
||||
Call string `json:"call"`
|
||||
|
||||
// GUID
|
||||
GUID string `json:"guid"`
|
||||
|
||||
// Correlation ID
|
||||
CorrelationID string `json:"correlation_id"`
|
||||
|
||||
// Kwargs
|
||||
Kwargs string `json:"kwargs"`
|
||||
|
||||
// RemoteAddr
|
||||
RemoteAddr string `json:"remote_addr"`
|
||||
|
||||
// Response time
|
||||
ResponseTime float64 `json:"responsetime"`
|
||||
|
||||
// Result
|
||||
Result string `json:"result"`
|
||||
|
||||
// Status code
|
||||
StatusCode uint64 `json:"statuscode"`
|
||||
|
||||
// Timestamp
|
||||
Timestamp float64 `json:"timestamp"`
|
||||
|
||||
// Timestamp End
|
||||
TimestampEnd float64 `json:"timestampEnd"`
|
||||
|
||||
// User
|
||||
User string `json:"user"`
|
||||
|
||||
// TTL
|
||||
TTL string `json:"_ttl"`
|
||||
}
|
||||
|
||||
// List of audits
|
||||
type ListAudits struct {
|
||||
// Data
|
||||
Data []ItemAudit `json:"data"`
|
||||
|
||||
// EntryCount
|
||||
EntryCount uint64 `json:"entryCount"`
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package cloudapi
|
||||
|
||||
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/bservice"
|
||||
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/bservice"
|
||||
|
||||
// Accessing the BService method group
|
||||
func (ca *CloudAPI) BService() *bservice.BService {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// API Actor for managing Compute Group. This actor is a final API for endusers to manage Compute Group
|
||||
package bservice
|
||||
|
||||
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/interfaces"
|
||||
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/interfaces"
|
||||
|
||||
// Structure for creating request to bservice
|
||||
type BService struct {
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// CreateRequest struct for BasicService
|
||||
@@ -25,6 +25,10 @@ type CreateRequest struct {
|
||||
// SSH key to deploy for the specified user. Same key will be deployed to all computes of the service
|
||||
// Required: false
|
||||
SSHKey string `url:"sshKey,omitempty" json:"sshKey,omitempty"`
|
||||
|
||||
// Zone ID
|
||||
// Required: false
|
||||
ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
|
||||
}
|
||||
|
||||
// Create creates blank BasicService instance
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// DeleteRequest struct to delete basic service
|
||||
@@ -16,6 +16,7 @@ type DeleteRequest struct {
|
||||
|
||||
// If set to False, Basic service will be deleted to recycle bin. Otherwise destroyed immediately
|
||||
// Required: false
|
||||
// Default: false
|
||||
Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// DisableRequest struct for disable service
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// EnableRequest struct to disable service
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GetRequest struct to get detailed information about service
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupAddRequest struct to create new compute group within BasicService
|
||||
@@ -38,11 +38,9 @@ type GroupAddRequest struct {
|
||||
// Required: true
|
||||
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
|
||||
|
||||
// Compute driver
|
||||
// should be one of:
|
||||
// - KVM_X86
|
||||
// Compute driver like a KVM_X86, etc.
|
||||
// Required: true
|
||||
Driver string `url:"driver" json:"driver" validate:"driver"`
|
||||
Driver string `url:"driver" json:"driver" validate:"required"`
|
||||
|
||||
// Storage endpoint provider ID
|
||||
// Required: false
|
||||
@@ -75,6 +73,10 @@ type GroupAddRequest struct {
|
||||
//Chipset "i440fx" or "Q35
|
||||
//Required: false
|
||||
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"chipset,omitempty"`
|
||||
|
||||
// ID of the chosen storage policy
|
||||
// Required: false
|
||||
StoragePolicyID uint64 `url:"storage_policy_id,omitempty" json:"storage_policy_id,omitempty"`
|
||||
}
|
||||
|
||||
// GetRAM returns RAM field values
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupComputeRemoveRequest struct to remove group compute
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupGetRequest struct to get detailed information about Compute Group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupParentAddRequest struct to add parent Compute Group relation to the specified Compute Group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupParentRemoveRequest struct to remove parent Compute Group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupRemoveRequest struct for destroy the specified Compute Group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupResizeRequest struct to resize the group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupStartRequest struct to start the specified Compute Group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupStopRequest struct to stop the specified Compute Group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupUpdateRequest struct to update existing Compute group
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupUpdateExtNetRequest struct to update External Network settings
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// GroupUpdateVINSRequest struct to update VINS settings
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListRequest struct to get list of BasicService instances
|
||||
@@ -46,6 +46,11 @@ type ListRequest struct {
|
||||
// Required: false
|
||||
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
|
||||
|
||||
// Sort by zone id
|
||||
// Default value: 0
|
||||
// Required: false
|
||||
ZoneID uint64 `url:"zone_id,omitempty" json:"zone_id,omitempty"`
|
||||
|
||||
// Page number
|
||||
// Required: false
|
||||
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// ListDeletedRequest struct to get list of deleted BasicService instances
|
||||
|
||||
42
pkg/cloudapi/bservice/migrate_to_zone.go
Normal file
42
pkg/cloudapi/bservice/migrate_to_zone.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package bservice
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// MigrateToZone struct to move basic service to another zone
|
||||
type MigrateToZoneRequest struct {
|
||||
// ID of the BasicService to move
|
||||
// Required: true
|
||||
ServiceID uint64 `url:"serviceId" json:"serviceId" validate:"required"`
|
||||
|
||||
// ID of the zone to move
|
||||
// Required: true
|
||||
ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
|
||||
}
|
||||
|
||||
// MigrateToZone moves basic service instance to new zone
|
||||
func (b BService) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
|
||||
err := validators.ValidateRequest(req)
|
||||
if err != nil {
|
||||
return false, validators.ValidationErrors(validators.GetErrors(err))
|
||||
}
|
||||
|
||||
url := "/cloudapi/bservice/migrateToZone"
|
||||
|
||||
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
result, err := strconv.ParseBool(string(res))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
@@ -88,6 +88,9 @@ type RecordBasicService struct {
|
||||
|
||||
// Whether user controlled
|
||||
UserManaged bool `json:"userManaged"`
|
||||
|
||||
// Zone ID
|
||||
ZoneID uint64 `json:"zoneId"`
|
||||
}
|
||||
|
||||
// Main information about Compute
|
||||
@@ -382,6 +385,9 @@ type ItemBasicService struct {
|
||||
|
||||
// User Managed or not
|
||||
UserManaged bool `json:"userManaged"`
|
||||
|
||||
// Zone ID
|
||||
ZoneID uint64 `json:"zoneId"`
|
||||
}
|
||||
|
||||
// List of BasicServices
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// RestoreRequest struct to restore BasicService instance
|
||||
|
||||
@@ -3,7 +3,7 @@ package bservice
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/serialization"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/serialization"
|
||||
)
|
||||
|
||||
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// SnapshotCreateRequest struct to create snapshot
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// SnapshotDeleteRequest struct to delete snapshot
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// SnapshotListRequest struct to get list of existing snapshots
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// SnapshotRollbackRequest struct to rollback snapshot
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// StartRequest struct to start service
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// StopRequest struct to stop service
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package cloudapi
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/interfaces"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/interfaces"
|
||||
)
|
||||
|
||||
// Structure for creating request to CloudAPI groups
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package cloudapi
|
||||
|
||||
import (
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/pkg/cloudapi/compute"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/pkg/cloudapi/compute"
|
||||
)
|
||||
|
||||
// Accessing the Compute method group
|
||||
|
||||
42
pkg/cloudapi/compute/abort_shared_snapshot_merge.go
Normal file
42
pkg/cloudapi/compute/abort_shared_snapshot_merge.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package compute
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AbortSharedSnapshotMergeRequest struct to abort shared snapshots merge
|
||||
type AbortSharedSnapshotMergeRequest struct {
|
||||
// ID of the compute
|
||||
// Required: true
|
||||
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
|
||||
|
||||
// Label of the snapshot
|
||||
// Required: true
|
||||
Label string `url:"label" json:"label" validate:"required"`
|
||||
}
|
||||
|
||||
// AbortSharedSnapshotMerge shared snapshots merge abort
|
||||
func (c Compute) AbortSharedSnapshotMerge(ctx context.Context, req AbortSharedSnapshotMergeRequest) (bool, error) {
|
||||
err := validators.ValidateRequest(req)
|
||||
if err != nil {
|
||||
return false, validators.ValidationErrors(validators.GetErrors(err))
|
||||
}
|
||||
|
||||
url := "/cloudapi/compute/abort_shared_snapshot_merge"
|
||||
|
||||
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
result, err := strconv.ParseBool(string(res))
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityGroupCheckStartRequest struct to check all computes with current affinity label can start
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityLabelRemoveRequest struct to clear affinity label for compute
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityLabelSetRequest struct to set affinity label for compute
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityRelationsRequest struct to get dict of computes
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityRuleAddRequest struct to add affinity rule
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityRuleRemoveRequest struct to remove affinity rule
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AffinityRulesClearRequest struct to clear affinity rules
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AntiAffinityRuleAddRequest struct to add anti affinity rule
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AntiAffinityRuleRemoveRequest struct to remove anti affinity rule
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AntiAffinityRulesClearRequest struct to clear anti affinity rules
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AttachGPURequest struct to attach GPU for compute
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AttachPCIDeviceRequest struct to attach PCI device
|
||||
|
||||
@@ -5,18 +5,54 @@ import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// AuditsRequest struct to get audit records
|
||||
type AuditsRequest struct {
|
||||
// ID of the compute
|
||||
// Required: true
|
||||
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
|
||||
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
|
||||
|
||||
// Find all audits after point in time
|
||||
// Required: false
|
||||
TimestampAT uint64 `url:"timestamp_at,omitempty" json:"timestamp_at,omitempty"`
|
||||
|
||||
// Find all audits before point in time
|
||||
// Required: false
|
||||
TimestampTO uint64 `url:"timestamp_to,omitempty" json:"timestamp_to,omitempty"`
|
||||
|
||||
// Find by user
|
||||
// Required: false
|
||||
User string `url:"user,omitempty" json:"user,omitempty"`
|
||||
|
||||
// Find by api endpoints
|
||||
// Required: false
|
||||
Call string `url:"call,omitempty" json:"call,omitempty"`
|
||||
|
||||
// Sort by one of supported fields, format ±<field>
|
||||
// Required: false
|
||||
SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty"`
|
||||
|
||||
// Page number
|
||||
// Required: false
|
||||
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||
|
||||
// Page size
|
||||
// Required: false
|
||||
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
|
||||
|
||||
// Find by HTTP min status code
|
||||
// Required: false
|
||||
MinStatusCode uint64 `url:"min_status_code,omitempty" json:"min_status_code,omitempty"`
|
||||
|
||||
// Find by HTTP max status code
|
||||
// Required: false
|
||||
MaxStatusCode uint64 `url:"max_status_code,omitempty" json:"max_status_code,omitempty"`
|
||||
}
|
||||
|
||||
// Audits gets audit records for the specified compute object
|
||||
func (c Compute) Audits(ctx context.Context, req AuditsRequest) (ListAudits, error) {
|
||||
func (c Compute) Audits(ctx context.Context, req AuditsRequest) (*ListAudits, error) {
|
||||
err := validators.ValidateRequest(req)
|
||||
if err != nil {
|
||||
return nil, validators.ValidationErrors(validators.GetErrors(err))
|
||||
@@ -24,7 +60,7 @@ func (c Compute) Audits(ctx context.Context, req AuditsRequest) (ListAudits, err
|
||||
|
||||
url := "/cloudapi/compute/audits"
|
||||
|
||||
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||
res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -36,5 +72,5 @@ func (c Compute) Audits(ctx context.Context, req AuditsRequest) (ListAudits, err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return list, nil
|
||||
return &list, nil
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// BootDiskSetRequest struct to set boot disk for compute
|
||||
|
||||
@@ -4,8 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// BootOrderGetRequest struct to get boot order
|
||||
|
||||
@@ -4,8 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// BootOrderSetRequest struct to set boot order
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
|
||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
||||
)
|
||||
|
||||
// CDEjectRequest struct to eject CD image
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user