Home > front end >  how does GitHub find terraform files after moving them to a folder, instead of root directory
how does GitHub find terraform files after moving them to a folder, instead of root directory

Time:12-06

I have this GitHub repo:

_
 |_ .github/workflows/myworkflow.yaml
 |_ terraform/terraformInFolder.tf
 |_ terraformInRootDir.tf

my workflow runs terraform bash scripts like terraform apply, vaidate, etc... it can only run the .tf files in the root directory. I couldn't find a way to run the files in the folder. I tried to use with: path: but with cannot be used with run.

Here is my workflow:

name: deployment-workflow

on: push
jobs:
  terraform_apply:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1


    - name: Verify Terraform version
      run: terraform --version

    - name: Terraform init
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform init -input=false

    - name: Terraform validation
      run: terraform validate

    - name: Terraform apply
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform apply -auto-approve -input=false 

How can i include the path to my .tf files in the folder?

CodePudding user response:

You could use the parameter

-chdir=< folder location >

to redirect the execution of terraform. I update your code to this:

name: deployment-workflow

on: push
jobs:
  terraform_apply:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1


    - name: Verify Terraform version
      run: terraform --version

    - name: Terraform init
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform -chdir="./terraform" init -input=false

    - name: Terraform validation
      run: terraform -chdir="./terraform" validate -no-color

    - name: Terraform apply
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      run: terraform -chdir="./terraform" apply -auto-approve -input=false 

CodePudding user response:

Terraform doesn’t expect you to break up your modules using directories like this. All files in a module are loose in the top level of the module’s folder. In the tree you provided, your root module contains only a single file: terraformInRootDir.tf. The subdir is ignored.

If you want to add structure, you can do so by creating submodules. The files of a submodule are in a subdirectory, but you have to declare the submodule in code by specifying the path and passing the input variables.

You can learn more about how Hashicorp recommends you structure your repo in the docs.

  • Related