Site replication API (#1773)

Site replication API
tests in CI/CL environment
This commit is contained in:
Prakash Senthil Vel
2022-03-31 17:11:01 +00:00
committed by GitHub
parent fba9bd87df
commit 2eecabf5e6
35 changed files with 4037 additions and 1 deletions

View File

@@ -16,6 +16,74 @@ concurrency:
jobs: jobs:
replication:
name: Site Replication Test
needs:
- lint-job
- no-warnings-and-make-assets
- reuse-golang-dependencies
- vulnerable-dependencies-checks
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ 1.17.x ]
steps:
- name: Set up Go ${{ matrix.go-version }} on ${{ matrix.os }}
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v2
# To build minio image, we need to clone the repository first
- name: clone https://github.com/minio/minio
uses: actions/checkout@master
with:
# Repository name with owner. For example, actions/checkout
# Default: ${{ github.repository }}
repository: minio/minio
# Relative path under $GITHUB_WORKSPACE to place the repository
# To have two repositories under the same test
path: 'minio_repository'
- uses: actions/cache@v2
name: Go Mod Cache
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ github.run_id }}
- name: Build on ${{ matrix.os }}
run: |
echo "The idea is to build minio image from downloaded repository";
cd $GITHUB_WORKSPACE/minio_repository;
echo "Get git version to build MinIO Image";
VERSION=`git rev-parse HEAD`;
echo $VERSION;
echo "Create minio image";
make docker VERSION=$VERSION;
echo "Jumping back to console repository to run the integration test"
cd $GITHUB_WORKSPACE;
echo "We are going to use the built image on test-integration";
VERSION="minio/minio:$VERSION";
echo $VERSION;
make test-replication MINIO_VERSION=$VERSION;
- uses: actions/cache@v2
id: coverage-cache-replication
name: Coverage Cache Replication
with:
path: |
./replication/coverage/
key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }}
sso-integration: sso-integration:
name: SSO Integration Test name: SSO Integration Test
@@ -981,6 +1049,7 @@ jobs:
- c-operator-api-tests - c-operator-api-tests
- test-pkg-on-go - test-pkg-on-go
- sso-integration - sso-integration
- replication
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
@@ -1023,6 +1092,14 @@ jobs:
./sso-integration/coverage/ ./sso-integration/coverage/
key: ${{ runner.os }}-sso-coverage-2-${{ github.run_id }} key: ${{ runner.os }}-sso-coverage-2-${{ github.run_id }}
- uses: actions/cache@v2
id: coverage-cache-replication
name: Coverage Cache Replication
with:
path: |
./replication/coverage/
key: ${{ runner.os }}-replication-coverage-2-${{ github.run_id }}
- uses: actions/cache@v2 - uses: actions/cache@v2
id: coverage-cache-operator id: coverage-cache-operator
name: Coverage Cache Operator name: Coverage Cache Operator
@@ -1058,7 +1135,7 @@ jobs:
echo "go build gocoverage.go" echo "go build gocoverage.go"
go build gocovmerge.go go build gocovmerge.go
echo "put together the outs for final coverage resolution" echo "put together the outs for final coverage resolution"
./gocovmerge ../integration/coverage/system.out ../sso-integration/coverage/sso-system.out ../restapi/coverage/coverage.out ../pkg/coverage/coverage-pkg.out ../operator-integration/coverage/operator-api.out > all.out ./gocovmerge ../integration/coverage/system.out ../replication/coverage/replication.out ../sso-integration/coverage/sso-system.out ../restapi/coverage/coverage.out ../pkg/coverage/coverage-pkg.out ../operator-integration/coverage/operator-api.out > all.out
echo "grep to obtain the result" echo "grep to obtain the result"
go tool cover -func=all.out | grep total > tmp2 go tool cover -func=all.out | grep total > tmp2
result=`cat tmp2 | awk 'END {print $3}'` result=`cat tmp2 | awk 'END {print $3}'`

View File

@@ -80,6 +80,54 @@ test-integration:
@(docker stop minio) @(docker stop minio)
@(docker network rm mynet123) @(docker network rm mynet123)
test-replication:
@(docker stop minio || true)
@(docker stop minio1 || true)
@(docker stop minio2 || true)
@(docker network rm mynet123 || true)
@(docker network create mynet123)
@(docker run -v /data1 -v /data2 -v /data3 -v /data4 \
--net=mynet123 -d \
--name minio \
--rm \
-p 9000:9000 \
-p 6000:6000 \
-e MINIO_KMS_SECRET_KEY=my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw= \
-e MINIO_ROOT_USER="minioadmin" \
-e MINIO_ROOT_PASSWORD="minioadmin" \
$(MINIO_VERSION) server /data{1...4} \
--address :9000 \
--console-address :6000)
@(docker run -v /data1 -v /data2 -v /data3 -v /data4 \
--net=mynet123 -d \
--name minio1 \
--rm \
-p 9001:9001 \
-p 6001:6001 \
-e MINIO_KMS_SECRET_KEY=my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw= \
-e MINIO_ROOT_USER="minioadmin" \
-e MINIO_ROOT_PASSWORD="minioadmin" \
$(MINIO_VERSION) server /data{1...4} \
--address :9001 \
--console-address :6001)
@(docker run -v /data1 -v /data2 -v /data3 -v /data4 \
--net=mynet123 -d \
--name minio2 \
--rm \
-p 9002:9002 \
-p 6002:6002 \
-e MINIO_KMS_SECRET_KEY=my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw= \
-e MINIO_ROOT_USER="minioadmin" \
-e MINIO_ROOT_PASSWORD="minioadmin" \
$(MINIO_VERSION) server /data{1...4} \
--address :9002 \
--console-address :6002)
@(cd replication && go test -coverpkg=../restapi -c -tags testrunmain . && mkdir -p coverage && ./replication.test -test.v -test.run "^Test*" -test.coverprofile=coverage/replication.out)
@(docker stop minio || true)
@(docker stop minio1 || true)
@(docker stop minio2 || true)
@(docker network rm mynet123 || true)
test-sso-integration: test-sso-integration:
@echo "create the network in bridge mode to communicate all containers" @echo "create the network in bridge mode to communicate all containers"
@(docker network create my-net) @(docker network create my-net)

73
models/peer_info.go Normal file
View File

