Skip to content

Commit 00a2b8f

Browse files
added force_delete_pvc flag (#392)
* added force_delete_pvc flag --------- Co-authored-by: danielm-codefresh <[email protected]>
1 parent 714ebeb commit 00a2b8f

File tree

5 files changed

+58
-31
lines changed

5 files changed

+58
-31
lines changed

venona/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.10.0
1+
1.10.1

venona/cmd/start.go

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ type startOptions struct {
6060
inClusterRuntime string
6161
qps float32
6262
burst int
63+
forceDeletePvc bool
6364
}
6465

6566
const (
@@ -70,6 +71,7 @@ const (
7071
defaultWorkflowBufferSize = 1000
7172
defaultK8sClientQPS = 50
7273
defaultK8sClientBurst = 100
74+
defaultForceDeletePvc = false
7375
)
7476

7577
var (
@@ -129,6 +131,7 @@ func init() {
129131
dieOnError(viper.BindEnv("workflow-buffer-size", "WORKFLOW_BUFFER_SIZE"))
130132
dieOnError(viper.BindEnv("k8s-client-qps", "K8S_CLIENT_QPS"))
131133
dieOnError(viper.BindEnv("k8s-client-burst", "K8S_CLIENT_BURST"))
134+
dieOnError(viper.BindEnv("force-delete-pvc", "FORCE_DELETE_PVC"))
132135

133136
viper.SetDefault("codefresh-host", defaultCodefreshHost)
134137
viper.SetDefault("port", "8080")
@@ -141,6 +144,7 @@ func init() {
141144
viper.SetDefault("workflow-buffer-size", defaultWorkflowBufferSize)
142145
viper.SetDefault("k8s-client-qps", defaultK8sClientQPS)
143146
viper.SetDefault("k8s-client-burst", defaultK8sClientBurst)
147+
viper.SetDefault("force-delete-pvc", defaultForceDeletePvc)
144148

145149
startCmd.Flags().BoolVar(&startCmdOptions.verbose, "verbose", viper.GetBool("verbose"), "Show more logs")
146150
startCmd.Flags().BoolVar(&startCmdOptions.rejectTLSUnauthorized, "tls-reject-unauthorized", viper.GetBool("NODE_TLS_REJECT_UNAUTHORIZED"), "Disable certificate validation for TLS connections")
@@ -158,6 +162,7 @@ func init() {
158162
startCmd.Flags().StringVar(&startCmdOptions.newrelicAppname, "newrelic-appname", viper.GetString("newrelic-appname"), "New-Relic application name [$NEWRELIC_APPNAME]")
159163
startCmd.Flags().Float32Var(&startCmdOptions.qps, "k8s-client-qps", float32(viper.GetFloat64("k8s-client-qps")), "the maximum QPS to the master from this client [$K8S_CLIENT_QPS]")
160164
startCmd.Flags().IntVar(&startCmdOptions.burst, "k8s-client-burst", viper.GetInt("k8s-client-burst"), "k8s client maximum burst for throttle [$K8S_CLIENT_BURST]")
165+
startCmd.Flags().BoolVar(&startCmdOptions.forceDeletePvc, "force-delete-pvc", viper.GetBool("force-delete-pvc"), "set to true to disable PVC protection [$FORCE_DELETE_PVC]")
161166

162167
startCmd.Flags().VisitAll(func(f *pflag.Flag) {
163168
if viper.IsSet(f.Name) && viper.GetString(f.Name) != "" {
@@ -270,7 +275,7 @@ func run(options startOptions) {
270275
}
271276

272277
func inClusterRuntimeConfiguration(options startOptions, log logger.Logger) map[string]runtime.Runtime {
273-
k, err := kubernetes.NewInCluster(log, options.qps, options.burst)
278+
k, err := kubernetes.NewInCluster(log, options.qps, options.burst, options.forceDeletePvc)
274279
dieOnError(err)
275280
re := runtime.New(runtime.Options{
276281
Kubernetes: k,
@@ -284,14 +289,15 @@ func remoteRuntimeConfiguration(options startOptions, log logger.Logger) map[str
284289
runtimes := map[string]runtime.Runtime{}
285290
for name, config := range configs {
286291
k, err := kubernetes.New(kubernetes.Options{
287-
Logger: log,
288-
Token: config.Token,
289-
Type: config.Type,
290-
Host: config.Host,
291-
Cert: config.Cert,
292-
Insecure: !options.rejectTLSUnauthorized,
293-
QPS: options.qps,
294-
Burst: options.burst,
292+
Logger: log,
293+
Token: config.Token,
294+
Type: config.Type,
295+
Host: config.Host,
296+
Cert: config.Cert,
297+
Insecure: !options.rejectTLSUnauthorized,
298+
QPS: options.qps,
299+
Burst: options.burst,
300+
ForceDeletePvc: options.forceDeletePvc,
295301
})
296302
if err != nil {
297303
log.Error("Failed to load kubernetes", "error", err.Error(), "file", name, "name", config.Name)

venona/pkg/kubernetes/kubernetes.go

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,12 @@ import (
2727

2828
v1 "k8s.io/api/core/v1"
2929
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30+
"k8s.io/apimachinery/pkg/types"
3031
"k8s.io/client-go/kubernetes"
3132
"k8s.io/client-go/kubernetes/scheme"
3233
"k8s.io/client-go/rest"
3334
)
3435

35-
var errNotValidType = errors.New("not a valid type")
36-
var kubeDecode = scheme.Codecs.UniversalDeserializer().Decode
37-
3836
type (
3937
// Kubernetes API client
4038
Kubernetes interface {
@@ -44,14 +42,15 @@ type (
4442

4543
// Options for Kubernetes
4644
Options struct {
47-
Logger logger.Logger
48-
Type string
49-
Cert string
50-
Token string
51-
Host string
52-
Insecure bool
53-
QPS float32
54-
Burst int
45+
Logger logger.Logger
46+
Type string
47+
Cert string
48+
Token string
49+
Host string
50+
Insecure bool
51+
QPS float32
52+
Burst int
53+
ForceDeletePvc bool
5554
}
5655

5756
// DeleteOptions to delete resource from the cluster
@@ -62,17 +61,25 @@ type (
6261
}
6362

6463
kube struct {
65-
client kubernetes.Interface
66-
log logger.Logger
64+
client kubernetes.Interface
65+
log logger.Logger
66+
forceDeletePvc bool
6767
}
6868
)
6969

70+
var (
71+
errNotValidType = errors.New("not a valid type")
72+
kubeDecode = scheme.Codecs.UniversalDeserializer().Decode
73+
removeFinalizersJsonPatch = []byte(`[{ "op": "remove", "path": "/metadata/finalizers" }]`)
74+
)
75+
7076
// NewInCluster build Kubernetes API based on local in cluster runtime
71-
func NewInCluster(log logger.Logger, qps float32, burst int) (Kubernetes, error) {
77+
func NewInCluster(log logger.Logger, qps float32, burst int, forceDeletePvc bool) (Kubernetes, error) {
7278
client, err := buildKubeInCluster(qps, burst)
7379
return &kube{
74-
client: client,
75-
log: log,
80+
client: client,
81+
log: log,
82+
forceDeletePvc: forceDeletePvc,
7683
}, err
7784
}
7885

@@ -84,8 +91,9 @@ func New(opts Options) (Kubernetes, error) {
8491

8592
client, err := buildKubeClient(opts.Host, opts.Token, opts.Cert, opts.Insecure, opts.QPS, opts.Burst)
8693
return &kube{
87-
client: client,
88-
log: opts.Logger,
94+
client: client,
95+
log: opts.Logger,
96+
forceDeletePvc: opts.ForceDeletePvc,
8997
}, err
9098
}
9199

@@ -140,6 +148,13 @@ func (k kube) DeleteResource(ctx context.Context, opts DeleteOptions) error {
140148
if err != nil {
141149
return fmt.Errorf("failed deleting persistent volume claim \"%s\\%s\": %w", opts.Namespace, opts.Name, err)
142150
}
151+
152+
if k.forceDeletePvc {
153+
_, err := k.client.CoreV1().PersistentVolumeClaims(opts.Namespace).Patch(ctx, opts.Name, types.JSONPatchType, removeFinalizersJsonPatch, metav1.PatchOptions{})
154+
if err != nil {
155+
return fmt.Errorf("failed removing finalizers from PVC \"%s\\%s\": %w", opts.Namespace, opts.Name, err)
156+
}
157+
}
143158
case task.TypeDeletePod:
144159
err := k.client.CoreV1().Pods(opts.Namespace).Delete(ctx, opts.Name, metav1.DeleteOptions{})
145160
if err != nil {

venona/pkg/metrics/metrics.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ const (
3030
)
3131

3232
var (
33-
retryRegex = regexp.MustCompile(`engine-.*-retry-(\d+)$`)
33+
engineRegex = regexp.MustCompile(`engine-.*$`)
34+
retryRegex = regexp.MustCompile(`engine-.*-retry-(\d+)$`)
3435

3536
agentTasks = prometheus.NewCounter(prometheus.CounterOpts{
3637
Namespace: runnerNamespace,
@@ -120,7 +121,12 @@ func UpdateQueueSizes(agentTasksValue, wfTasksValue, queue int) {
120121
}
121122

122123
func IncWorkflowRetries(podName string) {
123-
matches := retryRegex.FindStringSubmatch(podName)
124+
matches := engineRegex.FindStringSubmatch(podName)
125+
if matches == nil {
126+
return
127+
}
128+
129+
matches = retryRegex.FindStringSubmatch(podName)
124130
retry := "0"
125131
if len(matches) == 2 {
126132
retry = matches[1]

venonactl/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.10.0
1+
1.10.1

0 commit comments

Comments
 (0)