@@ -2,12 +2,14 @@ import * as ADCSDK from '@api7/adc-sdk';
2
2
import { Axios } from 'axios' ;
3
3
import { ListrTask } from 'listr2' ;
4
4
import { isEmpty } from 'lodash' ;
5
+ import { SemVer , gte as semVerGTE } from 'semver' ;
5
6
6
7
import { ToADC } from './transformer' ;
7
8
import * as typing from './typing' ;
8
9
import { buildReqAndRespDebugOutput } from './utils' ;
9
10
10
11
type FetchTask = ListrTask < {
12
+ api7Version : SemVer ;
11
13
gatewayGroupId : string ;
12
14
remote : ADCSDK . Configuration ;
13
15
} > ;
@@ -133,42 +135,11 @@ export class Fetcher {
133
135
title : 'Fetch plugin metadata' ,
134
136
skip : this . isSkip ( [ ADCSDK . ResourceType . PLUGIN_METADATA ] ) ,
135
137
task : async ( ctx , task ) => {
136
- const resp = await this . client . get < Array < string > > (
137
- '/apisix/admin/plugins/list' ,
138
- {
139
- params : { has_metadata : true } ,
140
- } ,
141
- ) ;
142
- task . output = buildReqAndRespDebugOutput (
143
- resp ,
144
- 'Get plugins that contain plugin metadata' ,
145
- ) ;
146
-
147
- const plugins = resp . data ;
148
- const getMetadataConfig = plugins . map <
149
- Promise < [ string , typing . PluginMetadata ] >
150
- > ( async ( pluginName ) => {
151
- try {
152
- const resp = await this . client . get < {
153
- value : typing . PluginMetadata ;
154
- } > ( `/apisix/admin/plugin_metadata/${ pluginName } ` , {
155
- params : { gateway_group_id : ctx . gatewayGroupId } ,
156
- } ) ;
157
- task . output = buildReqAndRespDebugOutput (
158
- resp ,
159
- `Get plugin metadata for "${ pluginName } "` ,
160
- ) ;
161
- return [ pluginName , resp ?. data ?. value ] ;
162
- } catch ( err ) {
163
- return [ pluginName , null ] ;
164
- }
165
- } ) ;
166
- const metadataObj = Object . fromEntries (
167
- ( await Promise . all ( getMetadataConfig ) ) . filter ( ( item ) => item [ 1 ] ) ,
168
- ) ;
169
-
170
- ctx . remote . plugin_metadata =
171
- this . toADC . transformPluginMetadatas ( metadataObj ) ;
138
+ if ( semVerGTE ( ctx . api7Version , '3.2.14' ) ) {
139
+ return this . listMetadatasGTE03021400 ( ctx , task ) ;
140
+ } else {
141
+ return this . listMetadatasLT03021400 ( ctx , task ) ;
142
+ }
172
143
} ,
173
144
} ;
174
145
}
@@ -208,6 +179,59 @@ export class Fetcher {
208
179
} ;
209
180
}
210
181
182
+ // Get plugin metadata on API7 3.2.14.0 and up
183
+ private listMetadatasGTE03021400 : FetchTask [ 'task' ] = async ( ctx , task ) => {
184
+ const resp = await this . client . get < {
185
+ value : ADCSDK . Plugins ;
186
+ } > ( '/apisix/admin/plugin_metadata' , {
187
+ params : { gateway_group_id : ctx . gatewayGroupId } ,
188
+ } ) ;
189
+ task . output = buildReqAndRespDebugOutput ( resp , 'Get plugin metadata' ) ;
190
+ ctx . remote . plugin_metadata = this . toADC . transformPluginMetadatas (
191
+ resp . data . value ,
192
+ ) ;
193
+ } ;
194
+
195
+ // Get plugin metadata below API7 3.2.14.0
196
+ private listMetadatasLT03021400 : FetchTask [ 'task' ] = async ( ctx , task ) => {
197
+ const resp = await this . client . get < Array < string > > (
198
+ '/apisix/admin/plugins/list' ,
199
+ {
200
+ params : { has_metadata : true } ,
201
+ } ,
202
+ ) ;
203
+ task . output = buildReqAndRespDebugOutput (
204
+ resp ,
205
+ 'Get plugins that contain plugin metadata' ,
206
+ ) ;
207
+
208
+ const plugins = resp . data ;
209
+ const getMetadataConfig = plugins . map <
210
+ Promise < [ string , typing . PluginMetadata ] >
211
+ > ( async ( pluginName ) => {
212
+ try {
213
+ const resp = await this . client . get < {
214
+ value : typing . PluginMetadata ;
215
+ } > ( `/apisix/admin/plugin_metadata/${ pluginName } ` , {
216
+ params : { gateway_group_id : ctx . gatewayGroupId } ,
217
+ } ) ;
218
+ task . output = buildReqAndRespDebugOutput (
219
+ resp ,
220
+ `Get plugin metadata for "${ pluginName } "` ,
221
+ ) ;
222
+ return [ pluginName , resp ?. data ?. value ] ;
223
+ } catch ( err ) {
224
+ return [ pluginName , null ] ;
225
+ }
226
+ } ) ;
227
+ const metadataObj = Object . fromEntries (
228
+ ( await Promise . all ( getMetadataConfig ) ) . filter ( ( item ) => item [ 1 ] ) ,
229
+ ) ;
230
+
231
+ ctx . remote . plugin_metadata =
232
+ this . toADC . transformPluginMetadatas ( metadataObj ) ;
233
+ } ;
234
+
211
235
private attachLabelSelector (
212
236
params : Record < string , string > ,
213
237
) : Record < string , string > {
0 commit comments