Compare commits

...

5 Commits

Author SHA1 Message Date
c06a3198f6 v1.4.5 2023-06-19 15:06:31 +03:00
c9e4ae6afe v1.4.4 2023-06-01 16:50:10 +03:00
2a1593f45f v1.5.0-beta 2023-05-18 13:55:28 +03:00
190f24dac1 v1.4.3 2023-05-18 13:37:48 +03:00
256dba5134 v1.5.0-alfa 2023-05-15 19:27:02 +03:00
22 changed files with 617 additions and 38 deletions

View File

@@ -1,6 +1,4 @@
## Version 1.4.2 ## Version 1.4.5
### Bug Fixes ### Bugfix
- Removed omitempty tag from field WithLB in cloudapi/k8s/create request
- Fixed cloudapi/cloudbroker/compute/pfwAdd publicPortEnd request field type
- Fixed typo in cloudapi/k8s/disable/enable request name

View File

@@ -118,6 +118,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
| SSOURL | string | Да | URL адрес сервиса аутентификации и авторизации | | SSOURL | string | Да | URL адрес сервиса аутентификации и авторизации |
| DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие | | DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие |
| Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 | | Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 |
| Timeout | config.Duration | Нет | Таймаут HTTP клиента, по умолчанию - без ограничений |
| SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата, по умолчанию - true | | SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата, по умолчанию - true |
| Token | string | Нет | JWT токен | | Token | string | Нет | JWT токен |
@@ -127,6 +128,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
import ( import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config" "repository.basistech.ru/BASIS/decort-golang-sdk/config"
) )
func main(){ func main(){
// Настройка конфигурации // Настройка конфигурации
cfg := config.Config{ cfg := config.Config{
@@ -136,6 +138,8 @@ func main(){
DecortURL: "https://mr4.digitalenergy.online", DecortURL: "https://mr4.digitalenergy.online",
Retries: 5, Retries: 5,
} }
cfg.SetTimeout(5 * time.Minute)
} }
``` ```
@@ -165,6 +169,7 @@ func main() {
"ssoUrl": "https://sso.digitalenergy.online", "ssoUrl": "https://sso.digitalenergy.online",
"decortUrl": "https://mr4.digitalenergy.online", "decortUrl": "https://mr4.digitalenergy.online",
"retries": 5, "retries": 5,
"timeout": "5m",
"sslSkipVerify": false "sslSkipVerify": false
} }
``` ```
@@ -177,6 +182,7 @@ appSecret: <APP_SECRET>
ssoUrl: https://sso.digitalenergy.online ssoUrl: https://sso.digitalenergy.online
decortUrl: https://mr4.digitalenergy.online decortUrl: https://mr4.digitalenergy.online
retries: 5 retries: 5
timeout: 5m
sslSkipVerify: false sslSkipVerify: false
``` ```
@@ -204,6 +210,8 @@ func main() {
Retries: 5, Retries: 5,
} }
cfg.SetTimeout(5 * time.Minute)
// Создание клиента // Создание клиента
client := decort.New(cfg) client := decort.New(cfg)
} }
@@ -648,6 +656,8 @@ func main() {
Retries: 5, Retries: 5,
} }
cfg.SetTimeout(5 * time.Minute)
// Создание клиента // Создание клиента
client := decort.New(cfg) client := decort.New(cfg)
@@ -693,6 +703,7 @@ func main() {
| Password | string | Да | пароль legacy пользователя | | Password | string | Да | пароль legacy пользователя |
| DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие | | DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие |
| Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 | | Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 |
| Timeout | config.Duration | Нет | Таймаут HTTP клиента, по умолчанию - без ограничений |
| SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата, по умолчанию - true | | SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата, по умолчанию - true |
| Token | string | Нет | JWT токен | | Token | string | Нет | JWT токен |
@@ -711,6 +722,8 @@ func main(){
DecortURL: "https://mr4.digitalenergy.online", DecortURL: "https://mr4.digitalenergy.online",
Retries: 5, Retries: 5,
} }
legacyCfg.SetTimeout(5 * time.Minute)
} }
``` ```
@@ -739,6 +752,7 @@ func main() {
"password": "<PASSWORD>", "password": "<PASSWORD>",
"decortUrl": "https://mr4.digitalenergy.online", "decortUrl": "https://mr4.digitalenergy.online",
"retries": 5, "retries": 5,
"timeout": "5m",
"sslSkipVerify": true "sslSkipVerify": true
} }
``` ```
@@ -749,6 +763,7 @@ username: <USERNAME>
password: <PASSWORD> password: <PASSWORD>
decortUrl: https://mr4.digitalenergy.online decortUrl: https://mr4.digitalenergy.online
retries: 5 retries: 5
timeout: 5m
sslSkipVerify: true sslSkipVerify: true
``` ```
### Создание legacy клиента ### Создание legacy клиента
@@ -774,6 +789,8 @@ func main() {
Retries: 5, Retries: 5,
} }
legacyCfg.SetTimeout(5 * time.Minute)
// Создание клиента // Создание клиента
legacyClient := decort.NewLegacy(cfg) legacyClient := decort.NewLegacy(cfg)
} }

