@@ -13,6 +13,7 @@ import (
13
13
k8serrors "k8s.io/apimachinery/pkg/api/errors"
14
14
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
15
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"
16
+ runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
16
17
)
17
18
18
19
// KubeletConfigBuilder provides struct for KubeletConfig Object which contains connection to cluster
@@ -23,7 +24,7 @@ type KubeletConfigBuilder struct {
23
24
// Created KubeletConfig object on the cluster.
24
25
Object * mcv1.KubeletConfig
25
26
// api client to interact with the cluster.
26
- apiClient * clients. Settings
27
+ apiClient runtimeclient. Client
27
28
// errorMsg is processed before KubeletConfig object is created.
28
29
errorMsg string
29
30
}
@@ -36,6 +37,19 @@ type AdditionalOptions func(builder *KubeletConfigBuilder) (*KubeletConfigBuilde
36
37
func NewKubeletConfigBuilder (apiClient * clients.Settings , name string ) * KubeletConfigBuilder {
37
38
glog .V (100 ).Infof ("Initializing new KubeletConfigBuilder structure with the name: %s" , name )
38
39
40
+ if apiClient == nil {
41
+ glog .V (100 ).Info ("The apiClient of the KubeletConfig is nil" )
42
+
43
+ return nil
44
+ }
45
+
46
+ err := apiClient .AttachScheme (mcv1 .Install )
47
+ if err != nil {
48
+ glog .V (100 ).Info ("Failed to add machineconfig v1 scheme to client schemes" )
49
+
50
+ return nil
51
+ }
52
+
39
53
builder := KubeletConfigBuilder {
40
54
apiClient : apiClient ,
41
55
Definition : & mcv1.KubeletConfig {
@@ -48,7 +62,7 @@ func NewKubeletConfigBuilder(apiClient *clients.Settings, name string) *KubeletC
48
62
if name == "" {
49
63
glog .V (100 ).Infof ("The name of the KubeletConfig is empty" )
50
64
51
- builder .errorMsg = "KubeletConfig 'name' cannot be empty"
65
+ builder .errorMsg = "kubeletconfig 'name' cannot be empty"
52
66
}
53
67
54
68
return & builder
@@ -58,6 +72,19 @@ func NewKubeletConfigBuilder(apiClient *clients.Settings, name string) *KubeletC
58
72
func PullKubeletConfig (apiClient * clients.Settings , name string ) (* KubeletConfigBuilder , error ) {
59
73
glog .V (100 ).Infof ("Pulling existing kubeletconfig name %s from cluster" , name )
60
74
75
+ if apiClient == nil {
76
+ glog .V (100 ).Info ("The apiClient of the KubeletConfig is nil" )
77
+
78
+ return nil , fmt .Errorf ("kubeletconfig 'apiClient' cannot be nil" )
79
+ }
80
+
81
+ err := apiClient .AttachScheme (mcv1 .Install )
82
+ if err != nil {
83
+ glog .V (100 ).Info ("Failed to add machineconfig v1 scheme to client schemes" )
84
+
85
+ return nil , err
86
+ }
87
+
61
88
builder := KubeletConfigBuilder {
62
89
apiClient : apiClient ,
63
90
Definition : & mcv1.KubeletConfig {
@@ -70,7 +97,7 @@ func PullKubeletConfig(apiClient *clients.Settings, name string) (*KubeletConfig
70
97
if name == "" {
71
98
glog .V (100 ).Infof ("The name of the kubeletconfig is empty" )
72
99
73
- builder . errorMsg = "kubeletconfig 'name' cannot be empty"
100
+ return nil , fmt . Errorf ( "kubeletconfig 'name' cannot be empty" )
74
101
}
75
102
76
103
if ! builder .Exists () {
@@ -82,6 +109,26 @@ func PullKubeletConfig(apiClient *clients.Settings, name string) (*KubeletConfig
82
109
return & builder , nil
83
110
}
84
111
112
+ // Get returns the KubeletConfig object if found.
113
+ func (builder * KubeletConfigBuilder ) Get () (* mcv1.KubeletConfig , error ) {
114
+ if valid , err := builder .validate (); ! valid {
115
+ return nil , err
116
+ }
117
+
118
+ glog .V (100 ).Infof ("Getting KubeletConfig object %s" , builder .Definition .Name )
119
+
120
+ kubeletConfig := & mcv1.KubeletConfig {}
121
+ err := builder .apiClient .Get (context .TODO (), runtimeclient.ObjectKey {Name : builder .Definition .Name }, kubeletConfig )
122
+
123
+ if err != nil {
124
+ glog .V (100 ).Infof ("KubeletConfig object %s does not exist" , builder .Definition .Name )
125
+
126
+ return nil , err
127
+ }
128
+
129
+ return kubeletConfig , nil
130
+ }
131
+
85
132
// Create generates a kubeletconfig in the cluster and stores the created object in struct.
86
133
func (builder * KubeletConfigBuilder ) Create () (* KubeletConfigBuilder , error ) {
87
134
if valid , err := builder .validate (); ! valid {
@@ -92,8 +139,10 @@ func (builder *KubeletConfigBuilder) Create() (*KubeletConfigBuilder, error) {
92
139
93
140
var err error
94
141
if ! builder .Exists () {
95
- builder .Object , err = builder .apiClient .KubeletConfigs ().Create (
96
- context .TODO (), builder .Definition , metav1.CreateOptions {})
142
+ err := builder .apiClient .Create (context .TODO (), builder .Definition )
143
+ if err == nil {
144
+ builder .Object = builder .Definition
145
+ }
97
146
}
98
147
99
148
return builder , err
@@ -108,12 +157,14 @@ func (builder *KubeletConfigBuilder) Delete() error {
108
157
glog .V (100 ).Infof ("Deleting the kubeletconfig object %s" , builder .Definition .Name )
109
158
110
159
if ! builder .Exists () {
111
- return fmt .Errorf ("kubeletconfig cannot be deleted because it does not exist" )
112
- }
160
+ glog .V (100 ).Infof ("KubeletConfig %s cannot be deleted because it does not exist" , builder .Definition .Name )
161
+
162
+ builder .Object = nil
113
163
114
- err := builder . apiClient . KubeletConfigs (). Delete (
115
- context . TODO (), builder . Object . Name , metav1. DeleteOptions {})
164
+ return nil
165
+ }
116
166
167
+ err := builder .apiClient .Delete (context .TODO (), builder .Object )
117
168
if err != nil {
118
169
return fmt .Errorf ("cannot delete kubeletconfig: %w" , err )
119
170
}
@@ -132,8 +183,7 @@ func (builder *KubeletConfigBuilder) Exists() bool {
132
183
glog .V (100 ).Infof ("Checking if the kubeletconfig object %s exists" , builder .Definition .Name )
133
184
134
185
var err error
135
- builder .Object , err = builder .apiClient .KubeletConfigs ().Get (
136
- context .TODO (), builder .Definition .Name , metav1.GetOptions {})
186
+ builder .Object , err = builder .Get ()
137
187
138
188
return err == nil || ! k8serrors .IsNotFound (err )
139
189
}
0 commit comments