@@ -406,6 +406,27 @@ class Scf {
406
406
return res . Response ;
407
407
}
408
408
409
+ async getAlias ( inputs ) {
410
+ const publishInputs = {
411
+ Action : 'GetAlias' ,
412
+ Version : '2018-04-16' ,
413
+ Region : inputs . region ,
414
+ FunctionName : inputs . functionName ,
415
+ Name : inputs . functionVersion || '$DEFAULT' ,
416
+ Namespace : inputs . namespace || 'default' ,
417
+ } ;
418
+ const res = await this . scfClient . request ( publishInputs ) ;
419
+ if ( res . Response && res . Response . Error ) {
420
+ throw new TypeError (
421
+ 'API_SCF_ListAliases' ,
422
+ JSON . stringify ( res . Response ) ,
423
+ null ,
424
+ res . Response . RequestId ,
425
+ ) ;
426
+ }
427
+ return res . Response ;
428
+ }
429
+
409
430
// deploy SCF flow
410
431
async deploy ( inputs = { } ) {
411
432
// whether auto create/bind role
@@ -471,6 +492,31 @@ class Scf {
471
492
outputs . ConfigTrafficVersion = inputs . lastVersion ;
472
493
}
473
494
495
+ // get default alias
496
+ const defualtAlias = await this . getAlias ( {
497
+ functionName : funcInfo . FunctionName ,
498
+ region : this . region ,
499
+ namespace,
500
+ } ) ;
501
+ if (
502
+ defualtAlias &&
503
+ defualtAlias . RoutingConfig &&
504
+ defualtAlias . RoutingConfig . AdditionalVersionWeights
505
+ ) {
506
+ const weights = defualtAlias . RoutingConfig . AdditionalVersionWeights ;
507
+ let weightSum = 0 ;
508
+ let lastVersion = weights [ 0 ] . Version ;
509
+ weights . forEach ( ( w ) => {
510
+ if ( Number ( w . Version ) > Number ( outputs . LastVersion ) ) {
511
+ lastVersion = w . Version ;
512
+ }
513
+ weightSum += w . Weight ;
514
+ } ) ;
515
+ outputs . LastVersion = lastVersion ;
516
+ outputs . ConfigTrafficVersion = lastVersion ;
517
+ outputs . Traffic = 1 - weightSum ;
518
+ }
519
+
474
520
if ( inputs . tags || inputs . events ) {
475
521
if ( ! funcInfo ) {
476
522
funcInfo = await this . getFunction ( namespace , inputs . name ) ;
0 commit comments