-
Notifications
You must be signed in to change notification settings - Fork 8
/
request_interface.go
121 lines (102 loc) · 3.33 KB
/
request_interface.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
113
114
115
116
117
118
119
120
121
/*
Copyright 2022. projectsveltos.io. All rights reserved.
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 deployer
import (
"context"
"time"
"github.com/go-logr/logr"
"sigs.k8s.io/controller-runtime/pkg/client"
sveltosv1alpha1 "github.com/projectsveltos/libsveltos/api/v1alpha1"
)
const (
unavailable = "unavailable"
)
type ResultStatus int64
const (
Deployed ResultStatus = iota
InProgress
Failed
Removed
Unavailable
)
func (r ResultStatus) String() string {
switch r {
case Deployed:
return "deployed"
case InProgress:
return "in-progress"
case Failed:
return "failed"
case Removed:
return "removed"
case Unavailable:
return unavailable
}
return unavailable
}
type Result struct {
ResultStatus
Err error
}
type RequestHandler func(ctx context.Context, c client.Client,
clusterNamespace, clusterName, applicant, featureID string,
clusterType sveltosv1alpha1.ClusterType, o Options, logger logr.Logger) error
type MetricHandler func(elapsed time.Duration,
clusterNamespace, clusterName, featureID string,
clusterType sveltosv1alpha1.ClusterType, logger logr.Logger)
type DeployerInterface interface {
// RegisterFeatureID allows registering a feature ID.
// If a featureID is already registered, it returns an error.
RegisterFeatureID(
featureID string,
) error
// Deploy creates a request to deploy/cleanup a feature in a given
// CAPI cluster (identified by clusterNamespace, clusterName).
// cleanup indicates whether request is for feature to be provisioned
// or removed.
// When worker is available to fulfill such request, RequestHandler
// will be invoked in the worker context.
// If featureID is not registered, an error will be returned.
// Applicant is an identifier of whatever is making this request.
// It can be left empty (in case there is no need to differentiate between
// different applicants).
Deploy(
ctx context.Context,
clusterNamespace, clusterName, applicant, featureID string,
clusterType sveltosv1alpha1.ClusterType,
cleanup bool,
f RequestHandler,
m MetricHandler,
o Options,
) error
// IsInProgress returns true, if featureID for clusterNamespace/clusterName
// requested by applicant is currently in progress.
// cleanup indicates whether request for feature to be provisioned or
// removed is currently in progress.
IsInProgress(
clusterNamespace, clusterName, applicant, featureID string,
clusterType sveltosv1alpha1.ClusterType,
cleanup bool,
) bool
// GetResult returns result for a given request.
GetResult(
ctx context.Context,
clusterNamespace, clusterName, applicant, featureID string,
clusterType sveltosv1alpha1.ClusterType,
cleanup bool,
) Result
// CleanupEntries removes any entry (from any internal data structure) for
// given feature
CleanupEntries(clusterNamespace, clusterName, applicant, featureID string,
clusterType sveltosv1alpha1.ClusterType, cleanup bool)
}