pulumi
pulumi copied to clipboard
Keep resource `transformation` for synchronous use cases
Hello!
- Vote on this issue by adding a 👍 reaction
- If you want to implement this feature, comment to let us know (we'll work with you on design, scheduling, etc.)
Issue details
We have a use case requiring resource transformations to be executed before provider resource creation. This works well with the now deprecated transformations. But transforms follow an asynchronous execution model into which the same logic cannot be migrated.
Using transformation
import pulumi
def transformation_resource(args: pulumi.ResourceTransformationArgs):
pulumi.log.info(f"Transformation: {args.type_}")
pulumi.runtime.register_stack_transformation(transformation_resource)
Output with a consistent order:
Transformation: aws:iam/role:Role
Transformation: aws:iam/policy:Policy
Transformation: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transformation: aws:iam/policy:Policy
Transformation: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transformation: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transformation: aws:s3/bucketObject:BucketObject
Transformation: aws:lambda/function:Function
Transformation: aws:lambda/alias:Alias
Transformation: aws:lambda/alias:Alias
Transformation: aws:cloudwatch/eventRule:EventRule
Transformation: aws:cloudwatch/eventRule:EventRule
Transformation: aws:cloudwatch/eventTarget:EventTarget
Transformation: aws:lambda/permission:Permission
Transformation: aws:cloudwatch/eventTarget:EventTarget
Transformation: aws:lambda/permission:Permission
<Config parsing done>
Using transform
import pulumi
def transform_resource(args: pulumi.ResourceTransformArgs):
pulumi.log.info(f"Transform: {args.type_}")
pulumi.runtime.register_stack_transformation(transform_resource)
Output with an asynchronous order:
Transform: aws:iam/role:Role
Transform: aws:iam/policy:Policy
Transform: aws:iam/policy:Policy
Transform: aws:s3/bucketObject:BucketObject
Transform: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transform: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transform: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transform: aws:cloudwatch/eventRule:EventRule
<Config parsing done>
Transform: aws:lambda/function:Function
Transform: aws:cloudwatch/eventRule:EventRule
Transform: aws:iam/policy:Policy
Transform: aws:lambda/alias:Alias
Transform: aws:lambda/alias:Alias
Transform: aws:iam/rolePolicyAttachment:RolePolicyAttachment
Transform: aws:cloudwatch/eventTarget:EventTarget
Transform: aws:cloudwatch/eventTarget:EventTarget
Transform: aws:lambda/permission:Permission
Transform: aws:lambda/permission:Permission
Affected area/feature
Resource transforms