@@ -0,0 +1,73 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// PeerInfo peer info
//
// swagger:model peerInfo
type PeerInfo struct {
// deployment ID
DeploymentID string `json:"deploymentID,omitempty"`
// endpoint
Endpoint string `json:"endpoint,omitempty"`
// name
Name string `json:"name,omitempty"`
}
// Validate validates this peer info
func (m *PeerInfo) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this peer info based on context it is used
func (m *PeerInfo) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *PeerInfo) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *PeerInfo) UnmarshalBinary(b []byte) error {
var res PeerInfo
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,91 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// PeerInfoRemove peer info remove
//
// swagger:model peerInfoRemove
type PeerInfoRemove struct {
// all
All bool `json:"all,omitempty"`
// sites
// Required: true
Sites []string `json:"sites"`
}
// Validate validates this peer info remove
func (m *PeerInfoRemove) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateSites(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *PeerInfoRemove) validateSites(formats strfmt.Registry) error {
if err := validate.Required("sites", "body", m.Sites); err != nil {
return err
}
return nil
}
// ContextValidate validates this peer info remove based on context it is used
func (m *PeerInfoRemove) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *PeerInfoRemove) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *PeerInfoRemove) UnmarshalBinary(b []byte) error {
var res PeerInfoRemove
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

76
models/peer_site.go Normal file
View File

@@ -0,0 +1,76 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// PeerSite peer site
//
// swagger:model peerSite
type PeerSite struct {
// access key
AccessKey string `json:"accessKey,omitempty"`
// endpoint
Endpoint string `json:"endpoint,omitempty"`
// name
Name string `json:"name,omitempty"`
// secret key
SecretKey string `json:"secretKey,omitempty"`
}
// Validate validates this peer site
func (m *PeerSite) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this peer site based on context it is used
func (m *PeerSite) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *PeerSite) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *PeerSite) UnmarshalBinary(b []byte) error {
var res PeerSite
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,73 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// PeerSiteEditResponse peer site edit response
//
// swagger:model peerSiteEditResponse
type PeerSiteEditResponse struct {
// error detail
ErrorDetail string `json:"errorDetail,omitempty"`
// status
Status string `json:"status,omitempty"`
// success
Success bool `json:"success,omitempty"`
}
// Validate validates this peer site edit response
func (m *PeerSiteEditResponse) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this peer site edit response based on context it is used
func (m *PeerSiteEditResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *PeerSiteEditResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *PeerSiteEditResponse) UnmarshalBinary(b []byte) error {
var res PeerSiteEditResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,70 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// PeerSiteRemoveResponse peer site remove response
//
// swagger:model peerSiteRemoveResponse
type PeerSiteRemoveResponse struct {
// error detail
ErrorDetail string `json:"errorDetail,omitempty"`
// status
Status string `json:"status,omitempty"`
}
// Validate validates this peer site remove response
func (m *PeerSiteRemoveResponse) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this peer site remove response based on context it is used
func (m *PeerSiteRemoveResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *PeerSiteRemoveResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *PeerSiteRemoveResponse) UnmarshalBinary(b []byte) error {
var res PeerSiteRemoveResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,90 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// SiteReplicationAddRequest site replication add request
//
// swagger:model siteReplicationAddRequest
type SiteReplicationAddRequest []*PeerSite
// Validate validates this site replication add request
func (m SiteReplicationAddRequest) Validate(formats strfmt.Registry) error {
var res []error
for i := 0; i < len(m); i++ {
if swag.IsZero(m[i]) { // not required
continue
}
if m[i] != nil {
if err := m[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName(strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName(strconv.Itoa(i))
}
return err
}
}
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// ContextValidate validate this site replication add request based on the context it is used
func (m SiteReplicationAddRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
for i := 0; i < len(m); i++ {
if m[i] != nil {
if err := m[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName(strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName(strconv.Itoa(i))
}
return err
}
}
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@@ -0,0 +1,76 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// SiteReplicationAddResponse site replication add response
//
// swagger:model siteReplicationAddResponse
type SiteReplicationAddResponse struct {
// error detail
ErrorDetail string `json:"errorDetail,omitempty"`
// initial sync error message
InitialSyncErrorMessage string `json:"initialSyncErrorMessage,omitempty"`
// status
Status string `json:"status,omitempty"`
// success
Success bool `json:"success,omitempty"`
}
// Validate validates this site replication add response
func (m *SiteReplicationAddResponse) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this site replication add response based on context it is used
func (m *SiteReplicationAddResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *SiteReplicationAddResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *SiteReplicationAddResponse) UnmarshalBinary(b []byte) error {
var res SiteReplicationAddResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,142 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"strconv"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// SiteReplicationInfoResponse site replication info response
//
// swagger:model siteReplicationInfoResponse
type SiteReplicationInfoResponse struct {
// enabled
Enabled bool `json:"enabled,omitempty"`
// name
Name string `json:"name,omitempty"`
// service account access key
ServiceAccountAccessKey string `json:"serviceAccountAccessKey,omitempty"`
// sites
Sites []*PeerInfo `json:"sites"`
}
// Validate validates this site replication info response
func (m *SiteReplicationInfoResponse) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateSites(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *SiteReplicationInfoResponse) validateSites(formats strfmt.Registry) error {
if swag.IsZero(m.Sites) { // not required
return nil
}
for i := 0; i < len(m.Sites); i++ {
if swag.IsZero(m.Sites[i]) { // not required
continue
}
if m.Sites[i] != nil {
if err := m.Sites[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("sites" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("sites" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
// ContextValidate validate this site replication info response based on the context it is used
func (m *SiteReplicationInfoResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
var res []error
if err := m.contextValidateSites(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
func (m *SiteReplicationInfoResponse) contextValidateSites(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.Sites); i++ {
if m.Sites[i] != nil {
if err := m.Sites[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("sites" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("sites" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
// MarshalBinary interface implementation
func (m *SiteReplicationInfoResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *SiteReplicationInfoResponse) UnmarshalBinary(b []byte) error {
var res SiteReplicationInfoResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,205 @@
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// These tests are for AdminAPI Tag based on swagger-console.yml
package replication
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"testing"
"time"
"github.com/minio/console/models"
"github.com/stretchr/testify/assert"
)
const apiURL = "http://localhost:9090/api/v1/admin/site-replication"
func makeExecuteReq(method string, body io.Reader) (*http.Response, error) {
client := &http.Client{
Timeout: 10 * time.Second,
}
request, err := http.NewRequest(
method,
apiURL,
body,
)
if err != nil {
return nil, err
}
request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
request.Header.Add("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil {
return nil, err
}
return response, nil
}
func AddSiteReplicationInfo() (*http.Response, error) {
sites := make([]map[string]interface{}, 2)
sites[0] = map[string]interface{}{
"accessKey": "minioadmin",
"endpoint": "http://localhost:9000",
"secretKey": "minioadmin",
"name": "sitellhost9000",
}
sites[1] = map[string]interface{}{
"accessKey": "minioadmin",
"endpoint": "http://minio1:9001",
"secretKey": "minioadmin",
"name": "sitellhost9001",
}
requestDataJSON, _ := json.Marshal(sites)
requestDataBody := bytes.NewReader(requestDataJSON)
return makeExecuteReq("POST", requestDataBody)
}
func EditSiteReplicationInfo() (*http.Response, error) {
getResponse, err := makeExecuteReq("GET", nil)
//defer response.Body.Close()
if err != nil {
return nil, err
}
getResObj := &models.SiteReplicationInfoResponse{}
json.NewDecoder(getResponse.Body).Decode(getResObj)
//fmt.Println("Edit Got::", getResObj, getResObj.Sites[0], getResObj.Sites[1])
var secondDeploymentID string
if getResObj != nil {
if len(getResObj.Sites) > 0 {
secondDeploymentID = getResObj.Sites[1].DeploymentID
}
} else {
return nil, nil
}
fmt.Println("Editing::", getResObj.Sites[1])
fmt.Println("Editing::", secondDeploymentID)
pSiteInfo := map[string]interface{}{
"deploymentID": secondDeploymentID,
"endpoint": "http://minio2:9002",
"name": "sitellhost9002",
}
requestDataJSON, _ := json.Marshal(pSiteInfo)
requestDataBody := bytes.NewReader(requestDataJSON)
return makeExecuteReq("PUT", requestDataBody)
}
func DeleteSiteReplicationInfo() (*http.Response, error) {
delReq := map[string]interface{}{
"all": true,
"sites": []string{
"sitellhost9000",
"sitellhost9001",
"sitellhost9002",
},
}
requestDataJSON, _ := json.Marshal(delReq)
requestDataBody := bytes.NewReader(requestDataJSON)
return makeExecuteReq("DELETE", requestDataBody)
}
func TestGetSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
response, err := makeExecuteReq("GET", nil)
//defer response.Body.Close()
tgt := &models.SiteReplicationInfoResponse{}
json.NewDecoder(response.Body).Decode(tgt)
if err != nil {
log.Println(err)
return
}
if response != nil {
assert.Equal(200, response.StatusCode, "Status Code is incorrect")
}
}
func TestAddSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
fmt.Println("Add Site Replication")
response, err := AddSiteReplicationInfo()
if err != nil {
log.Println(err)
return
}
if response != nil {
assert.Equal(200, response.StatusCode, "Status Code is incorrect")
}
fmt.Println("TestAddSiteReplicationInfo: ", response.StatusCode)
}
func TestEditSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
response, err := EditSiteReplicationInfo()
if err != nil {
log.Println(err)
return
}
if response != nil {
assert.NotEmpty(response)
assert.Equal(200, response.StatusCode, "Status Code is incorrect")
}
}
func TestDeleteSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
fmt.Println("Delete Site Replication")
response, err := DeleteSiteReplicationInfo()
if err != nil {
log.Println(err)
return
}
if response != nil {
assert.Equal(204, response.StatusCode, "Status Code is incorrect")
}
fmt.Println("TestDeleteReplicationInfo: ", response.StatusCode)
}

View File

@@ -0,0 +1,136 @@
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package replication
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strconv"
"testing"
"time"
"github.com/go-openapi/loads"
"github.com/minio/console/restapi"
"github.com/minio/console/restapi/operations"
)
var token string
func initConsoleServer() (*restapi.Server, error) {
//os.Setenv("CONSOLE_MINIO_SERVER", "localhost:9000")
swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
if err != nil {
return nil, err
}
noLog := func(string, ...interface{}) {
// nothing to log
}
// Initialize MinIO loggers
restapi.LogInfo = noLog
restapi.LogError = noLog
api := operations.NewConsoleAPI(swaggerSpec)
api.Logger = noLog
server := restapi.NewServer(api)
// register all APIs
server.ConfigureAPI()
//restapi.GlobalRootCAs, restapi.GlobalPublicCerts, restapi.GlobalTLSCertsManager = globalRootCAs, globalPublicCerts, globalTLSCerts
consolePort, _ := strconv.Atoi("9090")
server.Host = "0.0.0.0"
server.Port = consolePort
restapi.Port = "9090"
restapi.Hostname = "0.0.0.0"
return server, nil
}
func TestMain(m *testing.M) {
// start console server
go func() {
fmt.Println("start server")
srv, err := initConsoleServer()
if err != nil {
log.Println(err)
log.Println("init fail")
return
}
srv.Serve()
}()
fmt.Println("sleeping")
time.Sleep(2 * time.Second)
client := &http.Client{
Timeout: 2 * time.Second,
}
// get login credentials
requestData := map[string]string{
"accessKey": "minioadmin",
"secretKey": "minioadmin",
}
requestDataJSON, _ := json.Marshal(requestData)
requestDataBody := bytes.NewReader(requestDataJSON)
request, err := http.NewRequest("POST", "http://localhost:9090/api/v1/login", requestDataBody)
if err != nil {
log.Println(err)
return
}
request.Header.Add("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil {
log.Println(err)
return
}
if response != nil {
for _, cookie := range response.Cookies() {
if cookie.Name == "token" {
token = cookie.Value
break
}
}
}
if token == "" {
log.Println("authentication token not found in cookies response")
return
}
code := m.Run()
os.Exit(code)
}

View File

@@ -0,0 +1,232 @@
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package restapi
import (
"context"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
"github.com/minio/console/restapi/operations"
"github.com/minio/console/restapi/operations/admin_api"
"github.com/minio/madmin-go"
)
func registerSiteReplicationHandler(api *operations.ConsoleAPI) {
api.AdminAPIGetSiteReplicationInfoHandler = admin_api.GetSiteReplicationInfoHandlerFunc(func(params admin_api.GetSiteReplicationInfoParams, session *models.Principal) middleware.Responder {
rInfo, err := getSRInfoResponse(session)
if err != nil {
return admin_api.NewGetSiteReplicationInfoDefault(500).WithPayload(prepareError(err))
}
return admin_api.NewGetSiteReplicationInfoOK().WithPayload(rInfo)
})
api.AdminAPISiteReplicationInfoAddHandler = admin_api.SiteReplicationInfoAddHandlerFunc(func(params admin_api.SiteReplicationInfoAddParams, session *models.Principal) middleware.Responder {
eInfo, err := getSRAddResponse(session, &params)
if err != nil {
return admin_api.NewSiteReplicationInfoAddDefault(500).WithPayload(err)
}
return admin_api.NewSiteReplicationInfoAddOK().WithPayload(eInfo)
})
api.AdminAPISiteReplicationRemoveHandler = admin_api.SiteReplicationRemoveHandlerFunc(func(params admin_api.SiteReplicationRemoveParams, session *models.Principal) middleware.Responder {
remRes, err := getSRRemoveResponse(session, &params)
if err != nil {
return admin_api.NewSiteReplicationRemoveDefault(500).WithPayload(err)
}
return admin_api.NewSiteReplicationRemoveNoContent().WithPayload(remRes)
})
api.AdminAPISiteReplicationEditHandler = admin_api.SiteReplicationEditHandlerFunc(func(params admin_api.SiteReplicationEditParams, session *models.Principal) middleware.Responder {
eInfo, err := getSREditResponse(session, &params)
if err != nil {
return admin_api.NewSiteReplicationRemoveDefault(500).WithPayload(err)
}
return admin_api.NewSiteReplicationEditOK().WithPayload(eInfo)
})
}
func getSRInfoResponse(session *models.Principal) (info *models.SiteReplicationInfoResponse, err error) {
mAdmin, err := NewMinioAdminClient(session)
if err != nil {
return nil, err
}
adminClient := AdminClient{Client: mAdmin}
ctx := context.Background()
res, err := getSRConfig(ctx, adminClient)
if err != nil {
return nil, err
}
return res, nil
}
func getSRAddResponse(session *models.Principal, params *admin_api.SiteReplicationInfoAddParams) (*models.SiteReplicationAddResponse, *models.Error) {
mAdmin, err := NewMinioAdminClient(session)
if err != nil {
return nil, prepareError(err)
}
adminClient := AdminClient{Client: mAdmin}
ctx := context.Background()
res, err := addSiteReplication(ctx, adminClient, params)
if err != nil {
return nil, prepareError(err)
}
return res, nil
}
func getSREditResponse(session *models.Principal, params *admin_api.SiteReplicationEditParams) (*models.PeerSiteEditResponse, *models.Error) {
mAdmin, err := NewMinioAdminClient(session)
if err != nil {
return nil, prepareError(err)
}
adminClient := AdminClient{Client: mAdmin}
ctx := context.Background()
eRes, err := editSiteReplication(ctx, adminClient, params)
if err != nil {
return nil, prepareError(err)
}
return eRes, nil
}
func getSRRemoveResponse(session *models.Principal, params *admin_api.SiteReplicationRemoveParams) (*models.PeerSiteRemoveResponse, *models.Error) {
mAdmin, err := NewMinioAdminClient(session)
if err != nil {
return nil, prepareError(err)
}
adminClient := AdminClient{Client: mAdmin}
ctx := context.Background()
rRes, err := removeSiteReplication(ctx, adminClient, params)
if err != nil {
return nil, prepareError(err)
}
return rRes, nil
}
func getSRConfig(ctx context.Context, client MinioAdmin) (info *models.SiteReplicationInfoResponse, err error) {
srInfo, err := client.getSiteReplicationInfo(ctx)
if err != nil {
return nil, err
}
var sites []*models.PeerInfo
if len(srInfo.Sites) > 0 {
for _, s := range srInfo.Sites {
var pInfo = &models.PeerInfo{
DeploymentID: s.DeploymentID,
Endpoint: s.Endpoint,
Name: s.Name,
}
sites = append(sites, pInfo)
}
}
res := &models.SiteReplicationInfoResponse{
Enabled: srInfo.Enabled,
Name: srInfo.Name,
ServiceAccountAccessKey: srInfo.ServiceAccountAccessKey,
Sites: sites,
}
return res, nil
}
func addSiteReplication(ctx context.Context, client MinioAdmin, params *admin_api.SiteReplicationInfoAddParams) (info *models.SiteReplicationAddResponse, err error) {
var rSites []madmin.PeerSite
if len(params.Body) > 0 {
for _, aSite := range params.Body {
var pInfo = &madmin.PeerSite{
AccessKey: aSite.AccessKey,
Name: aSite.Name,
SecretKey: aSite.SecretKey,
Endpoint: aSite.Endpoint,
}
rSites = append(rSites, *pInfo)
}
}
cc, err := client.addSiteReplicationInfo(ctx, rSites)
if err != nil {
return nil, err
}
res := &models.SiteReplicationAddResponse{
ErrorDetail: cc.ErrDetail,
InitialSyncErrorMessage: cc.InitialSyncErrorMessage,
Status: cc.Status,
Success: cc.Success,
}
return res, nil
}
func editSiteReplication(ctx context.Context, client MinioAdmin, params *admin_api.SiteReplicationEditParams) (info *models.PeerSiteEditResponse, err error) {
peerSiteInfo := &madmin.PeerInfo{
Endpoint: params.Body.Endpoint, //only endpoint can be edited.
Name: params.Body.Name, //does not get updated.
DeploymentID: params.Body.DeploymentID, //readonly
}
eRes, err := client.editSiteReplicationInfo(ctx, *peerSiteInfo)
if err != nil {
return nil, err
}
editRes := &models.PeerSiteEditResponse{
ErrorDetail: eRes.ErrDetail,
Status: eRes.Status,
Success: eRes.Success,
}
return editRes, nil
}
func removeSiteReplication(ctx context.Context, client MinioAdmin, params *admin_api.SiteReplicationRemoveParams) (info *models.PeerSiteRemoveResponse, err error) {
delAll := params.Body.All
siteNames := params.Body.Sites
var req *madmin.SRRemoveReq
if delAll {
req = &madmin.SRRemoveReq{
RemoveAll: delAll,
}
} else {
req = &madmin.SRRemoveReq{
SiteNames: siteNames,
RemoveAll: delAll,
}
}
rRes, err := client.deleteSiteReplicationInfo(ctx, *req)
if err != nil {
return nil, err
}
removeRes := &models.PeerSiteRemoveResponse{
ErrorDetail: rRes.ErrDetail,
Status: rRes.Status,
}
return removeRes, nil
}

View File

@@ -0,0 +1,241 @@
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// These tests are for AdminAPI Tag based on swagger-console.yml
package restapi
import (
"context"
"fmt"
"testing"
"github.com/minio/madmin-go"
"github.com/stretchr/testify/assert"
)
// assigning mock at runtime instead of compile time
var getSiteReplicationInfo func(ctx context.Context) (*madmin.SiteReplicationInfo, error)
func (ac adminClientMock) getSiteReplicationInfo(ctx context.Context) (*madmin.SiteReplicationInfo, error) {
return getSiteReplicationInfo(ctx)
}
var addSiteReplicationInfo func(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error)
func (ac adminClientMock) addSiteReplicationInfo(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error) {
return addSiteReplicationInfo(ctx, sites)
}
var editSiteReplicationInfo func(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error)
func (ac adminClientMock) editSiteReplicationInfo(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error) {
return editSiteReplicationInfo(ctx, site)
}
var deleteSiteReplicationInfoMock func(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error)
func (ac adminClientMock) deleteSiteReplicationInfo(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error) {
return deleteSiteReplicationInfoMock(ctx, removeReq)
}
func TestGetSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
// mock minIO client
adminClient := adminClientMock{}
function := "getSiteReplicationInfo()"
ctx := context.Background()
retValueMock := madmin.SiteReplicationInfo{
Enabled: true,
Name: "site1",
Sites: []madmin.PeerInfo{
madmin.PeerInfo{
Endpoint: "http://localhost:9000",
Name: "site1",
DeploymentID: "12345",
},
madmin.PeerInfo{
Endpoint: "http://localhost:9001",
Name: "site2",
DeploymentID: "123456",
},
},
ServiceAccountAccessKey: "test-key",
}
expValueMock := &madmin.SiteReplicationInfo{
Enabled: true,
Name: "site1",
Sites: []madmin.PeerInfo{
madmin.PeerInfo{
Endpoint: "http://localhost:9000",
Name: "site1",
DeploymentID: "12345",
},
madmin.PeerInfo{
Endpoint: "http://localhost:9001",
Name: "site2",
DeploymentID: "123456",
},
},
ServiceAccountAccessKey: "test-key",
}
getSiteReplicationInfo = func(ctx context.Context) (info *madmin.SiteReplicationInfo, err error) {
return &retValueMock, nil
}
srInfo, err := adminClient.getSiteReplicationInfo(ctx)
if err != nil {
}
assert.Equal(expValueMock, srInfo, fmt.Sprintf("Failed on %s: length of lists is not the same", function))
}
func TestAddSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
// mock minIO client
adminClient := adminClientMock{}
function := "addSiteReplicationInfo()"
ctx := context.Background()
retValueMock := &madmin.ReplicateAddStatus{
Success: true,
Status: "success",
ErrDetail: "",
InitialSyncErrorMessage: "",
}
expValueMock := &madmin.ReplicateAddStatus{
Success: true,
Status: "success",
ErrDetail: "",
InitialSyncErrorMessage: "",
}
addSiteReplicationInfo = func(ctx context.Context, sites []madmin.PeerSite) (res *madmin.ReplicateAddStatus, err error) {
return retValueMock, nil
}
sites := []madmin.PeerSite{
madmin.PeerSite{
Name: "site1",
Endpoint: "http://localhost:9000",
AccessKey: "test",
SecretKey: "test",
},
madmin.PeerSite{
Name: "site2",
Endpoint: "http://localhost:9001",
AccessKey: "test",
SecretKey: "test",
},
}
srInfo, err := adminClient.addSiteReplicationInfo(ctx, sites)
if err != nil {
}
assert.Equal(expValueMock, srInfo, fmt.Sprintf("Failed on %s: length of lists is not the same", function))
}
func TestEditSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
// mock minIO client
adminClient := adminClientMock{}
function := "editSiteReplicationInfo()"
ctx := context.Background()
retValueMock := &madmin.ReplicateEditStatus{
Success: true,
Status: "success",
ErrDetail: "",
}
expValueMock := &madmin.ReplicateEditStatus{
Success: true,
Status: "success",
ErrDetail: "",
}
editSiteReplicationInfo = func(ctx context.Context, site madmin.PeerInfo) (res *madmin.ReplicateEditStatus, err error) {
return retValueMock, nil
}
site := madmin.PeerInfo{
Name: "",
Endpoint: "",
DeploymentID: "12345",
}
srInfo, err := adminClient.editSiteReplicationInfo(ctx, site)
if err != nil {
}
assert.Equal(expValueMock, srInfo, fmt.Sprintf("Failed on %s: length of lists is not the same", function))
}
func TestDeleteSiteReplicationInfo(t *testing.T) {
assert := assert.New(t)
// mock minIO client
adminClient := adminClientMock{}
function := "deleteSiteReplicationInfo()"
ctx := context.Background()
retValueMock := &madmin.ReplicateRemoveStatus{
Status: "success",
ErrDetail: "",
}
expValueMock := &madmin.ReplicateRemoveStatus{
Status: "success",
ErrDetail: "",
}
deleteSiteReplicationInfoMock = func(ctx context.Context, removeReq madmin.SRRemoveReq) (res *madmin.ReplicateRemoveStatus, err error) {
return retValueMock, nil
}
remReq := madmin.SRRemoveReq{
SiteNames: []string{
"test1",
},
RemoveAll: false,
}
srInfo, err := adminClient.deleteSiteReplicationInfo(ctx, remReq)
if err != nil {
}
assert.Equal(expValueMock, srInfo, fmt.Sprintf("Failed on %s: length of lists is not the same", function))
}

View File

@@ -112,6 +112,11 @@ type MinioAdmin interface {
editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error
// Speedtest // Speedtest
speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error)
// Site Relication
getSiteReplicationInfo(ctx context.Context) (*madmin.SiteReplicationInfo, error)
addSiteReplicationInfo(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error)
editSiteReplicationInfo(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error)
deleteSiteReplicationInfo(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error)
} }
// Interface implementation // Interface implementation
@@ -477,3 +482,60 @@ func GetConsoleHTTPClient() *http.Client {
func (ac AdminClient) speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) { func (ac AdminClient) speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error) {
return ac.Client.Speedtest(ctx, opts) return ac.Client.Speedtest(ctx, opts)
} }
//Site Replication
func (ac AdminClient) getSiteReplicationInfo(ctx context.Context) (*madmin.SiteReplicationInfo, error) {
res, err := ac.Client.SiteReplicationInfo(ctx)
if err != nil {
return nil, err
}
return &madmin.SiteReplicationInfo{
Enabled: res.Enabled,
Name: res.Name,
Sites: res.Sites,
ServiceAccountAccessKey: res.ServiceAccountAccessKey,
}, nil
}
func (ac AdminClient) addSiteReplicationInfo(ctx context.Context, sites []madmin.PeerSite) (*madmin.ReplicateAddStatus, error) {
res, err := ac.Client.SiteReplicationAdd(ctx, sites)
if err != nil {
return nil, err
}
return &madmin.ReplicateAddStatus{
Success: res.Success,
Status: res.Status,
ErrDetail: res.ErrDetail,
InitialSyncErrorMessage: res.InitialSyncErrorMessage,
}, nil
}
func (ac AdminClient) editSiteReplicationInfo(ctx context.Context, site madmin.PeerInfo) (*madmin.ReplicateEditStatus, error) {
res, err := ac.Client.SiteReplicationEdit(ctx, site)
if err != nil {
return nil, err
}
return &madmin.ReplicateEditStatus{
Success: res.Success,
Status: res.Status,
ErrDetail: res.ErrDetail,
}, nil
}
func (ac AdminClient) deleteSiteReplicationInfo(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error) {
res, err := ac.Client.SiteReplicationRemove(ctx, removeReq)
if err != nil {
return nil, err
}
return &madmin.ReplicateRemoveStatus{
Status: res.Status,
ErrDetail: res.ErrDetail,
}, nil
}

View File

@@ -129,6 +129,8 @@ func configureAPI(api *operations.ConsoleAPI) http.Handler {
//Register Inspect Handler //Register Inspect Handler
registerInspectHandler(api) registerInspectHandler(api)
registerSiteReplicationHandler(api)
// Operator Console // Operator Console
// Register Object's Handlers // Register Object's Handlers

View File

@@ -313,6 +313,122 @@ func init() {
} }
} }
}, },
"/admin/site-replication": {
"get": {
"tags": [
"AdminAPI"
],
"summary": "Get list of Replication Sites",
"operationId": "GetSiteReplicationInfo",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/siteReplicationInfoResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"put": {
"tags": [
"AdminAPI"
],
"summary": "Edit a Replication Site",
"operationId": "SiteReplicationEdit",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/peerInfo"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/peerSiteEditResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"post": {
"tags": [
"AdminAPI"
],
"summary": "Add a Replication Site",
"operationId": "SiteReplicationInfoAdd",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/siteReplicationAddRequest"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/siteReplicationAddResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"delete": {
"tags": [
"AdminAPI"
],
"summary": "Remove a Replication Site",
"operationId": "SiteReplicationRemove",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/peerInfoRemove"
}
}
],
"responses": {
"204": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/peerSiteRemoveResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
},
"/admin/tiers": { "/admin/tiers": {
"get": { "get": {
"tags": [ "tags": [
@@ -5499,6 +5615,79 @@ func init() {
"years" "years"
] ]
}, },
"peerInfo": {
"type": "object",
"properties": {
"deploymentID": {
"type": "string"
},
"endpoint": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"peerInfoRemove": {
"type": "object",
"required": [
"sites"
],
"properties": {
"all": {
"type": "boolean"
},
"sites": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"peerSite": {
"type": "object",
"properties": {
"accessKey": {
"type": "string"
},
"endpoint": {
"type": "string"
},
"name": {
"type": "string"
},
"secretKey": {
"type": "string"
}
}
},
"peerSiteEditResponse": {
"type": "object",
"properties": {
"errorDetail": {
"type": "string"
},
"status": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
},
"peerSiteRemoveResponse": {
"type": "object",
"properties": {
"errorDetail": {
"type": "string"
},
"status": {
"type": "string"
}
}
},
"policy": { "policy": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -6053,6 +6242,49 @@ func init() {
} }
} }
}, },
"siteReplicationAddRequest": {
"type": "array",
"items": {
"$ref": "#/definitions/peerSite"
}
},
"siteReplicationAddResponse": {
"type": "object",
"properties": {
"errorDetail": {
"type": "string"
},
"initialSyncErrorMessage": {
"type": "string"
},
"status": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
},
"siteReplicationInfoResponse": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"name": {
"type": "string"
},
"serviceAccountAccessKey": {
"type": "string"
},
"sites": {
"type": "array",
"items": {
"$ref": "#/definitions/peerInfo"
}
}
}
},
"startProfilingItem": { "startProfilingItem": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -6849,6 +7081,122 @@ func init() {
} }
} }
}, },
"/admin/site-replication": {
"get": {
"tags": [
"AdminAPI"
],
"summary": "Get list of Replication Sites",
"operationId": "GetSiteReplicationInfo",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/siteReplicationInfoResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"put": {
"tags": [
"AdminAPI"
],
"summary": "Edit a Replication Site",
"operationId": "SiteReplicationEdit",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/peerInfo"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/peerSiteEditResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"post": {
"tags": [
"AdminAPI"
],
"summary": "Add a Replication Site",
"operationId": "SiteReplicationInfoAdd",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/siteReplicationAddRequest"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/siteReplicationAddResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"delete": {
"tags": [
"AdminAPI"
],
"summary": "Remove a Replication Site",
"operationId": "SiteReplicationRemove",
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/peerInfoRemove"
}
}
],
"responses": {
"204": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/peerSiteRemoveResponse"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
},
"/admin/tiers": { "/admin/tiers": {
"get": { "get": {
"tags": [ "tags": [
@@ -12161,6 +12509,79 @@ func init() {
"years" "years"
] ]
}, },
"peerInfo": {
"type": "object",
"properties": {
"deploymentID": {
"type": "string"
},
"endpoint": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"peerInfoRemove": {
"type": "object",
"required": [
"sites"
],
"properties": {
"all": {
"type": "boolean"
},
"sites": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"peerSite": {
"type": "object",
"properties": {
"accessKey": {
"type": "string"
},
"endpoint": {
"type": "string"
},
"name": {
"type": "string"
},
"secretKey": {
"type": "string"
}
}
},
"peerSiteEditResponse": {
"type": "object",
"properties": {
"errorDetail": {
"type": "string"
},
"status": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
},
"peerSiteRemoveResponse": {
"type": "object",
"properties": {
"errorDetail": {
"type": "string"
},
"status": {
"type": "string"
}
}
},
"policy": { "policy": {
"type": "object", "type": "object",
"properties": { "properties": {
@@ -12715,6 +13136,49 @@ func init() {
} }
} }
}, },
"siteReplicationAddRequest": {
"type": "array",
"items": {
"$ref": "#/definitions/peerSite"
}
},
"siteReplicationAddResponse": {
"type": "object",
"properties": {
"errorDetail": {
"type": "string"
},
"initialSyncErrorMessage": {
"type": "string"
},
"status": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
},
"siteReplicationInfoResponse": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"name": {
"type": "string"
},
"serviceAccountAccessKey": {
"type": "string"
},
"sites": {
"type": "array",
"items": {
"$ref": "#/definitions/peerInfo"
}
}
}
},
"startProfilingItem": { "startProfilingItem": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// GetSiteReplicationInfoHandlerFunc turns a function with the right signature into a get site replication info handler
type GetSiteReplicationInfoHandlerFunc func(GetSiteReplicationInfoParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn GetSiteReplicationInfoHandlerFunc) Handle(params GetSiteReplicationInfoParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// GetSiteReplicationInfoHandler interface for that can handle valid get site replication info params
type GetSiteReplicationInfoHandler interface {
Handle(GetSiteReplicationInfoParams, *models.Principal) middleware.Responder
}
// NewGetSiteReplicationInfo creates a new http.Handler for the get site replication info operation
func NewGetSiteReplicationInfo(ctx *middleware.Context, handler GetSiteReplicationInfoHandler) *GetSiteReplicationInfo {
return &GetSiteReplicationInfo{Context: ctx, Handler: handler}
}
/* GetSiteReplicationInfo swagger:route GET /admin/site-replication AdminAPI getSiteReplicationInfo
Get list of Replication Sites
*/
type GetSiteReplicationInfo struct {
Context *middleware.Context
Handler GetSiteReplicationInfoHandler
}
func (o *GetSiteReplicationInfo) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewGetSiteReplicationInfoParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,63 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime/middleware"
)
// NewGetSiteReplicationInfoParams creates a new GetSiteReplicationInfoParams object
//
// There are no default values defined in the spec.
func NewGetSiteReplicationInfoParams() GetSiteReplicationInfoParams {
return GetSiteReplicationInfoParams{}
}
// GetSiteReplicationInfoParams contains all the bound params for the get site replication info operation
// typically these are obtained from a http.Request
//
// swagger:parameters GetSiteReplicationInfo
type GetSiteReplicationInfoParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewGetSiteReplicationInfoParams() beforehand.
func (o *GetSiteReplicationInfoParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@@ -0,0 +1,133 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// GetSiteReplicationInfoOKCode is the HTTP code returned for type GetSiteReplicationInfoOK
const GetSiteReplicationInfoOKCode int = 200
/*GetSiteReplicationInfoOK A successful response.
swagger:response getSiteReplicationInfoOK
*/
type GetSiteReplicationInfoOK struct {
/*
In: Body
*/
Payload *models.SiteReplicationInfoResponse `json:"body,omitempty"`
}
// NewGetSiteReplicationInfoOK creates GetSiteReplicationInfoOK with default headers values
func NewGetSiteReplicationInfoOK() *GetSiteReplicationInfoOK {
return &GetSiteReplicationInfoOK{}
}
// WithPayload adds the payload to the get site replication info o k response
func (o *GetSiteReplicationInfoOK) WithPayload(payload *models.SiteReplicationInfoResponse) *GetSiteReplicationInfoOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the get site replication info o k response
func (o *GetSiteReplicationInfoOK) SetPayload(payload *models.SiteReplicationInfoResponse) {
o.Payload = payload
}
// WriteResponse to the client
func (o *GetSiteReplicationInfoOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(200)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
/*GetSiteReplicationInfoDefault Generic error response.
swagger:response getSiteReplicationInfoDefault
*/
type GetSiteReplicationInfoDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewGetSiteReplicationInfoDefault creates GetSiteReplicationInfoDefault with default headers values
func NewGetSiteReplicationInfoDefault(code int) *GetSiteReplicationInfoDefault {
if code <= 0 {
code = 500
}
return &GetSiteReplicationInfoDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the get site replication info default response
func (o *GetSiteReplicationInfoDefault) WithStatusCode(code int) *GetSiteReplicationInfoDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the get site replication info default response
func (o *GetSiteReplicationInfoDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the get site replication info default response
func (o *GetSiteReplicationInfoDefault) WithPayload(payload *models.Error) *GetSiteReplicationInfoDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the get site replication info default response
func (o *GetSiteReplicationInfoDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *GetSiteReplicationInfoDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,104 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
)
// GetSiteReplicationInfoURL generates an URL for the get site replication info operation
type GetSiteReplicationInfoURL struct {
_basePath string
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *GetSiteReplicationInfoURL) WithBasePath(bp string) *GetSiteReplicationInfoURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *GetSiteReplicationInfoURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *GetSiteReplicationInfoURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/admin/site-replication"
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *GetSiteReplicationInfoURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *GetSiteReplicationInfoURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *GetSiteReplicationInfoURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on GetSiteReplicationInfoURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on GetSiteReplicationInfoURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *GetSiteReplicationInfoURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// SiteReplicationEditHandlerFunc turns a function with the right signature into a site replication edit handler
type SiteReplicationEditHandlerFunc func(SiteReplicationEditParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn SiteReplicationEditHandlerFunc) Handle(params SiteReplicationEditParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// SiteReplicationEditHandler interface for that can handle valid site replication edit params
type SiteReplicationEditHandler interface {
Handle(SiteReplicationEditParams, *models.Principal) middleware.Responder
}
// NewSiteReplicationEdit creates a new http.Handler for the site replication edit operation
func NewSiteReplicationEdit(ctx *middleware.Context, handler SiteReplicationEditHandler) *SiteReplicationEdit {
return &SiteReplicationEdit{Context: ctx, Handler: handler}
}
/* SiteReplicationEdit swagger:route PUT /admin/site-replication AdminAPI siteReplicationEdit
Edit a Replication Site
*/
type SiteReplicationEdit struct {
Context *middleware.Context
Handler SiteReplicationEditHandler
}
func (o *SiteReplicationEdit) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewSiteReplicationEditParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,102 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"io"
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/validate"
"github.com/minio/console/models"
)
// NewSiteReplicationEditParams creates a new SiteReplicationEditParams object
//
// There are no default values defined in the spec.
func NewSiteReplicationEditParams() SiteReplicationEditParams {
return SiteReplicationEditParams{}
}
// SiteReplicationEditParams contains all the bound params for the site replication edit operation
// typically these are obtained from a http.Request
//
// swagger:parameters SiteReplicationEdit
type SiteReplicationEditParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*
Required: true
In: body
*/
Body *models.PeerInfo
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewSiteReplicationEditParams() beforehand.
func (o *SiteReplicationEditParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
if runtime.HasBody(r) {
defer r.Body.Close()
var body models.PeerInfo
if err := route.Consumer.Consume(r.Body, &body); err != nil {
if err == io.EOF {
res = append(res, errors.Required("body", "body", ""))
} else {
res = append(res, errors.NewParseError("body", "body", "", err))
}
} else {
// validate body object
if err := body.Validate(route.Formats); err != nil {
res = append(res, err)
}
ctx := validate.WithOperationRequest(context.Background())
if err := body.ContextValidate(ctx, route.Formats); err != nil {
res = append(res, err)
}
if len(res) == 0 {
o.Body = &body
}
}
} else {
res = append(res, errors.Required("body", "body", ""))
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@@ -0,0 +1,133 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// SiteReplicationEditOKCode is the HTTP code returned for type SiteReplicationEditOK
const SiteReplicationEditOKCode int = 200
/*SiteReplicationEditOK A successful response.
swagger:response siteReplicationEditOK
*/
type SiteReplicationEditOK struct {
/*
In: Body
*/
Payload *models.PeerSiteEditResponse `json:"body,omitempty"`
}
// NewSiteReplicationEditOK creates SiteReplicationEditOK with default headers values
func NewSiteReplicationEditOK() *SiteReplicationEditOK {
return &SiteReplicationEditOK{}
}
// WithPayload adds the payload to the site replication edit o k response
func (o *SiteReplicationEditOK) WithPayload(payload *models.PeerSiteEditResponse) *SiteReplicationEditOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the site replication edit o k response
func (o *SiteReplicationEditOK) SetPayload(payload *models.PeerSiteEditResponse) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SiteReplicationEditOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(200)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
/*SiteReplicationEditDefault Generic error response.
swagger:response siteReplicationEditDefault
*/
type SiteReplicationEditDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewSiteReplicationEditDefault creates SiteReplicationEditDefault with default headers values
func NewSiteReplicationEditDefault(code int) *SiteReplicationEditDefault {
if code <= 0 {
code = 500
}
return &SiteReplicationEditDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the site replication edit default response
func (o *SiteReplicationEditDefault) WithStatusCode(code int) *SiteReplicationEditDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the site replication edit default response
func (o *SiteReplicationEditDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the site replication edit default response
func (o *SiteReplicationEditDefault) WithPayload(payload *models.Error) *SiteReplicationEditDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the site replication edit default response
func (o *SiteReplicationEditDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SiteReplicationEditDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,104 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
)
// SiteReplicationEditURL generates an URL for the site replication edit operation
type SiteReplicationEditURL struct {
_basePath string
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *SiteReplicationEditURL) WithBasePath(bp string) *SiteReplicationEditURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *SiteReplicationEditURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *SiteReplicationEditURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/admin/site-replication"
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *SiteReplicationEditURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *SiteReplicationEditURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *SiteReplicationEditURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on SiteReplicationEditURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on SiteReplicationEditURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *SiteReplicationEditURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// SiteReplicationInfoAddHandlerFunc turns a function with the right signature into a site replication info add handler
type SiteReplicationInfoAddHandlerFunc func(SiteReplicationInfoAddParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn SiteReplicationInfoAddHandlerFunc) Handle(params SiteReplicationInfoAddParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// SiteReplicationInfoAddHandler interface for that can handle valid site replication info add params
type SiteReplicationInfoAddHandler interface {
Handle(SiteReplicationInfoAddParams, *models.Principal) middleware.Responder
}
// NewSiteReplicationInfoAdd creates a new http.Handler for the site replication info add operation
func NewSiteReplicationInfoAdd(ctx *middleware.Context, handler SiteReplicationInfoAddHandler) *SiteReplicationInfoAdd {
return &SiteReplicationInfoAdd{Context: ctx, Handler: handler}
}
/* SiteReplicationInfoAdd swagger:route POST /admin/site-replication AdminAPI siteReplicationInfoAdd
Add a Replication Site
*/
type SiteReplicationInfoAdd struct {
Context *middleware.Context
Handler SiteReplicationInfoAddHandler
}
func (o *SiteReplicationInfoAdd) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewSiteReplicationInfoAddParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,102 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"io"
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/validate"
"github.com/minio/console/models"
)
// NewSiteReplicationInfoAddParams creates a new SiteReplicationInfoAddParams object
//
// There are no default values defined in the spec.
func NewSiteReplicationInfoAddParams() SiteReplicationInfoAddParams {
return SiteReplicationInfoAddParams{}
}
// SiteReplicationInfoAddParams contains all the bound params for the site replication info add operation
// typically these are obtained from a http.Request
//
// swagger:parameters SiteReplicationInfoAdd
type SiteReplicationInfoAddParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*
Required: true
In: body
*/
Body models.SiteReplicationAddRequest
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewSiteReplicationInfoAddParams() beforehand.
func (o *SiteReplicationInfoAddParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
if runtime.HasBody(r) {
defer r.Body.Close()
var body models.SiteReplicationAddRequest
if err := route.Consumer.Consume(r.Body, &body); err != nil {
if err == io.EOF {
res = append(res, errors.Required("body", "body", ""))
} else {
res = append(res, errors.NewParseError("body", "body", "", err))
}
} else {
// validate body object
if err := body.Validate(route.Formats); err != nil {
res = append(res, err)
}
ctx := validate.WithOperationRequest(context.Background())
if err := body.ContextValidate(ctx, route.Formats); err != nil {
res = append(res, err)
}
if len(res) == 0 {
o.Body = body
}
}
} else {
res = append(res, errors.Required("body", "body", ""))
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@@ -0,0 +1,133 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// SiteReplicationInfoAddOKCode is the HTTP code returned for type SiteReplicationInfoAddOK
const SiteReplicationInfoAddOKCode int = 200
/*SiteReplicationInfoAddOK A successful response.
swagger:response siteReplicationInfoAddOK
*/
type SiteReplicationInfoAddOK struct {
/*
In: Body
*/
Payload *models.SiteReplicationAddResponse `json:"body,omitempty"`
}
// NewSiteReplicationInfoAddOK creates SiteReplicationInfoAddOK with default headers values
func NewSiteReplicationInfoAddOK() *SiteReplicationInfoAddOK {
return &SiteReplicationInfoAddOK{}
}
// WithPayload adds the payload to the site replication info add o k response
func (o *SiteReplicationInfoAddOK) WithPayload(payload *models.SiteReplicationAddResponse) *SiteReplicationInfoAddOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the site replication info add o k response
func (o *SiteReplicationInfoAddOK) SetPayload(payload *models.SiteReplicationAddResponse) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SiteReplicationInfoAddOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(200)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
/*SiteReplicationInfoAddDefault Generic error response.
swagger:response siteReplicationInfoAddDefault
*/
type SiteReplicationInfoAddDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewSiteReplicationInfoAddDefault creates SiteReplicationInfoAddDefault with default headers values
func NewSiteReplicationInfoAddDefault(code int) *SiteReplicationInfoAddDefault {
if code <= 0 {
code = 500
}
return &SiteReplicationInfoAddDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the site replication info add default response
func (o *SiteReplicationInfoAddDefault) WithStatusCode(code int) *SiteReplicationInfoAddDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the site replication info add default response
func (o *SiteReplicationInfoAddDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the site replication info add default response
func (o *SiteReplicationInfoAddDefault) WithPayload(payload *models.Error) *SiteReplicationInfoAddDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the site replication info add default response
func (o *SiteReplicationInfoAddDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SiteReplicationInfoAddDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,104 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
)
// SiteReplicationInfoAddURL generates an URL for the site replication info add operation
type SiteReplicationInfoAddURL struct {
_basePath string
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *SiteReplicationInfoAddURL) WithBasePath(bp string) *SiteReplicationInfoAddURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *SiteReplicationInfoAddURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *SiteReplicationInfoAddURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/admin/site-replication"
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *SiteReplicationInfoAddURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *SiteReplicationInfoAddURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *SiteReplicationInfoAddURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on SiteReplicationInfoAddURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on SiteReplicationInfoAddURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *SiteReplicationInfoAddURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// SiteReplicationRemoveHandlerFunc turns a function with the right signature into a site replication remove handler
type SiteReplicationRemoveHandlerFunc func(SiteReplicationRemoveParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn SiteReplicationRemoveHandlerFunc) Handle(params SiteReplicationRemoveParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// SiteReplicationRemoveHandler interface for that can handle valid site replication remove params
type SiteReplicationRemoveHandler interface {
Handle(SiteReplicationRemoveParams, *models.Principal) middleware.Responder
}
// NewSiteReplicationRemove creates a new http.Handler for the site replication remove operation
func NewSiteReplicationRemove(ctx *middleware.Context, handler SiteReplicationRemoveHandler) *SiteReplicationRemove {
return &SiteReplicationRemove{Context: ctx, Handler: handler}
}
/* SiteReplicationRemove swagger:route DELETE /admin/site-replication AdminAPI siteReplicationRemove
Remove a Replication Site
*/
type SiteReplicationRemove struct {
Context *middleware.Context
Handler SiteReplicationRemoveHandler
}
func (o *SiteReplicationRemove) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewSiteReplicationRemoveParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,102 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"io"
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/validate"
"github.com/minio/console/models"
)
// NewSiteReplicationRemoveParams creates a new SiteReplicationRemoveParams object
//
// There are no default values defined in the spec.
func NewSiteReplicationRemoveParams() SiteReplicationRemoveParams {
return SiteReplicationRemoveParams{}
}
// SiteReplicationRemoveParams contains all the bound params for the site replication remove operation
// typically these are obtained from a http.Request
//
// swagger:parameters SiteReplicationRemove
type SiteReplicationRemoveParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*
Required: true
In: body
*/
Body *models.PeerInfoRemove
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewSiteReplicationRemoveParams() beforehand.
func (o *SiteReplicationRemoveParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
if runtime.HasBody(r) {
defer r.Body.Close()
var body models.PeerInfoRemove
if err := route.Consumer.Consume(r.Body, &body); err != nil {
if err == io.EOF {
res = append(res, errors.Required("body", "body", ""))
} else {
res = append(res, errors.NewParseError("body", "body", "", err))
}
} else {
// validate body object
if err := body.Validate(route.Formats); err != nil {
res = append(res, err)
}
ctx := validate.WithOperationRequest(context.Background())
if err := body.ContextValidate(ctx, route.Formats); err != nil {
res = append(res, err)
}
if len(res) == 0 {
o.Body = &body
}
}
} else {
res = append(res, errors.Required("body", "body", ""))
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@@ -0,0 +1,133 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// SiteReplicationRemoveNoContentCode is the HTTP code returned for type SiteReplicationRemoveNoContent
const SiteReplicationRemoveNoContentCode int = 204
/*SiteReplicationRemoveNoContent A successful response.
swagger:response siteReplicationRemoveNoContent
*/
type SiteReplicationRemoveNoContent struct {
/*
In: Body
*/
Payload *models.PeerSiteRemoveResponse `json:"body,omitempty"`
}
// NewSiteReplicationRemoveNoContent creates SiteReplicationRemoveNoContent with default headers values
func NewSiteReplicationRemoveNoContent() *SiteReplicationRemoveNoContent {
return &SiteReplicationRemoveNoContent{}
}
// WithPayload adds the payload to the site replication remove no content response
func (o *SiteReplicationRemoveNoContent) WithPayload(payload *models.PeerSiteRemoveResponse) *SiteReplicationRemoveNoContent {
o.Payload = payload
return o
}
// SetPayload sets the payload to the site replication remove no content response
func (o *SiteReplicationRemoveNoContent) SetPayload(payload *models.PeerSiteRemoveResponse) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SiteReplicationRemoveNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(204)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
/*SiteReplicationRemoveDefault Generic error response.
swagger:response siteReplicationRemoveDefault
*/
type SiteReplicationRemoveDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewSiteReplicationRemoveDefault creates SiteReplicationRemoveDefault with default headers values
func NewSiteReplicationRemoveDefault(code int) *SiteReplicationRemoveDefault {
if code <= 0 {
code = 500
}
return &SiteReplicationRemoveDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the site replication remove default response
func (o *SiteReplicationRemoveDefault) WithStatusCode(code int) *SiteReplicationRemoveDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the site replication remove default response
func (o *SiteReplicationRemoveDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the site replication remove default response
func (o *SiteReplicationRemoveDefault) WithPayload(payload *models.Error) *SiteReplicationRemoveDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the site replication remove default response
func (o *SiteReplicationRemoveDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *SiteReplicationRemoveDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,104 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package admin_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
)
// SiteReplicationRemoveURL generates an URL for the site replication remove operation
type SiteReplicationRemoveURL struct {
_basePath string
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *SiteReplicationRemoveURL) WithBasePath(bp string) *SiteReplicationRemoveURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *SiteReplicationRemoveURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *SiteReplicationRemoveURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/admin/site-replication"
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *SiteReplicationRemoveURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *SiteReplicationRemoveURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *SiteReplicationRemoveURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on SiteReplicationRemoveURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on SiteReplicationRemoveURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *SiteReplicationRemoveURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -222,6 +222,9 @@ func NewConsoleAPI(spec *loads.Document) *ConsoleAPI {
UserAPIGetServiceAccountPolicyHandler: user_api.GetServiceAccountPolicyHandlerFunc(func(params user_api.GetServiceAccountPolicyParams, principal *models.Principal) middleware.Responder { UserAPIGetServiceAccountPolicyHandler: user_api.GetServiceAccountPolicyHandlerFunc(func(params user_api.GetServiceAccountPolicyParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation user_api.GetServiceAccountPolicy has not yet been implemented") return middleware.NotImplemented("operation user_api.GetServiceAccountPolicy has not yet been implemented")
}), }),
AdminAPIGetSiteReplicationInfoHandler: admin_api.GetSiteReplicationInfoHandlerFunc(func(params admin_api.GetSiteReplicationInfoParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation admin_api.GetSiteReplicationInfo has not yet been implemented")
}),
AdminAPIGetTierHandler: admin_api.GetTierHandlerFunc(func(params admin_api.GetTierParams, principal *models.Principal) middleware.Responder { AdminAPIGetTierHandler: admin_api.GetTierHandlerFunc(func(params admin_api.GetTierParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation admin_api.GetTier has not yet been implemented") return middleware.NotImplemented("operation admin_api.GetTier has not yet been implemented")
}), }),
@@ -381,6 +384,15 @@ func NewConsoleAPI(spec *loads.Document) *ConsoleAPI {
UserAPIShareObjectHandler: user_api.ShareObjectHandlerFunc(func(params user_api.ShareObjectParams, principal *models.Principal) middleware.Responder { UserAPIShareObjectHandler: user_api.ShareObjectHandlerFunc(func(params user_api.ShareObjectParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation user_api.ShareObject has not yet been implemented") return middleware.NotImplemented("operation user_api.ShareObject has not yet been implemented")
}), }),
AdminAPISiteReplicationEditHandler: admin_api.SiteReplicationEditHandlerFunc(func(params admin_api.SiteReplicationEditParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation admin_api.SiteReplicationEdit has not yet been implemented")
}),
AdminAPISiteReplicationInfoAddHandler: admin_api.SiteReplicationInfoAddHandlerFunc(func(params admin_api.SiteReplicationInfoAddParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation admin_api.SiteReplicationInfoAdd has not yet been implemented")
}),
AdminAPISiteReplicationRemoveHandler: admin_api.SiteReplicationRemoveHandlerFunc(func(params admin_api.SiteReplicationRemoveParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation admin_api.SiteReplicationRemove has not yet been implemented")
}),
AdminAPISubnetInfoHandler: admin_api.SubnetInfoHandlerFunc(func(params admin_api.SubnetInfoParams, principal *models.Principal) middleware.Responder { AdminAPISubnetInfoHandler: admin_api.SubnetInfoHandlerFunc(func(params admin_api.SubnetInfoParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation admin_api.SubnetInfo has not yet been implemented") return middleware.NotImplemented("operation admin_api.SubnetInfo has not yet been implemented")
}), }),
@@ -574,6 +586,8 @@ type ConsoleAPI struct {
UserAPIGetObjectMetadataHandler user_api.GetObjectMetadataHandler UserAPIGetObjectMetadataHandler user_api.GetObjectMetadataHandler
// UserAPIGetServiceAccountPolicyHandler sets the operation handler for the get service account policy operation // UserAPIGetServiceAccountPolicyHandler sets the operation handler for the get service account policy operation
UserAPIGetServiceAccountPolicyHandler user_api.GetServiceAccountPolicyHandler UserAPIGetServiceAccountPolicyHandler user_api.GetServiceAccountPolicyHandler
// AdminAPIGetSiteReplicationInfoHandler sets the operation handler for the get site replication info operation
AdminAPIGetSiteReplicationInfoHandler admin_api.GetSiteReplicationInfoHandler
// AdminAPIGetTierHandler sets the operation handler for the get tier operation // AdminAPIGetTierHandler sets the operation handler for the get tier operation
AdminAPIGetTierHandler admin_api.GetTierHandler AdminAPIGetTierHandler admin_api.GetTierHandler
// AdminAPIGetUserInfoHandler sets the operation handler for the get user info operation // AdminAPIGetUserInfoHandler sets the operation handler for the get user info operation
@@ -680,6 +694,12 @@ type ConsoleAPI struct {
UserAPISetServiceAccountPolicyHandler user_api.SetServiceAccountPolicyHandler UserAPISetServiceAccountPolicyHandler user_api.SetServiceAccountPolicyHandler
// UserAPIShareObjectHandler sets the operation handler for the share object operation // UserAPIShareObjectHandler sets the operation handler for the share object operation
UserAPIShareObjectHandler user_api.ShareObjectHandler UserAPIShareObjectHandler user_api.ShareObjectHandler
// AdminAPISiteReplicationEditHandler sets the operation handler for the site replication edit operation
AdminAPISiteReplicationEditHandler admin_api.SiteReplicationEditHandler
// AdminAPISiteReplicationInfoAddHandler sets the operation handler for the site replication info add operation
AdminAPISiteReplicationInfoAddHandler admin_api.SiteReplicationInfoAddHandler
// AdminAPISiteReplicationRemoveHandler sets the operation handler for the site replication remove operation
AdminAPISiteReplicationRemoveHandler admin_api.SiteReplicationRemoveHandler
// AdminAPISubnetInfoHandler sets the operation handler for the subnet info operation // AdminAPISubnetInfoHandler sets the operation handler for the subnet info operation
AdminAPISubnetInfoHandler admin_api.SubnetInfoHandler AdminAPISubnetInfoHandler admin_api.SubnetInfoHandler
// AdminAPISubnetLoginHandler sets the operation handler for the subnet login operation // AdminAPISubnetLoginHandler sets the operation handler for the subnet login operation
@@ -945,6 +965,9 @@ func (o *ConsoleAPI) Validate() error {
if o.UserAPIGetServiceAccountPolicyHandler == nil { if o.UserAPIGetServiceAccountPolicyHandler == nil {
unregistered = append(unregistered, "user_api.GetServiceAccountPolicyHandler") unregistered = append(unregistered, "user_api.GetServiceAccountPolicyHandler")
} }
if o.AdminAPIGetSiteReplicationInfoHandler == nil {
unregistered = append(unregistered, "admin_api.GetSiteReplicationInfoHandler")
}
if o.AdminAPIGetTierHandler == nil { if o.AdminAPIGetTierHandler == nil {
unregistered = append(unregistered, "admin_api.GetTierHandler") unregistered = append(unregistered, "admin_api.GetTierHandler")
} }
@@ -1104,6 +1127,15 @@ func (o *ConsoleAPI) Validate() error {
if o.UserAPIShareObjectHandler == nil { if o.UserAPIShareObjectHandler == nil {
unregistered = append(unregistered, "user_api.ShareObjectHandler") unregistered = append(unregistered, "user_api.ShareObjectHandler")
} }
if o.AdminAPISiteReplicationEditHandler == nil {
unregistered = append(unregistered, "admin_api.SiteReplicationEditHandler")
}
if o.AdminAPISiteReplicationInfoAddHandler == nil {
unregistered = append(unregistered, "admin_api.SiteReplicationInfoAddHandler")
}
if o.AdminAPISiteReplicationRemoveHandler == nil {
unregistered = append(unregistered, "admin_api.SiteReplicationRemoveHandler")
}
if o.AdminAPISubnetInfoHandler == nil { if o.AdminAPISubnetInfoHandler == nil {
unregistered = append(unregistered, "admin_api.SubnetInfoHandler") unregistered = append(unregistered, "admin_api.SubnetInfoHandler")
} }
@@ -1448,6 +1480,10 @@ func (o *ConsoleAPI) initHandlerCache() {
if o.handlers["GET"] == nil { if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler) o.handlers["GET"] = make(map[string]http.Handler)
} }
o.handlers["GET"]["/admin/site-replication"] = admin_api.NewGetSiteReplicationInfo(o.context, o.AdminAPIGetSiteReplicationInfoHandler)
if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler)
}
o.handlers["GET"]["/admin/tiers/{type}/{name}"] = admin_api.NewGetTier(o.context, o.AdminAPIGetTierHandler) o.handlers["GET"]["/admin/tiers/{type}/{name}"] = admin_api.NewGetTier(o.context, o.AdminAPIGetTierHandler)
if o.handlers["GET"] == nil { if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler) o.handlers["GET"] = make(map[string]http.Handler)
@@ -1657,6 +1693,18 @@ func (o *ConsoleAPI) initHandlerCache() {
o.handlers["GET"] = make(map[string]http.Handler) o.handlers["GET"] = make(map[string]http.Handler)
} }
o.handlers["GET"]["/buckets/{bucket_name}/objects/share"] = user_api.NewShareObject(o.context, o.UserAPIShareObjectHandler) o.handlers["GET"]["/buckets/{bucket_name}/objects/share"] = user_api.NewShareObject(o.context, o.UserAPIShareObjectHandler)
if o.handlers["PUT"] == nil {
o.handlers["PUT"] = make(map[string]http.Handler)
}
o.handlers["PUT"]["/admin/site-replication"] = admin_api.NewSiteReplicationEdit(o.context, o.AdminAPISiteReplicationEditHandler)
if o.handlers["POST"] == nil {
o.handlers["POST"] = make(map[string]http.Handler)
}
o.handlers["POST"]["/admin/site-replication"] = admin_api.NewSiteReplicationInfoAdd(o.context, o.AdminAPISiteReplicationInfoAddHandler)
if o.handlers["DELETE"] == nil {
o.handlers["DELETE"] = make(map[string]http.Handler)
}
o.handlers["DELETE"]["/admin/site-replication"] = admin_api.NewSiteReplicationRemove(o.context, o.AdminAPISiteReplicationRemoveHandler)
if o.handlers["GET"] == nil { if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler) o.handlers["GET"] = make(map[string]http.Handler)
} }

View File

@@ -2428,6 +2428,83 @@ paths:
tags: tags:
- AdminAPI - AdminAPI
/admin/site-replication:
get:
summary: Get list of Replication Sites
operationId: GetSiteReplicationInfo
responses:
200:
description: A successful response.
schema:
$ref: "#/definitions/siteReplicationInfoResponse"
default:
description: Generic error response.
schema:
$ref: "#/definitions/error"
tags:
- AdminAPI
post:
summary: Add a Replication Site
operationId: SiteReplicationInfoAdd
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/siteReplicationAddRequest"
responses:
200:
description: A successful response.
schema:
$ref: "#/definitions/siteReplicationAddResponse"
default:
description: Generic error response.
schema:
$ref: "#/definitions/error"
tags:
- AdminAPI
put:
summary: Edit a Replication Site
operationId: SiteReplicationEdit
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/peerInfo"
responses:
200:
description: A successful response.
schema:
$ref: "#/definitions/peerSiteEditResponse"
default:
description: Generic error response.
schema:
$ref: "#/definitions/error"
tags:
- AdminAPI
delete:
summary: Remove a Replication Site
operationId: SiteReplicationRemove
parameters:
- name: body
in: body
required: true
schema:
$ref: "#/definitions/peerInfoRemove"
responses:
204:
description: A successful response.
schema:
$ref: "#/definitions/peerSiteRemoveResponse"
default:
description: Generic error response.
schema:
$ref: "#/definitions/error"
tags:
- AdminAPI
/admin/tiers: /admin/tiers:
get: get:
summary: Returns a list of tiers for ilm summary: Returns a list of tiers for ilm
@@ -3744,6 +3821,90 @@ definitions:
type: array type: array
items: items:
$ref: "#/definitions/notificationEndpointItem" $ref: "#/definitions/notificationEndpointItem"
peerSiteRemoveResponse:
type: object
properties:
status:
type : string
errorDetail:
type : string
peerSiteEditResponse:
type: object
properties:
success:
type: boolean
status:
type: string
errorDetail:
type: string
peerSite:
type: object
properties:
name:
type : string
endpoint:
type : string
accessKey:
type: string
secretKey:
type: string
peerInfo:
type: object
properties:
endpoint:
type : string
name:
type: string
deploymentID:
type: string
peerInfoRemove:
type: object
required:
- sites
properties:
all:
type: boolean
sites:
type : array
items:
type: string
siteReplicationAddRequest:
type: array
items:
$ref: "#/definitions/peerSite"
siteReplicationAddResponse:
type: object
properties:
success:
type: boolean
status:
type: string
errorDetail:
type: string
initialSyncErrorMessage:
type: string
siteReplicationInfoResponse:
type: object
properties:
enabled:
type: boolean
name:
type: string
sites :
type: array
items:
$ref: "#/definitions/peerInfo"
serviceAccountAccessKey:
type: string
updateUser: updateUser:
type: object type: object
required: required: