This commit is contained in:
dayterr
2025-10-02 12:36:47 +03:00
parent 84a090f9e8
commit 095a18f27a
10 changed files with 153 additions and 38 deletions

View File

@@ -2,6 +2,7 @@ package image
import (
"context"
"encoding/json"
"net/http"
"strconv"
@@ -43,6 +44,11 @@ type CreateCDROMImageRequest struct {
PasswordDl string `url:"passwordDL,omitempty" json:"passwordDL,omitempty"`
}
type asyncWrapperCreateCDROMImageRequest struct {
CreateCDROMImageRequest
AsyncMode bool `url:"asyncMode"`
}
// CreateCDROMImage creates CD-ROM image from an ISO identified by URL
func (i Image) CreateCDROMImage(ctx context.Context, req CreateCDROMImageRequest) (uint64, error) {
err := validators.ValidateRequest(req)
@@ -52,7 +58,9 @@ func (i Image) CreateCDROMImage(ctx context.Context, req CreateCDROMImageRequest
url := "/cloudbroker/image/createCDROMImage"
res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, req)
syncReq := asyncWrapperCreateCDROMImageRequest{CreateCDROMImageRequest: req, AsyncMode: false}
res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, syncReq)
if err != nil {
return 0, err
}
@@ -64,3 +72,29 @@ func (i Image) CreateCDROMImage(ctx context.Context, req CreateCDROMImageRequest
return result, nil
}
// AsyncCreateCDROMImage creates CD-ROM image from an ISO identified by URL in async mode
func (i Image) AsyncCreateCDROMImage(ctx context.Context, req CreateCDROMImageRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/image/createCDROMImage"
asyncReq := asyncWrapperCreateCDROMImageRequest{CreateCDROMImageRequest: req, AsyncMode: true}
res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, asyncReq)
if err != nil {
return " ", err
}
var taskID string
err = json.Unmarshal(res, &taskID)
if err != nil {
return "", err
}
return taskID, nil
}