forked from openshift/origin
-
Notifications
You must be signed in to change notification settings - Fork 1
/
deletion.go
73 lines (63 loc) · 2.17 KB
/
deletion.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
/*
Copyright 2017 The Kubernetes Authors.
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 meta
import (
"errors"
"time"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
var (
// ErrNoDeletionTimestamp is the error returned by GetDeletionTimestamp when there is no
// deletion timestamp set on the object
ErrNoDeletionTimestamp = errors.New("no deletion timestamp set")
)
// DeletionTimestampExists returns true if a deletion timestamp exists on obj, or a non-nil
// error if that couldn't be reliably determined
func DeletionTimestampExists(obj runtime.Object) (bool, error) {
_, err := GetDeletionTimestamp(obj)
if err == ErrNoDeletionTimestamp {
// if GetDeletionTimestamp reported that no deletion timestamp exists, return false
// and no error
return false, nil
}
if err != nil {
// otherwise, if GetDeletionTimestamp returned an unknown error, return the error
return false, err
}
return true, nil
}
// GetDeletionTimestamp returns the deletion timestamp on obj, or a non-nil error if there was
// an error getting it or it isn't set. Returns ErrNoDeletionTimestamp if there was none set
func GetDeletionTimestamp(obj runtime.Object) (*metav1.Time, error) {
accessor, err := meta.Accessor(obj)
if err != nil {
return nil, err
}
t := accessor.GetDeletionTimestamp()
if t == nil {
return nil, ErrNoDeletionTimestamp
}
return t, nil
}
// SetDeletionTimestamp sets the deletion timestamp on obj to t
func SetDeletionTimestamp(obj runtime.Object, t time.Time) error {
accessor, err := meta.Accessor(obj)
if err != nil {
return err
}
metaTime := metav1.NewTime(t)
accessor.SetDeletionTimestamp(&metaTime)
return nil
}