2929WORK_DIR=" $current_dir /operators"
3030
3131# 退出时自动清理
32- cleanup () {
33- log_info " 清理临时文件..."
34- rm -rf " $WORK_DIR "
35- }
36- trap cleanup EXIT
32+ # cleanup() {
33+ # log_info "清理临时文件..."
34+ # rm -rf "$WORK_DIR"
35+ # }
36+ # trap cleanup EXIT
3737
3838# 2. 处理输入源(解压或复制到工作区)
3939SOURCE_DIR=" $WORK_DIR /source"
4040mkdir -p " $SOURCE_DIR "
4141
4242if [ -d " $INPUT_PATH " ]; then
43- log_info " 输入为目录,复制文件 ..."
43+ log_info " 输入为目录,跳过解压 ..."
4444 SOURCE_DIR=$INPUT_PATH
4545elif [[ " $INPUT_PATH " == * .zip ]]; then
4646 log_info " 输入为zip包,解压中..."
@@ -78,9 +78,11 @@ while read -r pkg; do
7878
7979 # 解压子包
8080 if [[ " $pkg " == * .zip ]]; then
81- unzip -q " $pkg " -d " $PKG_EXTRACT_DIR "
82- else
81+ unzip -oq " $pkg " -d " $PKG_EXTRACT_DIR "
82+ elif [[ " $pkg " == * .tar ]] ; then
8383 tar -xf " $pkg " -C " $PKG_EXTRACT_DIR "
84+ else
85+ continue
8486 fi
8587
8688 # 检查关键文件是否存在
@@ -93,24 +95,24 @@ while read -r pkg; do
9395 # 假设每个包在目标目录下应该有一个独立的文件夹
9496 REMOTE_PATH=" $EXTRACT_DIR /$PKG_BASE "
9597
96- log_info " -> 部署文件到容器 $BACKEND_POD_NAME : $REMOTE_PATH "
98+ log_info " 拷贝目录 ${PKG_BASE} 到容器... "
9799
98- # kubectl cp "$SOURCE_DIR/$PKG_NAME" "$BACKEND_POD_NAME:$UPLOAD_DIR/" -n "$NAMESPACE"
99- kubectl cp " $PKG_EXTRACT_DIR " " $BACKEND_POD_NAME :$REMOTE_PATH /" -n " $NAMESPACE "
100+ # kubectl cp "$SOURCE_DIR/$PKG_NAME" "$BACKEND_POD_NAME:$UPLOAD_DIR/$PKG_BASE/" -n "$NAMESPACE"
101+ kubectl exec " $BACKEND_POD_NAME " -n " $NAMESPACE " -- sh -c " rm -rf $REMOTE_PATH / && mkdir -p $REMOTE_PATH "
102+ kubectl cp " $PKG_EXTRACT_DIR /." " $BACKEND_POD_NAME :$REMOTE_PATH /" -n " $NAMESPACE "
100103
101- if [ -f " $PKG_EXTRACT_DIR /wheels" ]; then
104+ if [ -d " $PKG_EXTRACT_DIR /wheels" ]; then
105+ log_info " 安装算子依赖..."
102106 kubectl exec " $HEAD_POD_NAME " -n " $NAMESPACE " -- bash -c " uv pip install --target $PACKAGE_DIR /opt/runtime/datamate/ops/user/$PKG_BASE /wheels/*.whl"
103107 fi
104108done < <( find " $SOURCE_DIR " -maxdepth 1 -type f \( -name " *.zip" -o -name " *.tar" \) )
105109
106110
107- FULL_SQL=$( kubectl exec -i " $HEAD_POD_NAME " -n " $NAMESPACE " -- python3 - << EOF
111+ FULL_SQL=$( kubectl exec -i " $HEAD_POD_NAME " -n " $NAMESPACE " -c ray-head - - python3 - << EOF
108112from pathlib import Path
109- import sys, yaml
113+ import json, sys, yaml
110114
111- operator_sql='INSERT IGNORE INTO t_operator
112- (id, name, description, version, inputs, outputs, runtime, settings, file_name, is_star)
113- VALUES '
115+ operator_sql = 'INSERT IGNORE INTO t_operator (id, name, description, version, inputs, outputs, runtime, settings, file_name, is_star) VALUES '
114116category_sql='INSERT IGNORE INTO t_operator_category_relation(category_id, operator_id) VALUES '
115117modal_map = {
116118 'text': 'd8a5df7a-52a9-42c2-83c4-01062e60f597',
@@ -129,27 +131,33 @@ for metadata_file in base_path.rglob('metadata.yml'):
129131 try:
130132 with open(metadata_file, 'r') as f:
131133 data = yaml.safe_load(f)
132- id = data.get('raw_id')
133- name = data.get('name')
134- desc = data.get('description')
135- version = data.get('version')
136- modal = data.get('modal').lower()
137- language = data.get('language').lower()
138- inputs = data.get('inputs')
139- outputs = data.get('outputs')
134+ id = data.get('raw_id').strip("'\"")
135+ name = data.get('name').strip("'\"")
136+ desc = data.get('description').strip("'\"")
137+ version = data.get('version').strip("'\"")
138+ modal = data.get('modal').lower().strip("'\"")
139+ language = data.get('language').lower().strip("'\"")
140+ inputs = data.get('inputs').strip("'\"")
141+ outputs = data.get('outputs').strip("'\"")
142+ runtime = f"'{json.dumps(data.get('runtime'), ensure_ascii=False)}'" if 'runtime' in data else 'null'
143+ settings = f"'{json.dumps(data.get('settings'), ensure_ascii=False)}'" if 'settings' in data else 'null'
140144 file_name = Path(metadata_file).parent.name
141145
142- operator_sql += "('{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', 'false'),".format(id, name, desc, version, inputs, outputs, runtime, settings, file_name)
143- category_sql += "('{}', '{}'),".format(id, modal_map.get(modal, 'd8a5df7a-52a9-42c2-83c4-01062e60f597'))
144- category_sql += "('{}', '{}'),".format(id, language_map.get(language, '9eda9d5d-072b-499b-916c-797a0a8750e1'))
146+ operator_sql += "('{}', '{}', '{}', '{}', '{}', '{}', {}, {}, '{}', 'false'),".format(id, name, desc, version, inputs, outputs, runtime, settings, file_name)
147+ category_sql += "('{}', '{}'),".format(modal_map.get(modal, 'd8a5df7a-52a9-42c2-83c4-01062e60f597'), id)
148+ category_sql += "('{}', '{}'),".format(language_map.get(language, '9eda9d5d-072b-499b-916c-797a0a8750e1'), id)
149+ category_sql += "('ec2cdd17-8b93-4a81-88c4-ac9e98d10757', '{}'),".format(id)
145150 except Exception as e:
146151 print(f'ERROR: {e}', file=sys.stderr)
147152 sys.exit(1)
148153 print(operator_sql[:-1] + ';\n' + category_sql[:-1] + ';')
149154EOF
150155)
151156
157+ log_info " 插入数据库..."
152158DATABASE_POD_NAME=$( kubectl get pod -n " $NAMESPACE " -l app.kubernetes.io/name=datamate-database -o jsonpath=' {.items[*].metadata.name}' )
153- kubectl exec -i " $DATABASE_POD_NAME " -n " $NAMESPACE " -- mysql -uroot -p" \$ MYSQL_ROOT_PASSWORD" " datamate" -e " $FULL_SQL " 2> /dev/null
159+ kubectl exec -i " $DATABASE_POD_NAME " -n " $NAMESPACE " -c database -- sh -c ' MYSQL_PWD="$MYSQL_ROOT_PASSWORD" mysql -uroot datamate' << EOF
160+ $FULL_SQL
161+ EOF
154162
155163log_info " 所有任务执行完毕。"
0 commit comments