@@ -3,33 +3,82 @@ name: "Fetch 1 Remote State Output Variable"
33on :
44 workflow_call :
55 inputs :
6+ workdir :
7+ required : false
8+ type : string
9+ default : ${{ github.workspace }}
610 variable_name :
711 description : " var to fetch from the state file"
812 required : true
913 type : string
10- artifact_id :
11- description : " id of needed previous terraform job"
12- required : true
14+ terraform_version :
15+ required : false
16+ type : string
17+ default : " latest"
18+ aws_github_role_name :
19+ required : false
20+ type : string
21+ default : " github_oidc_readonly"
22+ environment_name :
23+ required : false
1324 type : string
25+ default : ${{ github.base_ref }}
26+ terraform_workspace :
27+ required : false
28+ type : string
29+ default : ${{ github.base_ref || github.ref_name }}
1430 outputs :
1531 TF_OUTPUT_VAR :
1632 description : " The value of the 1 variable passed as input"
1733 value : ${{ jobs.fetch-vars.outputs.TF_OUTPUT_VAR }}
1834jobs :
1935 fetch-vars :
2036 runs-on : ubuntu-latest
37+ environment :
38+ name : ${{ inputs.environment_name }}
39+ defaults :
40+ run :
41+ working-directory : ${{ inputs.workdir || github.workspace }}
42+ env :
43+ TERRAFORM_DEFAULT_BACKEND : tfstate-${{ vars.AWS_ACCOUNT_ID || vars.PULL_REQUEST_AWS_ACCOUNT_ID }}
44+ AWS_ACCOUNT_ID : ${{ vars.AWS_ACCOUNT_ID || vars.PULL_REQUEST_AWS_ACCOUNT_ID }}
45+ AWS_REGION : ${{ vars.AWS_REGION || vars.AWS_DEFAULT_REGION }}
2146 outputs :
2247 TF_OUTPUT_VAR : ${{ steps.set-variables.outputs.tf_output_var }}
23-
2448 steps :
25- - name : Get Output
26- uses : actions/download-artifact@v5
49+ - name : Checkout
50+ uses : actions/checkout@v6
51+
52+ - uses : hashicorp/setup-terraform@v3
2753 with :
28- name : tf-output-${{ github.run_id }}-${{ github.run_attempt }}-${{ inputs.artifact_id }}
54+ terraform_version : ${{ inputs.terraform_version }}
55+ terraform_wrapper : false
56+
57+ - name : Configure AWS Credentials
58+ uses : aws-actions/configure-aws-credentials@v5
59+ with :
60+ aws-region : ${{ env.AWS_REGION }}
61+ role-to-assume : arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/${{ inputs.aws_github_role_name }}
62+
63+ - name : Terraform Init
64+ id : init
65+ run : terraform init -backend-config="bucket=${{ env.TERRAFORM_DEFAULT_BACKEND }}"
66+
67+ - name : Terraform Workspace
68+ id : workspace
69+ run : terraform workspace select ${{ inputs.terraform_workspace }}
2970
30- - name : Check var presence
31- run : grep ${{ inputs.variable_name }} tf-output.json >/dev/null
71+ - name : Terraform Get Output
72+ run : terraform output -json > tf-output.json
3273
3374 - name : Set variables
3475 id : set-variables
35- run : echo "tf_output_var=`jq -r '.${{ inputs.variable_name }}.value' tf-output.json`" >> $GITHUB_OUTPUT
76+ env :
77+ VAR_NAME : ${{ inputs.variable_name }}
78+ run : |
79+ value=$(jq -r --arg key "$VAR_NAME" '.[$key].value' tf-output.json)
80+ if [ "$value" = "null" ] || [ -z "$value" ]; then
81+ echo "::error::Variable '$VAR_NAME' not found in terraform output"
82+ exit 1
83+ fi
84+ echo "tf_output_var=$value" >> "$GITHUB_OUTPUT"
0 commit comments