View File

@@ -3,6 +3,7 @@ package config
import ( import (
"encoding/json" "encoding/json"
"os" "os"
"time"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
@@ -44,6 +45,15 @@ type Config struct {
// Skip verify, true by default // Skip verify, true by default
// Required: false // Required: false
SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"` SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"`
// HTTP client timeout, unlimited if left empty
// Required: false
Timeout Duration `json:"timeout" yaml:"timeout"`
}
// SetTimeout is used to set HTTP client timeout.
func (c *Config) SetTimeout(dur time.Duration) {
c.Timeout = Duration(dur)
} }
// ParseConfigJSON parses Config from specified JSON-formatted file. // ParseConfigJSON parses Config from specified JSON-formatted file.

View File

@@ -3,6 +3,7 @@ package config
import ( import (
"encoding/json" "encoding/json"
"os" "os"
"time"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
@@ -38,6 +39,15 @@ type LegacyConfig struct {
// Skip verify, true by default // Skip verify, true by default
// Required: false // Required: false
SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"` SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"`
// HTTP client timeout, unlimited if left empty
// Required: false
Timeout Duration `json:"timeout" yaml:"timeout"`
}
// SetTimeout is used to set HTTP client timeout.
func (c *LegacyConfig) SetTimeout(dur time.Duration) {
c.Timeout = Duration(dur)
} }
// ParseLegacyConfigJSON parses LegacyConfig from specified JSON-formatted file. // ParseLegacyConfigJSON parses LegacyConfig from specified JSON-formatted file.

50
config/timeouts.go Normal file
View File

@@ -0,0 +1,50 @@
package config
import (
"encoding/json"
"fmt"
"time"
)
// Duration is a wrapper around time.Duration (used for better user experience)
type Duration time.Duration
func (d *Duration) UnmarshalYAML(unmarshal func(interface{}) error) error {
var v interface{}
if err := unmarshal(&v); err != nil {
return err
}
switch value := v.(type) {
case string:
tmp, err := time.ParseDuration(value)
if err != nil {
return err
}
*d = Duration(tmp)
return nil
default:
return fmt.Errorf("Invalid duration %v", value)
}
}
func (d *Duration) UnmarshalJSON(b []byte) error {
var v interface{}
if err := json.Unmarshal(b, &v); err != nil {
return err
}
switch value := v.(type) {
case string:
tmp, err := time.ParseDuration(value)
if err != nil {
return err
}
*d = Duration(tmp)
return nil
default:
return fmt.Errorf("Invalid duration %v", value)
}
}
func (d *Duration) Get() time.Duration {
return time.Duration(*d)
}

View File

@@ -35,6 +35,6 @@ func NewHttpClient(cfg config.Config) *http.Client {
//TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, //TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}, },
Timeout: 5 * time.Minute, Timeout: cfg.Timeout.Get(),
} }
} }

