pulumi icon indicating copy to clipboard operation
pulumi copied to clipboard

Keep resource `transformation` for synchronous use cases

Open arnaubt opened this issue 4 months ago • 2 comments

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

arnaubt avatar Sep 30 '24 15:09 arnaubt