Skip to content

Commit 2cfd6b2

Browse files
authored
mco: switched kubelet config to runtime client, tests (rh-ecosystem-edge#616)
1 parent b95771e commit 2cfd6b2

File tree

3 files changed

+457
-11
lines changed

3 files changed

+457
-11
lines changed

pkg/mco/kubeletconfig.go

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
k8serrors "k8s.io/apimachinery/pkg/api/errors"
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"
16+
runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
1617
)
1718

1819
// KubeletConfigBuilder provides struct for KubeletConfig Object which contains connection to cluster
@@ -23,7 +24,7 @@ type KubeletConfigBuilder struct {
2324
// Created KubeletConfig object on the cluster.
2425
Object *mcv1.KubeletConfig
2526
// api client to interact with the cluster.
26-
apiClient *clients.Settings
27+
apiClient runtimeclient.Client
2728
// errorMsg is processed before KubeletConfig object is created.
2829
errorMsg string
2930
}
@@ -36,6 +37,19 @@ type AdditionalOptions func(builder *KubeletConfigBuilder) (*KubeletConfigBuilde
3637
func NewKubeletConfigBuilder(apiClient *clients.Settings, name string) *KubeletConfigBuilder {
3738
glog.V(100).Infof("Initializing new KubeletConfigBuilder structure with the name: %s", name)
3839

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+
3953
builder := KubeletConfigBuilder{
4054
apiClient: apiClient,
4155
Definition: &mcv1.KubeletConfig{
@@ -48,7 +62,7 @@ func NewKubeletConfigBuilder(apiClient *clients.Settings, name string) *KubeletC
4862
if name == "" {
4963
glog.V(100).Infof("The name of the KubeletConfig is empty")
5064

51-
builder.errorMsg = "KubeletConfig 'name' cannot be empty"
65+
builder.errorMsg = "kubeletconfig 'name' cannot be empty"
5266
}
5367

5468
return &builder
@@ -58,6 +72,19 @@ func NewKubeletConfigBuilder(apiClient *clients.Settings, name string) *KubeletC
5872
func PullKubeletConfig(apiClient *clients.Settings, name string) (*KubeletConfigBuilder, error) {
5973
glog.V(100).Infof("Pulling existing kubeletconfig name %s from cluster", name)
6074

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+
6188
builder := KubeletConfigBuilder{
6289
apiClient: apiClient,
6390
Definition: &mcv1.KubeletConfig{
@@ -70,7 +97,7 @@ func PullKubeletConfig(apiClient *clients.Settings, name string) (*KubeletConfig
7097
if name == "" {
7198
glog.V(100).Infof("The name of the kubeletconfig is empty")
7299

73-
builder.errorMsg = "kubeletconfig 'name' cannot be empty"
100+
return nil, fmt.Errorf("kubeletconfig 'name' cannot be empty")
74101
}
75102

76103
if !builder.Exists() {
@@ -82,6 +109,26 @@ func PullKubeletConfig(apiClient *clients.Settings, name string) (*KubeletConfig
82109
return &builder, nil
83110
}
84111

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+
85132
// Create generates a kubeletconfig in the cluster and stores the created object in struct.
86133
func (builder *KubeletConfigBuilder) Create() (*KubeletConfigBuilder, error) {
87134
if valid, err := builder.validate(); !valid {
@@ -92,8 +139,10 @@ func (builder *KubeletConfigBuilder) Create() (*KubeletConfigBuilder, error) {
92139

93140
var err error
94141
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+
}
97146
}
98147

99148
return builder, err
@@ -108,12 +157,14 @@ func (builder *KubeletConfigBuilder) Delete() error {
108157
glog.V(100).Infof("Deleting the kubeletconfig object %s", builder.Definition.Name)
109158

110159
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
113163

114-
err := builder.apiClient.KubeletConfigs().Delete(
115-
context.TODO(), builder.Object.Name, metav1.DeleteOptions{})
164+
return nil
165+
}
116166

167+
err := builder.apiClient.Delete(context.TODO(), builder.Object)
117168
if err != nil {
118169
return fmt.Errorf("cannot delete kubeletconfig: %w", err)
119170
}
@@ -132,8 +183,7 @@ func (builder *KubeletConfigBuilder) Exists() bool {
132183
glog.V(100).Infof("Checking if the kubeletconfig object %s exists", builder.Definition.Name)
133184

134185
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()
137187

138188
return err == nil || !k8serrors.IsNotFound(err)
139189
}

0 commit comments

Comments
 (0)