View File

@@ -4,7 +4,6 @@ import (
"crypto/tls" "crypto/tls"
"net/http" "net/http"
"net/url" "net/url"
"time"
"repository.basistech.ru/BASIS/decort-golang-sdk/config" "repository.basistech.ru/BASIS/decort-golang-sdk/config"
) )
@@ -28,6 +27,6 @@ func NewLegacyHttpClient(cfg config.LegacyConfig) *http.Client {
decortURL: cfg.DecortURL, decortURL: cfg.DecortURL,
}, },
Timeout: 5 * time.Minute, Timeout: cfg.Timeout.Get(),
} }
} }

View File

@@ -8,28 +8,19 @@ import (
var ( var (
once sync.Once once sync.Once
instance *DecortValidator decortValidator = validator.New()
) )
type DecortValidator struct {
decortValidator *validator.Validate
}
// getDecortValidator returns singleton instance of DecortValidator. // getDecortValidator returns singleton instance of DecortValidator.
func getDecortValidator() *validator.Validate { func getDecortValidator() *validator.Validate {
if instance == nil {
once.Do(func() { once.Do(func() {
instance = new(DecortValidator) err := registerAllValidators(decortValidator)
instance.decortValidator = validator.New()
err := registerAllValidators(instance.decortValidator)
if err != nil { if err != nil {
panic(err) panic(err)
} }
}) })
}
return instance.decortValidator return decortValidator
} }
// registerAllValidators registers all custom validators in DecortValidator. // registerAllValidators registers all custom validators in DecortValidator.

View File

@@ -101,7 +101,7 @@ type CreateRequest struct {
// Create Kubernetes cluster with masters nodes behind load balancer if true. // Create Kubernetes cluster with masters nodes behind load balancer if true.
// Otherwise give all cluster nodes direct external addresses from selected ExtNet // Otherwise give all cluster nodes direct external addresses from selected ExtNet
// Required: false // Required: false
WithLB bool `url:"withLB,omitempty" json:"withLB,omitempty"` WithLB bool `url:"withLB" json:"withLB"`
// Text description of this Kubernetes cluster // Text description of this Kubernetes cluster
// Required: false // Required: false

View File

@@ -0,0 +1,8 @@
package cloudbroker
import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/backup"
// Accessing the Backup method group
func (cb *CloudBroker) Backup() *backup.Backup {
return backup.New(cb.client)
}

View File

@@ -0,0 +1,17 @@
package backup
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
)
// Structure for creating request to backup
type Backup struct {
client interfaces.Caller
}
// Builder for backup endpoints
func New(client interfaces.Caller) *Backup {
return &Backup{
client: client,
}
}

View File

@@ -0,0 +1,81 @@
package backup
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strings"
)
// Request struct for creating disk backup
type CreateDiskBackupRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Disk ID
// Required: true
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Backup path
// Required: true
BackupPath string `url:"backupPath" json:"backupPath" validate:"required"`
// Async API Call
// For async call use CreateDiskBackupAsync
// For sync call use CreateDiskBackup
// Required: true
async bool `url:"async"`
}
// CreateDiskBackup creates disk backup
func (b Backup) CreateDiskBackup(ctx context.Context, req CreateDiskBackupRequest) (ListInfoBackup, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
req.async = false
url := "/cloudbroker/backup/createDiskBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
result := make(ListInfoBackup, 0)
err = json.Unmarshal(res, &result)
if err != nil {
return nil, err
}
return result, nil
}
// CreateDiskBackupAsync creates disk backup
func (b Backup) CreateDiskBackupAsync(ctx context.Context, req CreateDiskBackupRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return "", validators.ValidationError(validationError)
}
}
req.async = true
url := "/cloudbroker/backup/createDiskBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
result := strings.ReplaceAll(string(res), "\"", "")
return result, nil
}

View File

