-
Notifications
You must be signed in to change notification settings - Fork 155
/
metering.go
112 lines (88 loc) · 3.69 KB
/
metering.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
Copyright 2021 The Kubermatic Kubernetes Platform contributors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package admin
import (
"context"
"fmt"
"github.com/go-kit/kit/endpoint"
"k8c.io/kubermatic/v2/pkg/provider"
kerrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// CreateOrUpdateMeteringCredentials creates or updates metering tool SecretReq.
func CreateOrUpdateMeteringCredentials(userInfoGetter provider.UserInfoGetter, seedsGetter provider.SeedsGetter, seedClientGetter provider.SeedClientGetter) endpoint.Endpoint {
return func(ctx context.Context, req interface{}) (interface{}, error) {
userInfo, err := userInfoGetter(ctx, "")
if err != nil {
return nil, err
}
if !userInfo.IsAdmin {
return nil, kerrors.NewForbidden(schema.GroupResource{}, userInfo.Email, fmt.Errorf("%q doesn't have admin rights", userInfo.Email))
}
if err := createOrUpdateMeteringCredentials(ctx, req, seedsGetter, seedClientGetter); err != nil {
return nil, fmt.Errorf("failed to create/update metering credentials: %v", err)
}
return nil, nil
}
}
// CreateOrUpdateMeteringConfigurations configures kkp metering tool.
func CreateOrUpdateMeteringConfigurations(userInfoGetter provider.UserInfoGetter, masterClient client.Client) endpoint.Endpoint {
return func(ctx context.Context, req interface{}) (interface{}, error) {
userInfo, err := userInfoGetter(ctx, "")
if err != nil {
return nil, err
}
if !userInfo.IsAdmin {
return nil, kerrors.NewForbidden(schema.GroupResource{}, userInfo.Email, fmt.Errorf("%q doesn't have admin rights", userInfo.Email))
}
if err := createOrUpdateMeteringConfigurations(ctx, req, masterClient); err != nil {
return nil, fmt.Errorf("failed to create/update metering SecretReq: %v", err)
}
return nil, nil
}
}
// ListMeteringReportsEndpoint lists available reports
func ListMeteringReportsEndpoint(userInfoGetter provider.UserInfoGetter, seedsGetter provider.SeedsGetter, seedClientGetter provider.SeedClientGetter) endpoint.Endpoint {
return func(ctx context.Context, req interface{}) (interface{}, error) {
userInfo, err := userInfoGetter(ctx, "")
if err != nil {
return nil, err
}
if !userInfo.IsAdmin {
return nil, kerrors.NewForbidden(schema.GroupResource{}, userInfo.Email, fmt.Errorf("%q doesn't have admin rights", userInfo.Email))
}
exports, err := listMeteringReports(ctx, req, seedsGetter, seedClientGetter)
if err != nil {
return nil, err
}
return exports, nil
}
}
// GetMeteringReportEndpoint get a presigned url to download specific report.
func GetMeteringReportEndpoint(userInfoGetter provider.UserInfoGetter, seedsGetter provider.SeedsGetter, seedClientGetter provider.SeedClientGetter) endpoint.Endpoint {
return func(ctx context.Context, req interface{}) (interface{}, error) {
userInfo, err := userInfoGetter(ctx, "")
if err != nil {
return nil, err
}
if !userInfo.IsAdmin {
return nil, kerrors.NewForbidden(schema.GroupResource{}, userInfo.Email, fmt.Errorf("%q doesn't have admin rights", userInfo.Email))
}
report, err := getMeteringReport(ctx, req, seedsGetter, seedClientGetter)
if err != nil {
return nil, err
}
return report, nil
}
}