From 31d148623c531b91a96446c5242ea4f2b5a8a053 Mon Sep 17 00:00:00 2001 From: Sivaselvan32 Date: Mon, 18 May 2026 21:35:09 +0530 Subject: [PATCH 1/2] feat(terraform-actions): Added invoke action address to Run and RunCreateOptions models --- src/pytfe/models/run.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pytfe/models/run.py b/src/pytfe/models/run.py index ab305a55..01185e89 100644 --- a/src/pytfe/models/run.py +++ b/src/pytfe/models/run.py @@ -125,6 +125,7 @@ class Run(BaseModel): terraform_version: str | None = Field(None, alias="terraform-version") trigger_reason: str | None = Field(None, alias="trigger-reason") variables: list[RunVariableAttr] | None = Field(None, alias="variables") + invoke_action_addrs: list[str] | None = Field(None, alias="invoke-action-addrs") # Relations apply: Apply | None = Field(None, alias="apply") @@ -292,6 +293,7 @@ class RunCreateOptions(BaseModel): policy_paths: list[str] | None = Field(None, alias="policy-paths") auto_apply: bool | None = Field(None, alias="auto-apply") variables: list[RunVariable] | None = Field(None, alias="variables") + invoke_action_addrs: list[str] | None = Field(None, alias="invoke-action-addrs") class RunReadOptions(BaseModel): From 6627c1a4314ada6d96b3a233f97cc40a6a3499d2 Mon Sep 17 00:00:00 2001 From: Sivaselvan32 Date: Mon, 18 May 2026 21:50:51 +0530 Subject: [PATCH 2/2] feat(terraform-actions): Updated examples with invoke-action flag for terraform actions --- examples/run.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/examples/run.py b/examples/run.py index 1a6735df..c7a609ef 100644 --- a/examples/run.py +++ b/examples/run.py @@ -43,6 +43,14 @@ def main(): parser.add_argument( "--run-actions", action="store_true", help="Demo run actions (safe mode)" ) + parser.add_argument( + "--invoke-action", + metavar="ACTION_ADDR", + help=( + "Invoke a Terraform Action by its address, e.g. " + "'action.aws_lambda_invoke.api_handler'. Requires --workspace-id." + ), + ) args = parser.parse_args() if not args.token: @@ -57,6 +65,10 @@ def main(): print("Error: --create-run requires --workspace-id") return + if args.invoke_action and not args.workspace_id: + print("Error: --invoke-action requires --workspace-id") + return + cfg = TFEConfig(address=args.address, token=args.token) client = TFEClient(cfg) @@ -257,6 +269,32 @@ def main(): print("\n Note: These actions are commented out for safety.") print("Uncomment and use them carefully in your own code.") + # 6) Invoke a Terraform Action + if args.invoke_action and args.workspace_id: + _print_header(f"Invoking Terraform Action: {args.invoke_action}") + + try: + workspace = Workspace(id=args.workspace_id) + + create_options = RunCreateOptions( + workspace=workspace, + message=f"Invoking {args.invoke_action} via python-tfe SDK", + invoke_action_addrs=[args.invoke_action], + ) + + run = client.runs.create(create_options) + + print(f"Run ID : {run.id}") + print(f"Status : {run.status}") + print(f"invoke-action-addrs: {run.invoke_action_addrs}") + print(f"Message : {run.message}") + + except Exception as e: + print(f"Error invoking action: {e}") + import traceback + + traceback.print_exc() + if __name__ == "__main__": main()