@@ -0,0 +1,83 @@
package backup
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strings"
)
type Disk struct {
// Disk ID
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Backup path
BackupPath string `url:"backupPath" json:"backupPath" validate:"required"`
}
// Request struct for creating disks backup
type CreateDisksBackupRequest struct {
// Compute ID
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Disks
Disks []Disk `url:"disks" json:"disks" validate:"required,dive"`
// Async API Call
// For async call use CreateDisksBackupAsync
// For sync call use CreateDisksBackup
// Required: true
async bool `url:"async"`
}
// CreateDisksBackup creates disks backup
func (b Backup) CreateDisksBackup(ctx context.Context, req CreateDisksBackupRequest) (ListInfoBackup, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
req.async = false
url := "/cloudbroker/backup/createDisksBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
result := make(ListInfoBackup, 0)
err = json.Unmarshal(res, &result)
if err != nil {
return nil, err
}
return result, nil
}
// CreateDisksBackupAsync creates disks backup
func (b Backup) CreateDisksBackupAsync(ctx context.Context, req CreateDisksBackupRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return "", validators.ValidationError(validationError)
}
}
req.async = true
url := "/cloudbroker/backup/createDisksBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
result := strings.ReplaceAll(string(res), "\"", "")
return result, nil
}

View File

@@ -0,0 +1,73 @@
package backup
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
"strings"
)
// Request struct for deleting disk backup
type DeleteDiskBackupRequest struct {
// Backup path
BackupPath string `url:"backupPath" json:"backupPath" validate:"required"`
// Backup file
BackupFile string `url:"backupFile" json:"backupFile" validate:"required"`
// Async API Call
// For async call use DeleteDiskBackupAsync
// For sync call use DeleteDiskBackup
// Required: true
async bool `url:"async"`
}
// DeleteDiskBackup deletes disk backup
func (b Backup) DeleteDiskBackup(ctx context.Context, req DeleteDiskBackupRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
req.async = false
url := "/cloudbroker/backup/deleteDiskBackup"
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
}
// DeleteDiskBackupAsync deletes disk backup
func (b Backup) DeleteDiskBackupAsync(ctx context.Context, req DeleteDiskBackupRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return "", validators.ValidationError(validationError)
}
}
req.async = true
url := "/cloudbroker/backup/deleteDiskBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
result := strings.ReplaceAll(string(res), "\"", "")
return result, nil
}

View File

@@ -0,0 +1,40 @@
package backup
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for getting list of backup paths
type ListBackupPathsRequest struct {
// Grid ID
GID uint64 `url:"gridId" json:"gridId" validate:"required"`
}
// ListBackupPaths gets list of backup paths
func (b Backup) ListBackupPaths(ctx context.Context, req ListBackupPathsRequest) ([]string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/backup/listBackupPaths"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
list := make([]string, 0)
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return list, nil
}

View File

@@ -0,0 +1,31 @@
package backup
// Main info about backup
type InfoBackup struct {
// Compute ID
ComputeID uint64 `json:"computeId"`
// Disk ID
DiskID uint64 `json:"diskId"`
// Backup path
BackupPath string `json:"backupPath"`
// Possible error
Error string `json:"error"`
}
// CreateDisksBackup response
type ListInfoBackup []InfoBackup
// RestoreDiskFromFile response
type InfoRestoredDisk struct {
// Compute ID
ComputeID uint64 `json:"computeId"`
// Disk ID
DiskID uint64 `json:"diskId"`
}
// RestoreDisksFromFile response
type ListInfoRestoredDisk []InfoRestoredDisk

View File

