v1.6.0-zeta

This commit is contained in:
2023-09-25 19:11:33 +03:00
parent 3e55195831
commit 78a4152471
33 changed files with 1166 additions and 39 deletions

View File

@@ -2,12 +2,24 @@ package extnet
import (
"context"
"encoding/json"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type Route struct {
// Destination network
Destination string `url:"destination" json:"destination" validate:"required"`
//Destination network mask in 255.255.255.255 format
Netmask string `url:"netmask" json:"netmask" validate:"required"`
//Next hop host, IP address from ViNS ID free IP pool
Gateway string `url:"gateway" json:"gateway" validate:"required"`
}
// Request struct for create external network
type CreateRequest struct {
// External network name
@@ -70,6 +82,15 @@ type CreateRequest struct {
// OpenvSwith bridge name for ExtNet connection
// Required: false
OVSBridge string `url:"ovsBridge,omitempty" json:"ovsBridge,omitempty"`
// List of static routes, each item must have destination, netmask, and gateway fields
// Required: false
Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"`
}
type wrapperCreateRequest struct {
CreateRequest
Routes []string `url:"routes,omitempty"`
}
// Create creates new external network into platform
@@ -81,9 +102,31 @@ func (e ExtNet) Create(ctx context.Context, req CreateRequest) (uint64, error) {
}
}
var routes []string
if len(req.Routes) != 0 {
routes = make([]string, 0, len(req.Routes))
for r := range req.Routes {
b, err := json.Marshal(req.Routes[r])
if err != nil {
return 0, err
}
routes = append(routes, string(b))
}
} else {
routes = []string{}
}
reqWrapped := wrapperCreateRequest{
CreateRequest: req,
Routes: routes,
}
url := "/cloudbroker/extnet/create"
res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped)
if err != nil {
return 0, err
}

View File

@@ -151,3 +151,33 @@ type RecordExtNet struct {
// List reservations
Reservations ListReservations `json:"reservations"`
}
// List of static routes
type ListStaticRoutes struct {
// Data
Data []ItemRoutes `json:"data"`
// Entry count
EntryCount uint64 `json:"entryCount"`
}
// Detailed information about Routes
type ItemRoutes struct {
//Compute Id
ComputeIds []uint64 `json:"computeIds"`
// Destination network
Destination string `json:"destination"`
//Next hop host, IP address from ViNS ID free IP pool
Gateway string `json:"gateway"`
// GUID
GUID string `json:"guid"`
// ID
ID uint64 `json:"id"`
//Destination network mask in 255.255.255.255 format
Netmask string `json:"netmask"`
}

View File

@@ -0,0 +1,48 @@
package extnet
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for grant access to static route to Compute/ViNS
type StaticRouteAccessGrantRequest struct {
// ExtNet ID to grant access
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Route ID to grant access, can be found in staticRouteList
// Required: true
RouteId uint64 `url:"routeId" json:"routeId" validate:"required"`
// List of Compute IDs to grant access to this route
// Required: false
ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"`
}
// Grant access to static route to Compute/ViNS
func (v ExtNet) StaticRouteAccessGrant(ctx context.Context, req StaticRouteAccessGrantRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/extnet/staticRouteAccessGrant"
res, err := v.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
}

View File

@@ -0,0 +1,48 @@
package extnet
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for revoke access to static route to Compute/ViNS
type StaticRouteAccessRevokeRequest struct {
// ExtNet ID to revoke access
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Route ID to revoke access, can be found in staticRouteList
// Required: true
RouteId uint64 `url:"routeId" json:"routeId" validate:"required"`
// List of Compute IDs to revoke access to this route
// Required: false
ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"`
}
// Revoke access to static route to Compute/ViNS
func (v ExtNet) StaticRouteAccessRevoke(ctx context.Context, req StaticRouteAccessRevokeRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/extnet/staticRouteAccessRevoke"
res, err := v.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
}

View File

@@ -0,0 +1,56 @@
package extnet
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for add static route
type StaticRouteAddRequest struct {
// ExtNet ID to add static route
// Required: true
ExtNetId uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Destination network
// Required: true
Destination string `url:"destination" json:"destination" validate:"required"`
// Destination network mask in 255.255.255.255 format
// Required: true
Netmask string `url:"netmask" json:"netmask" validate:"required"`
// Next hop host, IP address from ViNS ID free IP pool
// Required: true
Gateway string `url:"gateway" json:"gateway" validate:"required"`
// List of Compute IDs which have access to this route
// Required: false
ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"`
}
// StaticRouteAdd add new static route to ViNS
func (v ExtNet) StaticRouteAdd(ctx context.Context, req StaticRouteAddRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/extnet/staticRouteAdd"
res, err := v.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
}

View File

@@ -0,0 +1,44 @@
package extnet
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for remove static route from ViNS
type StaticRouteDelRequest struct {
// ExtNet ID to remove static route from
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Route ID to remove, can be found in staticRouteList
// Required: true
RouteId uint64 `url:"routeId" json:"routeId" validate:"required"`
}
// Remove static route from ViNS
func (v ExtNet) StaticRouteDel(ctx context.Context, req StaticRouteDelRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/extnet/staticRouteDel"
res, err := v.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
}

View File

@@ -0,0 +1,42 @@
package extnet
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for static route list
type StaticRouteListRequest struct {
// ExtNet ID to show list of static routes
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
}
// Show list of static routes for ViNS
func (v ExtNet) StaticRouteList(ctx context.Context, req StaticRouteListRequest) (*ListStaticRoutes, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/extnet/staticRouteList"
res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
list := ListStaticRoutes{}
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return &list, nil
}