File tree Expand file tree Collapse file tree 3 files changed +32
-10
lines changed Expand file tree Collapse file tree 3 files changed +32
-10
lines changed Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ import {
11
11
processDynamicAttributesForHcl ,
12
12
} from "./util" ;
13
13
import { ITerraformDependable } from "./terraform-dependable" ;
14
- import { ref , dependable } from "./tfExpression" ;
14
+ import { ref , dependable , replaceTriggeredBy } from "./tfExpression" ;
15
15
import { IResolvable } from "./tokens/resolvable" ;
16
16
import { IInterpolatingParent } from "./terraform-addressable" ;
17
17
import { ITerraformIterator } from "./terraform-iterator" ;
@@ -78,13 +78,9 @@ export function lifecycleToTerraform(
78
78
...lifecycle ,
79
79
...( lifecycle ?. replaceTriggeredBy ?. length
80
80
? {
81
- replaceTriggeredBy : lifecycle ?. replaceTriggeredBy ?. map ( ( x ) => {
82
- if ( typeof x === "string" ) {
83
- return x ;
84
- } else {
85
- return x . fqn ;
86
- }
87
- } ) ,
81
+ replaceTriggeredBy : lifecycle ?. replaceTriggeredBy ?. map ( ( x ) =>
82
+ replaceTriggeredBy ( x ) ,
83
+ ) ,
88
84
}
89
85
: undefined ) ,
90
86
} ;
Original file line number Diff line number Diff line change @@ -466,13 +466,39 @@ export function dependable(dependable: ITerraformDependable): string {
466
466
return Token . asString ( new Dependable ( dependable ) ) ;
467
467
}
468
468
469
+ // eslint-disable-next-line jsdoc/require-jsdoc
470
+ class ReplaceTriggeredBy extends TFExpression {
471
+ constructor ( private readonly trigger : ITerraformDependable | string ) {
472
+ super ( trigger ) ;
473
+ }
474
+
475
+ public resolve ( context : IResolveContext ) {
476
+ context . suppressBraces = true ;
477
+
478
+ if ( typeof this . trigger === "string" ) {
479
+ return context . resolve ( this . trigger ) ;
480
+ }
481
+ return context . resolve ( this . trigger . fqn ) ;
482
+ }
483
+ }
484
+
485
+ /**
486
+ * Takes either a full resource or a resource property and then
487
+ * returns the logical address without braces/interpolation to
488
+ * be used in replaceTriggeredBy directives.
489
+ */
490
+ export function replaceTriggeredBy ( trigger : ITerraformDependable | string ) {
491
+ return Token . asString ( new ReplaceTriggeredBy ( trigger ) ) ;
492
+ }
493
+
469
494
export type Expression =
470
495
| Reference
471
496
| FunctionCall
472
497
| PropertyAccess
473
498
| ConditionalExpression
474
499
| OperatorExpression
475
500
| Dependable
501
+ | ReplaceTriggeredBy
476
502
| ForExpression
477
503
| string
478
504
| string [ ]
Original file line number Diff line number Diff line change @@ -456,8 +456,8 @@ exports[`supports resource and attribute references in lifecycle.replaceTriggere
456
456
" simple" : {
457
457
" lifecycle" : {
458
458
" replace_triggered_by" : [
459
- " \$ { test_resource.other} " ,
460
- " \$ { test_resource.other.string_value} "
459
+ " test_resource.other" ,
460
+ " test_resource.other.string_value"
461
461
]
462
462
},
463
463
" name" : " foo"
You can’t perform that action at this time.
0 commit comments