/
federator.go
65 lines (49 loc) · 2.07 KB
/
federator.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
/*
SPDX-License-Identifier: Apache-2.0
Copyright Contributors to the Submariner project.
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 federate
import (
"context"
"k8s.io/apimachinery/pkg/runtime"
)
// ClusterIDLabelKey is the key for a label that may be added to federated resources to hold the ID of the cluster from
// which the resource originated, allowing for filtering of resources emanating from the originating cluster.
const ClusterIDLabelKey = "submariner-io/clusterID"
// Federator provides methods for accessing federated resources.
type Federator interface {
// Distribute distributes the given resource to all federated clusters.
// The actual distribution may occur asynchronously in which case any returned error only indicates that the request
// failed.
//
// If the resource was previously distributed and the given resource differs, each previous cluster will receive the
// updated resource.
Distribute(ctx context.Context, resource runtime.Object) error
// Delete stops distributing the given resource and deletes it from all clusters to which it was distributed.
// The actual deletion may occur asynchronously in which any returned error only indicates that the request
// failed.
Delete(ctx context.Context, resource runtime.Object) error
}
type FederatorExt interface {
Federator
LogEvents(withName string)
}
type noopFederator struct{}
func NewNoopFederator() Federator {
return &noopFederator{}
}
func (n noopFederator) Distribute(_ context.Context, _ runtime.Object) error {
return nil
}
func (n noopFederator) Delete(_ context.Context, _ runtime.Object) error {
return nil
}