17
17
import os
18
18
from typing import Any , List
19
19
20
+ import kubernetes
20
21
import yaml
21
22
from deckhouse import hook
22
23
23
- import kubernetes
24
-
25
24
config = """
26
25
configVersion: v1
27
26
onStartup: 1
@@ -98,30 +97,20 @@ def main(ctx: hook.Context):
98
97
return
99
98
100
99
print (f"{ migrate_script } some lvmvolumegroup resource were found, tries to create LvmVolumeGroupBackup CRD" )
101
- for dirpath , _ , filenames in os .walk (top = find_crds_root (__file__ )):
102
- for filename in filenames :
103
- if filename == 'lvmvolumegroupbackup.yaml' :
104
- crd_path = os .path .join (dirpath , filename )
105
- with open (crd_path , "r" , encoding = "utf-8" ) as f :
106
- for manifest in yaml .safe_load_all (f ):
107
- if manifest is None :
108
- continue
109
- try :
110
- ctx .kubernetes .create_or_update (manifest )
111
- except Exception as e :
112
- print (f"{ migrate_script } unable to create LvmVolumeGroupBackup CRD, error: { e } " )
113
- raise e
114
- break
100
+ create_new_lvg_crd (ctx )
115
101
print (f"{ migrate_script } successfully created LvmVolumeGroupBackup CRD" )
116
102
117
103
print (f"{ migrate_script } starts to create backups and add 'kubernetes.io/hostname' to store the node name" )
118
104
for lvg in lvg_list .get ('items' , []):
119
105
lvg_backup = copy .deepcopy (lvg )
120
- lvg_backup ['kind' ] = 'LvmVolumeGroupBackup'
106
+ # lvg_backup['kind'] = 'LvmVolumeGroupBackup'
121
107
lvg_backup ['metadata' ]['labels' ]['kubernetes.io/hostname' ] = lvg_backup ['status' ]['nodes' ][0 ]['name' ]
122
108
lvg_backup ['metadata' ]['labels' ][migration_completed_label ] = 'false'
123
109
try :
124
- ctx .kubernetes .create_or_update (lvg_backup )
110
+ custom_api .create_cluster_custom_object (group = group ,
111
+ version = version ,
112
+ plural = 'lvmvolumegroupbackups' ,
113
+ body = lvg_backup )
125
114
except Exception as e :
126
115
print (f"{ migrate_script } unable to create backup, error: { e } " )
127
116
raise e
@@ -132,7 +121,11 @@ def main(ctx: hook.Context):
132
121
for lvg in lvg_list .get ('items' , []):
133
122
del lvg ['metadata' ]['finalizers' ]
134
123
try :
135
- ctx .kubernetes .create_or_update (lvg )
124
+ custom_api .patch_cluster_custom_object (group = group ,
125
+ plural = 'lvmvolumegroups' ,
126
+ version = version ,
127
+ name = lvg ['metadata' ]['name' ],
128
+ body = lvg )
136
129
except Exception as e :
137
130
print (f"{ migrate_script } unable to remove finalizers from LvmVolumeGroups, error: { e } " )
138
131
raise e
@@ -142,6 +135,10 @@ def main(ctx: hook.Context):
142
135
print (f"{ migrate_script } tries to delete LvmVolumeGroup CRD" )
143
136
try :
144
137
api_extenstion .delete_custom_resource_definition (crd_name )
138
+ except kubernetes .client .exceptions .ApiException as e :
139
+ if e .status == '404' :
140
+ print (f"{ migrate_script } the LvmVolumeGroup CRD has been already deleted" )
141
+ pass
145
142
except Exception as e :
146
143
print (f"{ migrate_script } unable to delete LvmVolumeGroup CRD" )
147
144
raise e
@@ -153,9 +150,9 @@ def main(ctx: hook.Context):
153
150
154
151
print (f"{ migrate_script } tries to get LvmVolumeGroupBackups" )
155
152
try :
156
- lvg_backup_list : Any = kubernetes . client . CustomObjectsApi () .list_cluster_custom_object (group = group ,
157
- plural = 'lvmvolumegroupbackups' ,
158
- version = version )
153
+ lvg_backup_list : Any = custom_api .list_cluster_custom_object (group = group ,
154
+ plural = 'lvmvolumegroupbackups' ,
155
+ version = version )
159
156
except Exception as e :
160
157
print (f"{ migrate_script } unable to list lvmvolumegroupbackups, error: { e } " )
161
158
raise e
@@ -165,14 +162,21 @@ def main(ctx: hook.Context):
165
162
for lvg_backup in lvg_backup_list .get ('items' , []):
166
163
lvg = configure_new_lvg (lvg_backup )
167
164
try :
168
- ctx .kubernetes .create (lvg )
165
+ custom_api .create_cluster_custom_object (group = group ,
166
+ version = version ,
167
+ plural = 'lvmvolumegroups' ,
168
+ body = lvg )
169
169
print (f"{ migrate_script } LVMVolumeGroup { lvg ['metadata' ]['name' ]} was created" )
170
170
except Exception as e :
171
171
print (f"{ migrate_script } unable to create LVMVolumeGroup { lvg ['metadata' ]['name' ]} , error: { e } " )
172
172
raise e
173
173
try :
174
174
lvg_backup ['metadata' ]['labels' ][migration_completed_label ] = 'true'
175
- ctx .kubernetes .create_or_update (lvg_backup )
175
+ custom_api .patch_cluster_custom_object (group = group ,
176
+ version = version ,
177
+ plural = 'lvmvolumegroupbackups' ,
178
+ name = lvg_backup ['metadata' ]['name' ],
179
+ body = lvg_backup )
176
180
print (
177
181
f"{ migrate_script } the LVMVolumeGroupBackup label { migration_completed_label } was updated to true" )
178
182
except Exception as e :
@@ -188,9 +192,9 @@ def main(ctx: hook.Context):
188
192
189
193
print (f"{ migrate_script } tries to list LVMVolumeGroup resources" )
190
194
try :
191
- lvg_list : Any = kubernetes . client . CustomObjectsApi () .list_cluster_custom_object (group = group ,
192
- plural = 'lvmvolumegroups' ,
193
- version = version )
195
+ lvg_list : Any = custom_api .list_cluster_custom_object (group = group ,
196
+ plural = 'lvmvolumegroups' ,
197
+ version = version )
194
198
except Exception as e :
195
199
print (f"{ migrate_script } unable to list LVMVolumeGroup resources" )
196
200
raise e
@@ -202,9 +206,9 @@ def main(ctx: hook.Context):
202
206
203
207
print (f"{ migrate_script } tries to list lvmvolumegroupbackups" )
204
208
try :
205
- lvg_backup_list : Any = kubernetes . client . CustomObjectsApi () .list_cluster_custom_object (group = group ,
206
- plural = 'lvmvolumegroupbackups' ,
207
- version = version )
209
+ lvg_backup_list : Any = custom_api .list_cluster_custom_object (group = group ,
210
+ plural = 'lvmvolumegroupbackups' ,
211
+ version = version )
208
212
except Exception as e :
209
213
print (f"{ migrate_script } unable to list lvmvolumegroupbackups, error: { e } " )
210
214
raise e
@@ -222,7 +226,11 @@ def main(ctx: hook.Context):
222
226
print (f"{ migrate_script } tries to create LVMVolumeGroup { lvg ['metadata' ]['name' ]} " )
223
227
lvg = configure_new_lvg (backup )
224
228
try :
225
- ctx .kubernetes .create_or_update (lvg )
229
+ custom_api .replace_cluster_custom_object (group = group ,
230
+ plural = 'lvmvolumegroups' ,
231
+ version = version ,
232
+ name = lvg ['metadata' ]['name' ],
233
+ body = lvg )
226
234
except Exception as e :
227
235
print (f"{ migrate_script } unable to create LVMVolumeGroup { lvg ['metadata' ]['name' ]} , error: { e } " )
228
236
raise e
@@ -232,13 +240,18 @@ def main(ctx: hook.Context):
232
240
233
241
print (f"{ migrate_script } tries to update LvmVolumeGroupBackup { backup ['metadata' ]['name' ]} " )
234
242
try :
235
- ctx .kubernetes .create_or_update (backup )
243
+ custom_api .patch_cluster_custom_object (group = group ,
244
+ version = version ,
245
+ plural = 'lvmvolumegroupbackups' ,
246
+ name = backup ['metadata' ]['name' ],
247
+ body = backup )
248
+ print (
249
+ f"{ migrate_script } the LVMVolumeGroupBackup { backup ['metadata' ]['name' ]} { migration_completed_label } was updated to true" )
236
250
except Exception as e :
237
251
print (
238
- f"{ migrate_script } unable to create LVMVolumeGroupBackup { backup ['metadata' ]['name' ]} , error: { e } " )
252
+ f"{ migrate_script } unable to update LVMVolumeGroupBackup { backup ['metadata' ]['name' ]} , error: { e } " )
239
253
raise e
240
- print (
241
- f"{ migrate_script } the LVMVolumeGroupBackup { backup ['metadata' ]['name' ]} { migration_completed_label } was updated to true" )
254
+
242
255
print (f"{ migrate_script } every LVMVolumeGroup resources has been migrated" )
243
256
return
244
257
### End of LVMVolumeGroup CRD flow
@@ -254,9 +267,9 @@ def main(ctx: hook.Context):
254
267
255
268
print (f"{ migrate_script } tries to list lvmvolumegroupbackups" )
256
269
try :
257
- lvg_backup_list : Any = kubernetes . client . CustomObjectsApi () .list_cluster_custom_object (group = group ,
258
- plural = 'lvmvolumegroupbackups' ,
259
- version = version )
270
+ lvg_backup_list : Any = custom_api .list_cluster_custom_object (group = group ,
271
+ plural = 'lvmvolumegroupbackups' ,
272
+ version = version )
260
273
except Exception as e :
261
274
print (f"{ migrate_script } unable to list lvmvolumegroupbackups, error: { e } " )
262
275
raise e
@@ -270,7 +283,11 @@ def main(ctx: hook.Context):
270
283
print (f"{ migrate_script } tries to create LVMVolumeGroup { lvg ['metadata' ]['name' ]} " )
271
284
lvg = configure_new_lvg (backup )
272
285
try :
273
- ctx .kubernetes .create_or_update (lvg )
286
+ custom_api .replace_cluster_custom_object (group = group ,
287
+ version = version ,
288
+ plural = 'lvmvolumegroups' ,
289
+ name = lvg ['metadata' ]['name' ],
290
+ body = lvg )
274
291
except Exception as e :
275
292
print (f"{ migrate_script } unable to create LVMVolumeGroup { lvg ['metadata' ]['name' ]} , error: { e } " )
276
293
raise e
@@ -280,7 +297,11 @@ def main(ctx: hook.Context):
280
297
281
298
print (f"{ migrate_script } tries to update LvmVolumeGroupBackup { backup ['metadata' ]['name' ]} " )
282
299
try :
283
- ctx .kubernetes .create_or_update (backup )
300
+ custom_api .patch_cluster_custom_object (group = group ,
301
+ version = version ,
302
+ plural = 'lvmvolumegroupbackups' ,
303
+ name = backup ['metadata' ]['name' ],
304
+ body = backup )
284
305
except Exception as e :
285
306
print (
286
307
f"{ migrate_script } unable to create LVMVolumeGroupBackup { backup ['metadata' ]['name' ]} , error: { e } " )
0 commit comments