-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathversion.go
48 lines (38 loc) · 952 Bytes
/
version.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
//go:generate mockgen -destination ./mock/version.go . Interface
package version
import (
"fmt"
"regexp"
"strconv"
"k8s.io/apimachinery/pkg/version"
"k8s.io/client-go/kubernetes"
)
type Interface interface {
Full() string
MinorInt() int
}
func Get(clientset kubernetes.Interface) (Interface, error) {
cs, ok := clientset.(*kubernetes.Clientset)
if !ok {
return nil, fmt.Errorf("expected clientset to be of type *kubernetes.Clientset but was %T", clientset)
}
sv, err := cs.ServerVersion()
if err != nil {
return nil, fmt.Errorf("getting server version: %w", err)
}
m, err := strconv.Atoi(regexp.MustCompile(`^(\d+)`).FindString(sv.Minor))
if err != nil {
return nil, fmt.Errorf("parsing minor version: %w", err)
}
return &Version{v: sv, m: m}, nil
}
type Version struct {
v *version.Info
m int
}
func (v *Version) Full() string {
return v.v.Major + "." + v.v.Minor
}
func (v *Version) MinorInt() int {
return v.m
}