29
29
from nuvolaris .user_config import UserConfig
30
30
from nuvolaris .user_metadata import UserMetadata
31
31
32
+
32
33
def patchEntries (data : dict ):
33
- tplp = ["milvus-cfg-base.yaml" ,"milvus.yaml" ]
34
+ tplp = ["milvus-cfg-base.yaml" , "milvus.yaml" ]
34
35
35
- if (data ['affinity' ] or data ['tolerations' ]):
36
+ if (data ['affinity' ] or data ['tolerations' ]):
36
37
tplp .append ("affinity-tolerance-dep-core-attach.yaml" )
37
38
38
39
kust = kus .patchTemplates ("milvus" , tplp , data )
39
- kust += kus .patchGenericEntry ("Secret" ,"nuvolaris-milvus-etcd-secret" ,"/data/username" ,util .b64_encode (data ['milvus_etcd_username' ]))
40
- kust += kus .patchGenericEntry ("Secret" ,"nuvolaris-milvus-etcd-secret" ,"/data/password" ,util .b64_encode (data ['milvus_etcd_password' ]))
41
-
42
- kust += kus .patchGenericEntry ("Secret" ,"nuvolaris-milvus-s3-secret" ,"/stringData/accesskey" ,data ['milvus_s3_username' ])
43
- kust += kus .patchGenericEntry ("Secret" ,"nuvolaris-milvus-s3-secret" ,"/stringData/secretkey" ,data ['milvus_s3_password' ])
44
-
45
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus" ,"/spec/storageClassName" ,data ['storageClass' ])
46
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus" ,"/spec/resources/requests/storage" ,f"{ data ['size' ]} Gi" )
47
-
48
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus-zookeeper" ,"/spec/storageClassName" ,data ['storageClass' ])
49
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus-zookeeper" ,"/spec/resources/requests/storage" ,f"{ data ['zookeeper_size' ]} Gi" )
40
+ kust += kus .patchGenericEntry ("Secret" , "nuvolaris-milvus-etcd-secret" , "/data/username" ,
41
+ util .b64_encode (data ['milvus_etcd_username' ]))
42
+ kust += kus .patchGenericEntry ("Secret" , "nuvolaris-milvus-etcd-secret" , "/data/password" ,
43
+ util .b64_encode (data ['milvus_etcd_password' ]))
44
+
45
+ kust += kus .patchGenericEntry ("Secret" , "nuvolaris-milvus-s3-secret" , "/stringData/accesskey" ,
46
+ data ['milvus_s3_username' ])
47
+ kust += kus .patchGenericEntry ("Secret" , "nuvolaris-milvus-s3-secret" , "/stringData/secretkey" ,
48
+ data ['milvus_s3_password' ])
49
+
50
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus" , "/spec/storageClassName" ,
51
+ data ['storageClass' ])
52
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus" , "/spec/resources/requests/storage" ,
53
+ f"{ data ['size' ]} Gi" )
54
+
55
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus-zookeeper" , "/spec/storageClassName" ,
56
+ data ['storageClass' ])
57
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus-zookeeper" ,
58
+ "/spec/resources/requests/storage" , f"{ data ['zookeeper_size' ]} Gi" )
59
+
60
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus-bookie-journal" , "/spec/storageClassName" ,
61
+ data ['storageClass' ])
62
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus-bookie-journal" ,
63
+ "/spec/resources/requests/storage" , f"{ data ['bookie_journal_size' ]} Gi" )
64
+
65
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus-bookie-ledgers" , "/spec/storageClassName" ,
66
+ data ['storageClass' ])
67
+ kust += kus .patchGenericEntry ("PersistentVolumeClaim" , "nuvolaris-milvus-bookie-ledgers" ,
68
+ "/spec/resources/requests/storage" , f"{ data ['bookie_ledgers_size' ]} Gi" )
69
+ return kust
50
70
51
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus-bookie-journal" ,"/spec/storageClassName" ,data ['storageClass' ])
52
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus-bookie-journal" ,"/spec/resources/requests/storage" ,f"{ data ['bookie_journal_size' ]} Gi" )
53
-
54
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus-bookie-ledgers" ,"/spec/storageClassName" ,data ['storageClass' ])
55
- kust += kus .patchGenericEntry ("PersistentVolumeClaim" ,"nuvolaris-milvus-bookie-ledgers" ,"/spec/resources/requests/storage" ,f"{ data ['bookie_ledgers_size' ]} Gi" )
56
- return kust
57
71
58
72
def create (owner = None ):
59
73
"""
60
74
Deploys the milvus vector db in standalone mode.
61
75
"""
62
- data = util .get_milvus_config_data ()
63
- res = create_milvus_accounts (data )
76
+ data = util .get_milvus_config_data ()
77
+ res = create_milvus_accounts (data )
64
78
65
79
if res :
66
80
logging .info ("*** creating a milvus standalone instance" )
@@ -72,153 +86,171 @@ def create(owner=None):
72
86
else :
73
87
cfg .put ("state.milvus.spec" , mspec )
74
88
75
- res = kube .apply (mspec )
76
- util .wait_for_pod_ready (r"{.items[?(@.metadata.labels.app\.kubernetes\.io\/instance == 'nuvolaris-milvus')].metadata.name}" )
77
- res = create_default_milvus_database (data )
89
+ kube .apply (mspec )
90
+ util .wait_for_pod_ready (
91
+ r"{.items[?(@.metadata.labels.app\.kubernetes\.io\/instance == 'nuvolaris-milvus')].metadata.name}" )
92
+ res = create_default_milvus_database (data )
78
93
logging .info ("*** created a milvus standalone instance" )
79
94
95
+
80
96
return res
81
97
82
- def create_milvus_accounts (data :dict ):
98
+
99
+ def create_milvus_accounts (data : dict ):
83
100
""""
84
101
Creates technical accounts for ETCD and MINIO
85
102
"""
86
- try :
103
+ try :
87
104
# currently we use the ETCD root password, so we skip the ETCD user creation.
88
- #res = util.check(etcd.create_etcd_user(data['milvus_etcd_username'],data['milvus_etcd_password'],data['milvus_etcd_prefix']),"create_etcd_milvus_user",True)
105
+ # res = util.check(etcd.create_etcd_user(data['milvus_etcd_username'],data['milvus_etcd_password'],data['milvus_etcd_prefix']),"create_etcd_milvus_user",True)
89
106
90
107
minioClient = mutil .MinioClient ()
91
108
bucket_policy_names = []
92
109
bucket_policy_names .append (f"{ data ['milvus_bucket_name' ]} /*" )
93
110
94
- res = util .check (minioClient .add_user (data ["milvus_s3_username" ], data ["milvus_s3_password" ]),"create_milvus_s3_user" ,True )
95
- res = util .check (minioClient .make_bucket (data ["milvus_bucket_name" ]),"create_milvus_s3_bucket" ,res )
96
- return util .check (minioClient .assign_rw_bucket_policy_to_user (data ["milvus_s3_username" ], bucket_policy_names ),"assign_milvus_s3_bucket_policy" ,res )
111
+ res = util .check (minioClient .add_user (data ["milvus_s3_username" ], data ["milvus_s3_password" ]),
112
+ "create_milvus_s3_user" , True )
113
+ res = util .check (minioClient .make_bucket (data ["milvus_bucket_name" ]), "create_milvus_s3_bucket" , res )
114
+ return util .check (minioClient .assign_rw_bucket_policy_to_user (data ["milvus_s3_username" ], bucket_policy_names ),
115
+ "assign_milvus_s3_bucket_policy" , res )
97
116
except Exception as ex :
98
- logging .error ("Could not create milvus ETCD and MINIO accounts" ,ex )
117
+ logging .error ("Could not create milvus ETCD and MINIO accounts" , ex )
99
118
return False
100
-
119
+
120
+
101
121
def create_default_milvus_database (data ):
102
122
"""
103
123
Creates nuvolaris MILVUS custom resources
104
124
"""
105
- logging .info ("*** configuring MILVUS database for nuvolaris" )
125
+ logging .info ("*** configuring MILVUS database for nuvolaris" )
106
126
adminClient = MilvusAdminClient ()
107
- res = adminClient .setup_user ("nuvolaris" , data ["nuvolaris_password" ],"nuvolaris" )
108
-
109
- if (res ):
127
+ res = adminClient .setup_user ("nuvolaris" , data ["nuvolaris_password" ], "nuvolaris" )
128
+
129
+ if (res ):
110
130
_annotate_nuv_milvus_metadata (data )
111
131
logging .info ("*** configured MILVUS database for nuvolaris" )
112
132
return True
113
-
133
+
114
134
return False
115
135
136
+
116
137
def _annotate_nuv_milvus_metadata (data ):
117
138
"""
118
139
annotate nuvolaris configmap with entries for MILVUS connectivity MILVUS_HOST, MILVUS_PORT, MILVUS_TOKEN, MILVUS_DB_NAME
119
140
this is becasue MINIO
120
- """
141
+ """
121
142
try :
122
- milvus_service = util .get_service (r"{.items[?(@.metadata.labels.app\.kubernetes\.io\/instance == 'nuvolaris-milvus')]}" )
123
- if (milvus_service ):
143
+ milvus_service = util .get_service (
144
+ r"{.items[?(@.metadata.labels.app\.kubernetes\.io\/instance == 'nuvolaris-milvus')]}" )
145
+ if (milvus_service ):
124
146
milvus_host = f"{ milvus_service ['metadata' ]['name' ]} .{ milvus_service ['metadata' ]['namespace' ]} .svc.cluster.local"
125
147
password = data ["nuvolaris_password" ]
126
-
148
+
127
149
openwhisk .annotate (f"milvus_host={ milvus_host } " )
128
150
openwhisk .annotate (f"milvus_token=nuvolaris:{ password } " )
129
151
openwhisk .annotate ("milvus_db_name=nuvolaris" )
130
152
131
153
ports = list (milvus_service ['spec' ]['ports' ])
132
154
for port in ports :
133
- if (port ['name' ]== 'milvus' ):
134
- openwhisk .annotate (f"milvus_port={ port ['port' ]} " )
155
+ if (port ['name' ] == 'milvus' ):
156
+ openwhisk .annotate (f"milvus_port={ port ['port' ]} " )
135
157
return None
136
158
except Exception as e :
137
159
logging .error (f"failed to annotate MILVUS for nuvolaris: { e } " )
138
160
return None
139
161
140
- def _add_milvus_user_metadata (ucfg : UserConfig , user_metadata :UserMetadata ):
162
+
163
+ def _add_milvus_user_metadata (ucfg : UserConfig , user_metadata : UserMetadata ):
141
164
"""
142
165
adds entries for MILVUS connectivity MILVUS_HOST, MILVUS_PORT, MILVUS_TOKEN, MILVUS_DB_NAME
143
- """
166
+ """
144
167
145
168
try :
146
- milvus_service = util .get_service (r"{.items[?(@.metadata.labels.app\.kubernetes\.io\/instance == 'nuvolaris-milvus')]}" )
147
-
148
- if (milvus_service ):
169
+ milvus_service = util .get_service (
170
+ r"{.items[?(@.metadata.labels.app\.kubernetes\.io\/instance == 'nuvolaris-milvus')]}" )
171
+
172
+ if (milvus_service ):
149
173
milvus_host = f"{ milvus_service ['metadata' ]['name' ]} .{ milvus_service ['metadata' ]['namespace' ]} .svc.cluster.local"
150
174
milvus_token = f"{ ucfg .get ('namespace' )} :{ ucfg .get ('milvus.password' )} "
151
- user_metadata .add_metadata ("MILVUS_HOST" ,milvus_host )
152
- user_metadata .add_metadata ("MILVUS_TOKEN" ,milvus_token )
153
- user_metadata .add_metadata ("MILVUS_DB_NAME" ,ucfg .get ('milvus.database' ))
175
+ user_metadata .add_metadata ("MILVUS_HOST" , milvus_host )
176
+ user_metadata .add_metadata ("MILVUS_TOKEN" , milvus_token )
177
+ user_metadata .add_metadata ("MILVUS_DB_NAME" , ucfg .get ('milvus.database' ))
154
178
155
179
ports = list (milvus_service ['spec' ]['ports' ])
156
180
for port in ports :
157
- if (port ['name' ]== 'milvus' ):
158
- user_metadata .add_metadata ("MILVUS_PORT" ,port ['port' ])
181
+ if (port ['name' ] == 'milvus' ):
182
+ user_metadata .add_metadata ("MILVUS_PORT" , port ['port' ])
159
183
160
184
return None
161
185
except Exception as e :
162
186
logging .error (f"failed to build MILVUS metadata for { ucfg .get ('namespace' )} : { e } " )
163
187
return None
164
188
189
+
165
190
def create_ow_milvus (ucfg : UserConfig , user_metadata : UserMetadata , owner = None ):
166
191
logging .info (f"*** configuring MILVUS database for { ucfg .get ('namespace' )} " )
167
-
192
+
168
193
adminClient = MilvusAdminClient ()
169
194
username = ucfg .get ("namespace" )
170
195
password = ucfg .get ("milvus.password" )
171
196
database = ucfg .get ("milvus.database" )
172
- res = adminClient .setup_user (username , password ,database )
173
-
174
- if (res ):
197
+ res = adminClient .setup_user (username , password , database )
198
+
199
+ if (res ):
175
200
_add_milvus_user_metadata (ucfg , user_metadata )
176
201
logging .info (f"*** configured MILVUS database linked to namespace { ucfg .get ('namespace' )} " )
177
202
203
+ return res
204
+
205
+
178
206
def delete_ow_milvus (ucfg ):
179
207
logging .info (f"removing MILVUS database { ucfg .get ('namespace' )} " )
180
208
adminClient = MilvusAdminClient ()
181
- res = adminClient .remove_user (ucfg .get ('namespace' ),ucfg .get ('milvus.database' ))
209
+ res = adminClient .remove_user (ucfg .get ('namespace' ), ucfg .get ('milvus.database' ))
182
210
183
211
if res :
184
- logging .info (f"removed MILVUS database linked to namespace { ucfg .get ('namespace' )} " )
212
+ logging .info (f"removed MILVUS database linked to namespace { ucfg .get ('namespace' )} " )
213
+
214
+ return res
215
+
185
216
186
217
def delete_by_owner ():
187
218
spec = kus .build ("milvus" )
188
219
res = kube .delete (spec )
189
- logging .info (f"delete milvus: { res } " )
220
+ logging .info (f"delete milvus: { res } " )
190
221
return res
191
222
223
+
192
224
def delete_by_spec ():
193
- spec = cfg .get ("state.milvus.spec" )
225
+ spec = cfg .get ("state.milvus.spec" )
194
226
if spec :
195
227
res = kube .delete (spec )
196
228
logging .info (f"delete milvus: { res } " )
197
229
return res
198
230
199
-
200
231
201
232
def delete (owner = None ):
202
- if owner :
233
+ if owner :
203
234
return delete_by_owner ()
204
235
else :
205
236
return delete_by_spec ()
206
237
238
+
207
239
def patch (status , action , owner = None ):
208
240
"""
209
241
Called by the operator patcher to create/delete milvus component
210
242
"""
211
243
try :
212
- logging .info (f"*** handling request to { action } milvus" )
213
- if action == 'create' :
244
+ logging .info (f"*** handling request to { action } milvus" )
245
+ if action == 'create' :
214
246
msg = create (owner )
215
- operator_util .patch_operator_status (status ,'milvus' ,'on' )
247
+ operator_util .patch_operator_status (status , 'milvus' , 'on' )
216
248
else :
217
- msg = delete (owner )
218
- operator_util .patch_operator_status (status ,'milvus' ,'off' )
249
+ msg = delete (owner )
250
+ operator_util .patch_operator_status (status , 'milvus' , 'off' )
219
251
220
- logging .info (msg )
221
- logging .info (f"*** handled request to { action } milvus" )
252
+ logging .info (msg )
253
+ logging .info (f"*** handled request to { action } milvus" )
222
254
except Exception as e :
223
- logging .error ('*** failed to update milvus: %s' % e )
224
- operator_util .patch_operator_status (status ,'milvus' ,'error' )
255
+ logging .error ('*** failed to update milvus: %s' % e )
256
+ operator_util .patch_operator_status (status , 'milvus' , 'error' )
0 commit comments