@@ -8,7 +8,12 @@ import (
8
8
9
9
"github.com/go-logr/logr"
10
10
"github.com/pkg/errors"
11
+ corev1 "k8s.io/api/core/v1"
12
+ k8serrors "k8s.io/apimachinery/pkg/api/errors"
13
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14
+ "k8s.io/apimachinery/pkg/types"
11
15
clientset "k8s.io/client-go/kubernetes"
16
+ bootstrapapi "k8s.io/cluster-bootstrap/token/api"
12
17
"sigs.k8s.io/controller-runtime/pkg/client"
13
18
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
14
19
@@ -81,6 +86,89 @@ func GetKubeadmManifestDeps(ctx context.Context, client client.Client, tenantCon
81
86
return tenantClient , config , nil
82
87
}
83
88
89
+ func KubeadmBootstrap (ctx context.Context , r KubeadmPhaseResource , logger logr.Logger , tenantControlPlane * kamajiv1alpha1.TenantControlPlane ) (controllerutil.OperationResult , error ) {
90
+ var checksum string
91
+
92
+ tntClient , err := utilities .GetTenantClient (ctx , r .GetClient (), tenantControlPlane )
93
+ if err != nil {
94
+ logger .Error (err , "cannot generate tenant client" )
95
+
96
+ return controllerutil .OperationResultNone , err
97
+ }
98
+
99
+ var clusterInfo corev1.ConfigMap
100
+ if cmErr := tntClient .Get (ctx , types.NamespacedName {Name : bootstrapapi .ConfigMapClusterInfo , Namespace : metav1 .NamespacePublic }, & clusterInfo ); cmErr != nil {
101
+ if ! k8serrors .IsNotFound (cmErr ) {
102
+ logger .Error (cmErr , "cannot retrieve cluster-info ConfigMap" )
103
+ }
104
+ }
105
+
106
+ status , err := r .GetStatus (tenantControlPlane )
107
+ if err != nil {
108
+ logger .Error (err , "cannot retrieve status" )
109
+
110
+ return controllerutil .OperationResultNone , err
111
+ }
112
+
113
+ if status != nil {
114
+ checksum = utilities .CalculateMapChecksum (clusterInfo .Data )
115
+
116
+ if checksum == status .GetChecksum () {
117
+ r .SetKubeadmConfigChecksum (checksum )
118
+
119
+ return controllerutil .OperationResultNone , nil
120
+ }
121
+ }
122
+
123
+ kubeconfig , err := utilities .GetTenantKubeconfig (ctx , r .GetClient (), tenantControlPlane )
124
+ if err != nil {
125
+ logger .Error (err , "cannot retrieve kubeconfig configuration" )
126
+
127
+ return controllerutil .OperationResultNone , err
128
+ }
129
+
130
+ config , err := getStoredKubeadmConfiguration (ctx , r .GetClient (), r .GetTmpDirectory (), tenantControlPlane )
131
+ if err != nil {
132
+ logger .Error (err , "cannot retrieve kubeadm configuration" )
133
+
134
+ return controllerutil .OperationResultNone , err
135
+ }
136
+
137
+ config .Kubeconfig = * kubeconfig
138
+
139
+ fun , err := r .GetKubeadmFunction (ctx , tenantControlPlane )
140
+ if err != nil {
141
+ logger .Error (err , "cannot retrieve kubeadm function" )
142
+
143
+ return controllerutil .OperationResultNone , err
144
+ }
145
+
146
+ client , err := utilities .GetTenantClientSet (ctx , r .GetClient (), tenantControlPlane )
147
+ if err != nil {
148
+ logger .Error (err , "cannot generate tenant client" )
149
+
150
+ return controllerutil .OperationResultNone , err
151
+ }
152
+
153
+ if _ , err = fun (client , config ); err != nil {
154
+ logger .Error (err , "kubeadm function failed" )
155
+
156
+ return controllerutil .OperationResultNone , err
157
+ }
158
+
159
+ if status == nil {
160
+ return controllerutil .OperationResultNone , nil
161
+ }
162
+
163
+ r .SetKubeadmConfigChecksum (checksum )
164
+
165
+ if checksum == "" {
166
+ return controllerutil .OperationResultCreated , nil
167
+ }
168
+
169
+ return controllerutil .OperationResultUpdated , nil
170
+ }
171
+
84
172
func KubeadmPhaseCreate (ctx context.Context , r KubeadmPhaseResource , logger logr.Logger , tenantControlPlane * kamajiv1alpha1.TenantControlPlane ) (controllerutil.OperationResult , error ) {
85
173
config , err := getStoredKubeadmConfiguration (ctx , r .GetClient (), r .GetTmpDirectory (), tenantControlPlane )
86
174
if err != nil {
0 commit comments