|
13 | 13 | - '**.j2'
|
14 | 14 | - '**.ps1'
|
15 | 15 | - '**.cfg'
|
| 16 | + # Allow manual running of workflow |
| 17 | + workflow_dispatch: |
| 18 | + |
| 19 | + # Allow permissions for AWS auth |
| 20 | + permissions: |
| 21 | + id-token: write |
| 22 | + contents: read |
| 23 | + pull-requests: read |
16 | 24 |
|
17 | 25 | # A workflow run is made up of one or more jobs
|
18 | 26 | # that can run sequentially or in parallel
|
19 | 27 | jobs:
|
20 | 28 | # This will create messages for first time contributers and direct them to the Discord server
|
21 | 29 | welcome:
|
22 |
| - runs-on: ubuntu-latest |
| 30 | + runs-on: self-hosted |
23 | 31 |
|
24 | 32 | steps:
|
25 | 33 | - uses: actions/first-interaction@main
|
|
32 | 40 | # This workflow contains a single job that tests the playbook
|
33 | 41 | playbook-test:
|
34 | 42 | # The type of runner that the job will run on
|
35 |
| - runs-on: ubuntu-latest |
| 43 | + runs-on: self-hosted |
36 | 44 | env:
|
37 | 45 | ENABLE_DEBUG: ${{ vars.ENABLE_DEBUG }}
|
38 | 46 | # Imported as a variable by terraform
|
39 | 47 | TF_VAR_repository: ${{ github.event.repository.name }}
|
| 48 | + AWS_REGION: "us-east-1" |
| 49 | + ANSIBLE_VERSION: ${{ vars.ANSIBLE_RUNNER_VERSION }} |
40 | 50 | defaults:
|
41 | 51 | run:
|
42 | 52 | shell: bash
|
43 | 53 | working-directory: .github/workflows/github_linux_IaC
|
| 54 | + # working-directory: .github/workflows |
44 | 55 |
|
45 | 56 | steps:
|
46 |
| - - name: Clone ${{ github.event.repository.name }} |
| 57 | + |
| 58 | + - name: Git clone the lockdown repository to test |
47 | 59 | uses: actions/checkout@v4
|
48 | 60 | with:
|
49 | 61 | ref: ${{ github.event.pull_request.head.sha }}
|
50 | 62 |
|
| 63 | + - name: If a variable for IAC_BRANCH is set use that branch |
| 64 | + working-directory: .github/workflows |
| 65 | + run: | |
| 66 | + if [ ${{ vars.IAC_BRANCH }} != '' ]; then |
| 67 | + echo "IAC_BRANCH=${{ vars.IAC_BRANCH }}" >> $GITHUB_ENV |
| 68 | + echo "Pipeline using the following IAC branch ${{ vars.IAC_BRANCH }}" |
| 69 | + else |
| 70 | + echo IAC_BRANCH=main >> $GITHUB_ENV |
| 71 | + fi |
| 72 | +
|
| 73 | +
|
51 | 74 | # Pull in terraform code for linux servers
|
52 | 75 | - name: Clone GitHub IaC plan
|
53 | 76 | uses: actions/checkout@v4
|
54 | 77 | with:
|
55 | 78 | repository: ansible-lockdown/github_linux_IaC
|
56 | 79 | path: .github/workflows/github_linux_IaC
|
| 80 | + ref: ${{ env.IAC_BRANCH }} |
57 | 81 |
|
58 |
| - - name: Add_ssh_key |
59 |
| - working-directory: .github/workflows |
60 |
| - env: |
61 |
| - SSH_AUTH_SOCK: /tmp/ssh_agent.sock |
62 |
| - PRIVATE_KEY: "${{ secrets.SSH_PRV_KEY }}" |
63 |
| - run: | |
64 |
| - mkdir .ssh |
65 |
| - chmod 700 .ssh |
66 |
| - echo $PRIVATE_KEY > .ssh/github_actions.pem |
67 |
| - chmod 600 .ssh/github_actions.pem |
| 82 | + # Uses dedicated restricted role and policy to enable this only for this task |
| 83 | + # No credentials are part of github for AWS auth |
| 84 | + - name: configure aws credentials |
| 85 | + uses: aws-actions/configure-aws-credentials@main |
| 86 | + with: |
| 87 | + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE }} |
| 88 | + role-session-name: ${{ secrets.AWS_ROLE_SESSION }} |
| 89 | + aws-region: ${{ env.AWS_REGION }} |
68 | 90 |
|
69 | 91 | - name: DEBUG - Show IaC files
|
70 | 92 | if: env.ENABLE_DEBUG == 'true'
|
71 | 93 | run: |
|
72 | 94 | echo "OSVAR = $OSVAR"
|
73 | 95 | echo "benchmark_type = $benchmark_type"
|
| 96 | + echo "PRIVSUBNET_ID = $AWS_PRIVSUBNET_ID" |
| 97 | + echo "VPC_ID" = $AWS_VPC_SECGRP_ID" |
74 | 98 | pwd
|
75 | 99 | ls
|
76 | 100 | env:
|
77 | 101 | # Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
78 | 102 | OSVAR: ${{ vars.OSVAR }}
|
79 | 103 | benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
| 104 | + PRIVSUBNET_ID: ${{ secrets.AWS_PRIVSUBNET_ID }} |
| 105 | + VPC_ID: ${{ secrets.AWS_VPC_SECGRP_ID }} |
80 | 106 |
|
81 |
| - - name: Terraform_Init |
| 107 | + - name: Tofu init |
82 | 108 | id: init
|
83 |
| - run: terraform init |
| 109 | + run: tofu init |
84 | 110 | env:
|
85 | 111 | # Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
86 | 112 | OSVAR: ${{ vars.OSVAR }}
|
87 | 113 | TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
88 | 114 |
|
89 |
| - - name: Terraform_Validate |
| 115 | + - name: Tofu validate |
90 | 116 | id: validate
|
91 |
| - run: terraform validate |
| 117 | + run: tofu validate |
92 | 118 | env:
|
93 | 119 | # Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
94 | 120 | OSVAR: ${{ vars.OSVAR }}
|
95 | 121 | TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
96 | 122 |
|
97 |
| - - name: Terraform_Apply |
| 123 | + - name: Tofu apply |
98 | 124 | id: apply
|
99 | 125 | env:
|
100 |
| - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} |
101 |
| - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} |
102 | 126 | OSVAR: ${{ vars.OSVAR }}
|
103 | 127 | TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
104 |
| - run: terraform apply -var-file "github_vars.tfvars" -var-file "${OSVAR}.tfvars" --auto-approve -input=false |
| 128 | + TF_VAR_privsubnet_id: ${{ secrets.AWS_PRIVSUBNET_ID }} |
| 129 | + TF_VAR_vpc_secgrp_id: ${{ secrets.AWS_VPC_SECGRP_ID }} |
| 130 | + run: tofu apply -var-file "${OSVAR}.tfvars" --auto-approve -input=false |
105 | 131 |
|
106 | 132 | ## Debug Section
|
107 | 133 | - name: DEBUG - Show Ansible hostfile
|
|
110 | 136 |
|
111 | 137 | # Aws deployments taking a while to come up insert sleep or playbook fails
|
112 | 138 |
|
113 |
| - - name: Sleep for 60 seconds |
| 139 | + - name: Sleep to allow system to come up |
114 | 140 | run: sleep ${{ vars.BUILD_SLEEPTIME }}
|
115 | 141 |
|
116 | 142 | # Run the Ansible playbook
|
117 | 143 | - name: Run_Ansible_Playbook
|
118 |
| - uses: arillso/action.playbook@master |
119 |
| - with: |
120 |
| - playbook: site.yml |
121 |
| - inventory: .github/workflows/github_linux_IaC/hosts.yml |
122 |
| - galaxy_file: collections/requirements.yml |
123 |
| - private_key: ${{ secrets.SSH_PRV_KEY }} |
124 |
| - # verbose: 3 |
125 | 144 | env:
|
126 | 145 | ANSIBLE_HOST_KEY_CHECKING: "false"
|
127 | 146 | ANSIBLE_DEPRECATION_WARNINGS: "false"
|
128 |
| - ANSIBLE_INJECT_FACT_VARS: "false" |
| 147 | + run: | |
| 148 | + /opt/ansible_${{ env.ANSIBLE_VERSION }}_venv/bin/ansible-playbook -i hosts.yml --private-key ~/.ssh/le_runner ../../../site.yml |
129 | 149 |
|
130 | 150 | # Remove test system - User secrets to keep if necessary
|
131 | 151 |
|
132 |
| - - name: Terraform_Destroy |
| 152 | + - name: Tofu Destroy |
133 | 153 | if: always() && env.ENABLE_DEBUG == 'false'
|
134 | 154 | env:
|
135 |
| - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} |
136 |
| - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} |
137 | 155 | OSVAR: ${{ vars.OSVAR }}
|
138 | 156 | TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
139 |
| - run: terraform destroy -var-file "github_vars.tfvars" -var-file "${OSVAR}.tfvars" --auto-approve -input=false |
| 157 | + TF_VAR_privsubnet_id: ${{ secrets.AWS_PRIVSUBNET_ID }} |
| 158 | + TF_VAR_vpc_secgrp_id: ${{ secrets.AWS_VPC_SECGRP_ID }} |
| 159 | + run: tofu destroy -var-file "${OSVAR}.tfvars" --auto-approve -input=false |
0 commit comments