From c1b1dde30f5192266c56d4f1779cad6634255298 Mon Sep 17 00:00:00 2001 From: maslow Date: Tue, 3 Aug 2021 22:36:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20devops=20=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=97=B6=E5=88=9B=E5=BB=BA=E4=BA=91=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E9=A2=84=E7=BD=AE=E8=A7=A6=E5=8F=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../init/functions/init-app-rbac/index.ts | 4 +-- .../init/functions/initializer/index.ts | 1 + .../init/functions/initializer/meta.json | 11 ++++++- packages/devops-server/init/index.js | 32 ++++++++++++++++++- 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/packages/devops-server/init/functions/init-app-rbac/index.ts b/packages/devops-server/init/functions/init-app-rbac/index.ts index 7067c776ce..78a1de73da 100644 --- a/packages/devops-server/init/functions/init-app-rbac/index.ts +++ b/packages/devops-server/init/functions/init-app-rbac/index.ts @@ -1,7 +1,5 @@ /** - * 本函数会默认创建 'App:ready' 事件触发器,应用启动并初始化完成后被自动调用。 - * - * 本函数可用于初始化应用必要的一些配置、数据,通常不需要删除此云函数,也不要开启 HTTP 调用。 + * 本函数可用于初始化一套 RBAC 必要的数据,通常不需要删除此云函数,也不要开启 HTTP 调用。 */ import cloud from '@/cloud-sdk' diff --git a/packages/devops-server/init/functions/initializer/index.ts b/packages/devops-server/init/functions/initializer/index.ts index 16e6ac6494..37c632bd37 100644 --- a/packages/devops-server/init/functions/initializer/index.ts +++ b/packages/devops-server/init/functions/initializer/index.ts @@ -11,6 +11,7 @@ const db = cloud.database() exports.main = async function (ctx) { const r = await cloud.invoke('init-app-rbac', {}) + console.log(r.logs) if (r.data === 'ok') { console.log('init rbac: ok') } diff --git a/packages/devops-server/init/functions/initializer/meta.json b/packages/devops-server/init/functions/initializer/meta.json index e248b2aa73..bc13538085 100644 --- a/packages/devops-server/init/functions/initializer/meta.json +++ b/packages/devops-server/init/functions/initializer/meta.json @@ -4,5 +4,14 @@ "description": "", "enableHTTP": false, "reserved": true, - "tags": ["初始化", "预置"] + "tags": ["初始化", "预置"], + "triggers": [ + { + "name": "监听应用启动就绪事件", + "type": "event", + "event": "App:ready", + "desc": "", + "status": 1 + } + ] } \ No newline at end of file diff --git a/packages/devops-server/init/index.js b/packages/devops-server/init/index.js index 643a189ead..c870aec710 100644 --- a/packages/devops-server/init/index.js +++ b/packages/devops-server/init/index.js @@ -9,6 +9,7 @@ const { Constants } = require('../dist/constants') const { Globals } = require('../dist/lib/globals') const { publishFunctions } = require('../dist/api/function') const { publishAccessPolicy } = require('../dist/api/rules') +const { publishTriggers } = require('../dist/api/trigger') const appAdminRules = require('./policies/app-admin.json') const appUserRules = require('./policies/app-user.json') @@ -44,6 +45,9 @@ async function main() { // 部署云函数 await publishFunctions().then(() => console.log('functions deployed')) + // 部署触发器 + await publishTriggers().then(() => console.log('triggers deployed')) + sys_accessor.close() app_accessor.close() } @@ -208,13 +212,19 @@ async function createBuiltinFunctions() { const funcs = await loader.getFunctions() for (const func of funcs) { try { + const triggers = func.triggers || [] const data = { ...func, status: 1, created_at: Date.now(), updated_at: Date.now() } - await db.collection('__functions').add(data) + delete data['triggers'] + const r = await db.collection('__functions').add(data) + + if (triggers.length) { + await createTriggers(r.id, triggers) + } } catch (error) { if (error.code == 11000) { console.log('functions already exists: ' + func.name) @@ -225,4 +235,24 @@ async function createBuiltinFunctions() { } return true +} + +/** + * 创建触发器 + */ +async function createTriggers(func_id, triggers) { + assert.ok(func_id, 'invalid func_id') + assert.ok(triggers.length, 'no triggers found') + + for (const tri of triggers) { + const data = { + ...tri, + created_at: Date.now(), + updated_at: Date.now(), + func_id: func_id + } + await db.collection('__triggers').add(data) + } + + console.log(`triggers of func[${func_id}] created`) } \ No newline at end of file