@@ -0,0 +1,81 @@
package backup
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strings"
)
// Request struct for restoring disk from backup
type RestoreDiskFromBackupRequest struct {
// Compute ID
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Disk ID
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Backup path
BackupPath string `url:"backupPath" json:"backupPath" validate:"required"`
// Backup file
BackupFile string `url:"backupFile" json:"backupFile" validate:"required"`
// Async API Call
// For async call use RestoreDiskFromBackupAsync
// For sync call use RestoreDiskFromBackup
// Required: true
async bool `url:"async"`
}
// RestoreDiskFromBackup restores disk from backup
func (b Backup) RestoreDiskFromBackup(ctx context.Context, req RestoreDiskFromBackupRequest) (ListInfoRestoredDisk, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
req.async = false
url := "/cloudbroker/backup/restoreDiskFromBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
result := make(ListInfoRestoredDisk, 0)
err = json.Unmarshal(res, &result)
if err != nil {
return nil, err
}
return result, nil
}
// RestoreDiskFromBackupAsync restores disk from backup
func (b Backup) RestoreDiskFromBackupAsync(ctx context.Context, req RestoreDiskFromBackupRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return "", validators.ValidationError(validationError)
}
}
req.async = true
url := "/cloudbroker/backup/restoreDiskFromBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
result := strings.ReplaceAll(string(res), "\"", "")
return result, nil
}

View File

@@ -0,0 +1,86 @@
package backup
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strings"
)
type BackupFile struct {
// Disk ID
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Backup path
BackupPath string `url:"backupPath" json:"backupPath" validate:"required"`
// Backup file
BackupFile string `url:"backupFile" json:"backupFile" validate:"required"`
}
// Request struct for restoring disks from backup
type RestoreDisksFromBackupRequest struct {
// Compute ID
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
//Backup files
BackupFiles []BackupFile `url:"backupFiles" json:"backupFiles" validate:"required,dive"`
// Async API Call
// For async call use RestoreDisksFromBackupAsync
// For sync call use RestoreDisksFromBackup
// Required: true
async bool `url:"async"`
}
// RestoreDisksFromBackup restores disks from backup
func (b Backup) RestoreDisksFromBackup(ctx context.Context, req RestoreDisksFromBackupRequest) (ListInfoRestoredDisk, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
req.async = false
url := "/cloudbroker/backup/restoreDisksFromBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
result := make(ListInfoRestoredDisk, 0)
err = json.Unmarshal(res, &result)
if err != nil {
return nil, err
}
return result, nil
}
// RestoreDisksFromBackupAsync restores disks from backup
func (b Backup) RestoreDisksFromBackupAsync(ctx context.Context, req RestoreDisksFromBackupRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return "", validators.ValidationError(validationError)
}
}
req.async = true
url := "/cloudbroker/backup/restoreDisksFromBackup"
res, err := b.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
result := strings.ReplaceAll(string(res), "\"", "")
return result, nil
}

View File

@@ -4,5 +4,6 @@
"ssoUrl": "https://sso.digitalenergy.online", "ssoUrl": "https://sso.digitalenergy.online",
"decortUrl": "https://mr4.digitalenergy.online", "decortUrl": "https://mr4.digitalenergy.online",
"retries": 5, "retries": 5,
"timeout": "5m",
"sslSkipVerify": false "sslSkipVerify": false
} }

View File

@@ -3,4 +3,5 @@ appSecret: <APP_SECRET>
ssoUrl: https://sso.digitalenergy.online ssoUrl: https://sso.digitalenergy.online
decortUrl: https://mr4.digitalenergy.online decortUrl: https://mr4.digitalenergy.online
retries: 5 retries: 5
timeout: 5m
sslSkipVerify: false sslSkipVerify: false

View File

@@ -3,5 +3,6 @@
"password": "<PASSWORD>", "password": "<PASSWORD>",
"decortUrl": "https://mr4.digitalenergy.online", "decortUrl": "https://mr4.digitalenergy.online",
"retries": 5, "retries": 5,
"timeout": "5m",
"sslSkipVerify": true "sslSkipVerify": true
} }

View File

@@ -2,4 +2,5 @@ username: <USERNAME>
password: <PASSWORD> password: <PASSWORD>
decortUrl: https://mr4.digitalenergy.online decortUrl: https://mr4.digitalenergy.online
retries: 5 retries: 5
timeout: 5m
sslSkipVerify: true sslSkipVerify: true