From 1b50eb2f6782b5580d57e0fe7110b84682aed9de Mon Sep 17 00:00:00 2001 From: bzp2010 Date: Sun, 10 Nov 2024 21:03:32 +0800 Subject: [PATCH] feat(apisix): sync resources id --- libs/backend-apisix/src/operator.ts | 6 +++ libs/backend-apisix/src/transformer.ts | 62 +++++++++++++++----------- 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/libs/backend-apisix/src/operator.ts b/libs/backend-apisix/src/operator.ts index da1d3f1..2c2a83b 100644 --- a/libs/backend-apisix/src/operator.ts +++ b/libs/backend-apisix/src/operator.ts @@ -108,10 +108,12 @@ export class Operator { case ADCSDK.ResourceType.CONSUMER: return fromADC.transformConsumer(event.newValue as ADCSDK.Consumer); case ADCSDK.ResourceType.CONSUMER_GROUP: + (event.newValue as ADCSDK.ConsumerGroup).id = event.resourceId; return fromADC.transformConsumerGroup( event.newValue as ADCSDK.ConsumerGroup, )[0]; case ADCSDK.ResourceType.CONSUMER_CREDENTIAL: + (event.newValue as ADCSDK.ConsumerCredential).id = event.resourceId; return fromADC.transformConsumerCredential( event.newValue as ADCSDK.ConsumerCredential, ); @@ -124,15 +126,19 @@ export class Operator { case ADCSDK.ResourceType.PLUGIN_METADATA: return event.newValue; case ADCSDK.ResourceType.ROUTE: { + (event.newValue as ADCSDK.Route).id = event.resourceId; const route = fromADC.transformRoute(event.newValue as ADCSDK.Route); if (event.parentId) route.service_id = event.parentId; return route; } case ADCSDK.ResourceType.SERVICE: + (event.newValue as ADCSDK.Service).id = event.resourceId; return fromADC.transformService(event.newValue as ADCSDK.Service)[0]; case ADCSDK.ResourceType.SSL: + (event.newValue as ADCSDK.SSL).id = event.resourceId; return fromADC.transformSSL(event.newValue as ADCSDK.SSL); case ADCSDK.ResourceType.STREAM_ROUTE: { + (event.newValue as ADCSDK.StreamRoute).id = event.resourceId; const route = fromADC.transformStreamRoute( event.newValue as ADCSDK.StreamRoute, ); diff --git a/libs/backend-apisix/src/transformer.ts b/libs/backend-apisix/src/transformer.ts index d49f24c..95c2df6 100644 --- a/libs/backend-apisix/src/transformer.ts +++ b/libs/backend-apisix/src/transformer.ts @@ -17,6 +17,7 @@ export class ToADC { public transformRoute(route: typing.Route): ADCSDK.Route { return ADCSDK.utils.recursiveOmitUndefined({ + id: route.id, name: route.name ?? route.id, description: route.desc, labels: route.labels, @@ -34,21 +35,18 @@ export class ToADC { plugins: route.plugins, plugin_config_id: route.plugin_config_id, filter_func: route.filter_func, - - metadata: { id: route.id }, } as ADCSDK.Route); } public transformService(service: typing.Service): ADCSDK.Service { return ADCSDK.utils.recursiveOmitUndefined({ + id: service.id, name: service.name ?? service.id, description: service.desc, labels: service.labels, upstream: service.upstream, plugins: service.plugins, - - metadata: { id: service.id }, } as ADCSDK.Service); } @@ -82,12 +80,12 @@ export class ToADC { ) return; return ADCSDK.utils.recursiveOmitUndefined({ + id: credential.id, name: credential.name, description: credential.desc, labels: credential.labels, type: pluginName as ADCSDK.ConsumerCredential['type'], config, - metadata: { id: credential.id }, }); } @@ -104,6 +102,7 @@ export class ToADC { ]; return ADCSDK.utils.recursiveOmitUndefined({ + id: ssl.id, labels: ssl.labels, type: ssl.type, @@ -124,8 +123,9 @@ export class ToADC { consumerGroup: typing.ConsumerGroup, consumers?: Array, ): ADCSDK.ConsumerGroup { - const adcConsumerGroup: ADCSDK.ConsumerGroup = - ADCSDK.utils.recursiveOmitUndefined({ + const adcConsumerGroup = + ADCSDK.utils.recursiveOmitUndefined({ + id: consumerGroup.id, name: (consumerGroup.labels?.ADC_NAME as string) ?? consumerGroup.id, description: consumerGroup.desc, labels: consumerGroup.labels, @@ -156,6 +156,7 @@ export class ToADC { streamRoute: typing.StreamRoute, ): ADCSDK.StreamRoute { return ADCSDK.utils.recursiveOmitUndefined({ + id: streamRoute.id, name: streamRoute.labels?.__ADC_NAME ?? streamRoute.id, description: streamRoute.desc, labels: ToADC.transformLabels(streamRoute.labels), @@ -242,14 +243,24 @@ export class FromADC { } public transformRoute(route: ADCSDK.Route): typing.Route { - return ADCSDK.utils.recursiveOmitUndefined({ - ...route, - id: undefined, + return ADCSDK.utils.recursiveOmitUndefined({ + id: route.id, + name: route.name, + desc: route.description, labels: FromADC.transformLabels(route.labels), - status: 1, + uris: route.uris, + hosts: route.hosts, + methods: route.methods, + remote_addrs: route.remote_addrs, + vars: route.vars, + filter_func: route.filter_func, - desc: route.description, - description: undefined, + //service_id: '', + enable_websocket: route.enable_websocket, + plugins: route.plugins, + priority: route.priority, + timeout: route.timeout, + status: 1, }); } @@ -266,15 +277,15 @@ export class FromADC { ?.map(this.transformStreamRoute) .map((route) => ({ ...route, service_id: serviceId })) ?? []; return [ - ADCSDK.utils.recursiveOmitUndefined({ + ADCSDK.utils.recursiveOmitUndefined({ ...service, - id: undefined, - labels: FromADC.transformLabels(service.labels), - routes: undefined, - stream_routes: undefined, - + id: service.id, + name: service.name, desc: service.description, - description: undefined, + labels: FromADC.transformLabels(service.labels), + upstream: service.upstream, + plugins: service.plugins, + hosts: service.hosts, }), routes, streamRoutes, @@ -286,7 +297,6 @@ export class FromADC { username: consumer.username, desc: consumer.description, labels: FromADC.transformLabels(consumer.labels), - plugins: consumer.plugins, } as typing.Consumer); } @@ -295,6 +305,7 @@ export class FromADC { credential: ADCSDK.ConsumerCredential, ): typing.ConsumerCredential { return ADCSDK.utils.recursiveOmitUndefined({ + id: credential.id, name: credential.name, desc: credential.description, labels: FromADC.transformLabels(credential.labels), @@ -305,13 +316,13 @@ export class FromADC { } public transformSSL(ssl: ADCSDK.SSL): typing.SSL { - return ADCSDK.utils.recursiveOmitUndefined({ - ...ssl, - id: undefined, + return ADCSDK.utils.recursiveOmitUndefined({ + id: ssl.id, labels: FromADC.transformLabels(ssl.labels), status: 1, - certificates: undefined, + type: ssl.type, + snis: ssl.snis, cert: ssl.certificates[0].certificate, key: ssl.certificates[0].key, ...(ssl.certificates.length > 1 @@ -324,6 +335,7 @@ export class FromADC { .map((certificate) => certificate.key), } : {}), + client: ssl.client, }); }