forked from cloudnative-pg/cloudnative-pg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfence.go
86 lines (76 loc) · 2.36 KB
/
fence.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
/*
Copyright The CloudNativePG 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 utils
import (
"fmt"
"github.com/cloudnative-pg/cloudnative-pg/pkg/resources"
"github.com/cloudnative-pg/cloudnative-pg/pkg/utils"
)
// FencingMethod will be one of the supported ways to trigger an instance fencing
type FencingMethod string
const (
// UsingAnnotation it is a keyword to use while fencing on/off the instances using annotation method
UsingAnnotation FencingMethod = "annotation"
// UsingPlugin it is a keyword to use while fencing on/off the instances using plugin method
UsingPlugin FencingMethod = "plugin"
)
// FencingOn marks an instance in a cluster as fenced
func FencingOn(
env *TestingEnvironment,
serverName,
namespace,
clusterName string,
fencingMethod FencingMethod,
) error {
switch fencingMethod {
case UsingPlugin:
_, _, err := Run(fmt.Sprintf("kubectl cnpg fencing on %v %v -n %v",
clusterName, serverName, namespace))
if err != nil {
return err
}
case UsingAnnotation:
err := resources.ApplyFenceFunc(env.Ctx, env.Client, clusterName, namespace, serverName, utils.AddFencedInstance)
if err != nil {
return err
}
default:
return fmt.Errorf("unrecognized fencing Method: %s", fencingMethod)
}
return nil
}
// FencingOff marks an instance in a cluster as not fenced
func FencingOff(
env *TestingEnvironment,
serverName,
namespace,
clusterName string,
fencingMethod FencingMethod,
) error {
switch fencingMethod {
case UsingPlugin:
_, _, err := Run(fmt.Sprintf("kubectl cnpg fencing off %v %v -n %v",
clusterName, serverName, namespace))
if err != nil {
return err
}
case UsingAnnotation:
err := resources.ApplyFenceFunc(env.Ctx, env.Client, clusterName, namespace, serverName, utils.RemoveFencedInstance)
if err != nil {
return err
}
default:
return fmt.Errorf("unrecognized fencing Method: %s", fencingMethod)
}
return nil
}