Skip to content

Commit 0b97cf4

Browse files
authored
K8SPSMDB-267: Version service request with generated code (percona#432)
1 parent f5921b1 commit 0b97cf4

File tree

401 files changed

+82967
-100196
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

401 files changed

+82967
-100196
lines changed

build/build-versionservice-client.sh

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/bash
2+
3+
set -o errexit
4+
set -o xtrace
5+
6+
rm -rf versionserviceclient
7+
8+
swagger generate client -f vendor/github.com/Percona-Lab/percona-version-service/api/version.swagger.yaml -c versionserviceclient -m versionserviceclient/models

cmd/manager/main.go

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88
"runtime"
99

10+
_ "github.com/Percona-Lab/percona-version-service/api"
1011
certmgrscheme "github.com/jetstack/cert-manager/pkg/client/clientset/versioned/scheme"
1112
"github.com/operator-framework/operator-sdk/pkg/k8sutil"
1213
"github.com/operator-framework/operator-sdk/pkg/leader"

go.mod

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,21 @@ module github.com/percona/percona-server-mongodb-operator
33
go 1.13
44

55
require (
6+
github.com/Percona-Lab/percona-version-service/api v0.0.0-20200714141734-e9fed619b55c
67
github.com/aws/aws-sdk-go v1.31.13 // indirect
78
github.com/go-logr/logr v0.1.0
9+
github.com/go-openapi/errors v0.19.6
10+
github.com/go-openapi/runtime v0.19.16
11+
github.com/go-openapi/strfmt v0.19.5
12+
github.com/go-openapi/swag v0.19.9
13+
github.com/go-openapi/validate v0.19.10
814
github.com/hashicorp/go-version v1.2.0
915
github.com/jetstack/cert-manager v0.15.1
1016
github.com/operator-framework/operator-sdk v0.17.1
1117
github.com/percona/percona-backup-mongodb v1.2.0
1218
github.com/pkg/errors v0.9.1
1319
github.com/robfig/cron/v3 v3.0.1
14-
github.com/stretchr/testify v1.5.1
20+
github.com/stretchr/testify v1.6.1
1521
go.mongodb.org/mongo-driver v1.3.4
1622
k8s.io/api v0.18.0
1723
k8s.io/apimachinery v0.18.0

go.sum

+66
Large diffs are not rendered by default.

pkg/controller/perconaservermongodb/ssl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1"
88

9-
cm "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha3"
9+
cm "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1alpha2"
1010
api "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
1111
"github.com/percona/percona-server-mongodb-operator/pkg/psmdb/tls"
1212
corev1 "k8s.io/api/core/v1"

pkg/controller/perconaservermongodb/version.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (r *ReconcilePerconaServerMongoDB) ensureVersion(cr *api.PerconaServerMongo
102102
}
103103

104104
vm := VersionMeta{
105-
Apply: cr.Spec.UpgradeOptions.Apply,
105+
Apply: string(cr.Spec.UpgradeOptions.Apply),
106106
KubeVersion: r.serverVersion.Info.GitVersion,
107107
MongoVersion: cr.Status.MongoVersion,
108108
PMMVersion: cr.Status.PMMVersion,

pkg/controller/perconaservermongodb/vs.go

+38-51
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,87 @@
11
package perconaservermongodb
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"net/http"
76
"net/url"
87
"strings"
98
"time"
109

11-
v1 "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
12-
)
10+
"github.com/percona/percona-server-mongodb-operator/versionserviceclient/models"
1311

14-
func (vs VersionServiceClient) GetExactVersion(endpoint string, vm VersionMeta) (DepVersion, error) {
15-
client := http.Client{
16-
Timeout: 5 * time.Second,
17-
}
12+
"github.com/percona/percona-server-mongodb-operator/versionserviceclient/version_service"
1813

19-
requestURL, err := url.Parse(
20-
fmt.Sprintf("%s/v1/psmdb-operator/%s/%s",
21-
strings.TrimRight(endpoint, "/"),
22-
vs.OpVersion,
23-
vm.Apply,
24-
),
25-
)
26-
if err != nil {
27-
return DepVersion{}, err
28-
}
14+
"github.com/percona/percona-server-mongodb-operator/versionserviceclient"
15+
)
2916

30-
q := requestURL.Query()
31-
q.Add("databaseVersion", vm.MongoVersion)
32-
q.Add("kubeVersion", vm.KubeVersion)
33-
q.Add("platform", vm.Platform)
34-
q.Add("customResourceUID", vm.CRUID)
17+
const productName = "psmdb-operator"
3518

36-
if vm.PMMVersion != "" {
37-
q.Add("pmmVersion", vm.PMMVersion)
38-
}
39-
40-
if vm.BackupVersion != "" {
41-
q.Add("backupVersion", vm.BackupVersion)
19+
func (vs VersionServiceClient) GetExactVersion(endpoint string, vm VersionMeta) (DepVersion, error) {
20+
if strings.Contains(endpoint, "https://check.percona.com/versions") {
21+
endpoint = "https://check.percona.com"
4222
}
4323

44-
requestURL.RawQuery = q.Encode()
45-
req, err := http.NewRequest("GET", requestURL.String(), nil)
24+
requestURL, err := url.Parse(endpoint)
4625
if err != nil {
4726
return DepVersion{}, err
4827
}
4928

50-
req.Header.Set("Accept", "application/json")
51-
52-
resp, err := client.Do(req)
53-
if err != nil {
54-
return DepVersion{}, err
29+
vsClient := versionserviceclient.NewHTTPClientWithConfig(nil, &versionserviceclient.TransportConfig{
30+
Host: requestURL.Host,
31+
BasePath: requestURL.Path,
32+
Schemes: []string{requestURL.Scheme},
33+
})
34+
35+
applyParams := &version_service.VersionServiceApplyParams{
36+
Apply: vm.Apply,
37+
BackupVersion: &vm.BackupVersion,
38+
CustomResourceUID: &vm.CRUID,
39+
DatabaseVersion: &vm.MongoVersion,
40+
KubeVersion: &vm.KubeVersion,
41+
OperatorVersion: "1.5.0",
42+
Platform: &vm.Platform,
43+
PmmVersion: &vm.PMMVersion,
44+
Product: productName,
45+
HTTPClient: &http.Client{Timeout: 10 * time.Second},
5546
}
47+
applyParams = applyParams.WithTimeout(10 * time.Second)
5648

57-
defer resp.Body.Close()
58-
if resp.StatusCode != http.StatusOK {
59-
return DepVersion{}, fmt.Errorf("received bad status code %s", resp.Status)
60-
}
49+
resp, err := vsClient.VersionService.VersionServiceApply(applyParams)
6150

62-
r := VersionResponse{}
63-
err = json.NewDecoder(resp.Body).Decode(&r)
6451
if err != nil {
65-
return DepVersion{}, fmt.Errorf("failed to unmarshal response: %v", err)
52+
return DepVersion{}, err
6653
}
6754

68-
if len(r.Versions) == 0 {
55+
if len(resp.Payload.Versions) == 0 {
6956
return DepVersion{}, fmt.Errorf("empty versions response")
7057
}
7158

72-
mongoVersion, err := getVersion(r.Versions[0].Matrix.Mongo)
59+
mongoVersion, err := getVersion(resp.Payload.Versions[0].Matrix.Mongod)
7360
if err != nil {
7461
return DepVersion{}, err
7562
}
7663

77-
backupVersion, err := getVersion(r.Versions[0].Matrix.Backup)
64+
backupVersion, err := getVersion(resp.Payload.Versions[0].Matrix.Backup)
7865
if err != nil {
7966
return DepVersion{}, err
8067
}
8168

82-
pmmVersion, err := getVersion(r.Versions[0].Matrix.PMM)
69+
pmmVersion, err := getVersion(resp.Payload.Versions[0].Matrix.Pmm)
8370
if err != nil {
8471
return DepVersion{}, err
8572
}
8673

8774
return DepVersion{
88-
MongoImage: r.Versions[0].Matrix.Mongo[mongoVersion].ImagePath,
75+
MongoImage: resp.Payload.Versions[0].Matrix.Mongod[mongoVersion].ImagePath,
8976
MongoVersion: mongoVersion,
90-
BackupImage: r.Versions[0].Matrix.Backup[backupVersion].ImagePath,
77+
BackupImage: resp.Payload.Versions[0].Matrix.Backup[backupVersion].ImagePath,
9178
BackupVersion: backupVersion,
92-
PMMImage: r.Versions[0].Matrix.PMM[pmmVersion].ImagePath,
79+
PMMImage: resp.Payload.Versions[0].Matrix.Mongod[pmmVersion].ImagePath,
9380
PMMVersion: pmmVersion,
9481
}, nil
9582
}
9683

97-
func getVersion(versions map[string]Version) (string, error) {
84+
func getVersion(versions map[string]models.VersionVersion) (string, error) {
9885
if len(versions) != 1 {
9986
return "", fmt.Errorf("response has multiple or zero versions")
10087
}
@@ -147,7 +134,7 @@ type VersionResponse struct {
147134
}
148135

149136
type VersionMeta struct {
150-
Apply v1.UpgradeStrategy
137+
Apply string
151138
MongoVersion string
152139
KubeVersion string
153140
Platform string

0 commit comments

Comments
 (0)