Skip to content

Commit

Permalink
Workflows for testing Terraform changes (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
dfoster-oracle authored Sep 23, 2024
1 parent d11f814 commit f3ef750
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 0 deletions.
70 changes: 70 additions & 0 deletions .github/workflows/change-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Infrastructure Change Test
on:
pull_request:
branches:
- 'main'
paths:
- "infrastructure.tf"
- 'infrastructure/**'
jobs:
change-test:
runs-on: ubuntu-latest
name: Create and teardown cluster infrastructure
env:
OCI_CLI_USER: ${{ secrets.OCI_CLI_USER }}
OCI_CLI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
OCI_CLI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
OCI_CLI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
OCI_CLI_REGION: ${{ secrets.OCI_CLI_REGION }}
OPENSHIFT_IMAGE_SOURCE_URI: ${{ secrets.OPENSHIFT_IMAGE_SOURCE_URI }}
COMPARTMENT_OCID: ${{ secrets.COMPARTMENT_OCID }}
ZONE_DNS_SUFFIX: ${{ secrets.ZONE_DNS_SUFFIX }}
CLUSTER_NAME: change-test
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set NOW env variable
run: echo "NOW=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV

- name: Create Terraform ZIP
run: |
if [ -f infrastructure.tf ]; then
zip infrastructure.zip infrastructure.tf
elif [ -d infrastructure ]; then
zip -j infrastructure.zip infrastructure/data.tf infrastructure/locals.tf infrastructure/main.tf infrastructure/output.tf infrastructure/schema.yaml infrastructure/variables.tf
else
echo "Could not find infrastructure.tf or infrastructure directory"
exit 1
fi
- name: Create RMS Stack
uses: oracle-actions/[email protected]
id: create-stack
with:
command: 'resource-manager stack create --compartment-id ${{ env.COMPARTMENT_OCID }} --display-name ${{ github.job }}-${{ env.NOW }} --config-source infrastructure.zip --variables "{\"compartment_ocid\": \"${{ env.COMPARTMENT_OCID }}\", \"cluster_name\": \"${{ env.CLUSTER_NAME }}-${{ env.NOW }}\", \"openshift_image_source_uri\": \"${{ env.OPENSHIFT_IMAGE_SOURCE_URI }}\", \"region\": \"${{ env.OCI_CLI_REGION }}\", \"tenancy_ocid\": \"${{ env.OCI_CLI_TENANCY }}\", \"zone_dns\": \"${{ env.CLUSTER_NAME }}--${{ env.NOW }}${{ env.ZONE_DNS_SUFFIX }}\"}"'
query: 'data.id'

- name: RMS Stack Plan Job
uses: oracle-actions/[email protected]
id: stack-plan-job
with:
command: 'resource-manager job create-plan-job --wait-for-state SUCCEEDED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: RMS Stack Apply Job
uses: oracle-actions/[email protected]
id: stack-apply-job
with:
command: 'resource-manager job create-apply-job --wait-for-state SUCCEEDED --max-wait-seconds 2400 --execution-plan-strategy AUTO_APPROVED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: RMS Stack Destroy Job
uses: oracle-actions/[email protected]
id: stack-destroy-job
with:
command: 'resource-manager job create-destroy-job --wait-for-state SUCCEEDED --max-wait-seconds 2400 --execution-plan-strategy AUTO_APPROVED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: Destroy RMS Stack
uses: oracle-actions/[email protected]
id: destroy-stack
with:
command: 'resource-manager stack delete --force --stack-id ${{ steps.create-stack.outputs.raw_output }}'
131 changes: 131 additions & 0 deletions .github/workflows/smoke-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: Infrastructure Smoke Test
on:
schedule:
- cron: "20 5 */2 * *"
jobs:
smoke-test-bm-single-ad:
runs-on: ubuntu-latest
name: Create BM cluster infrastructure
env:
OCI_CLI_USER: ${{ secrets.OCI_CLI_USER }}
OCI_CLI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
OCI_CLI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
OCI_CLI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
OCI_CLI_REGION: ${{ secrets.OCI_CLI_REGION }}
OPENSHIFT_IMAGE_SOURCE_URI: ${{ secrets.OPENSHIFT_IMAGE_SOURCE_URI }}
COMPARTMENT_OCID: ${{ secrets.COMPARTMENT_OCID }}
ZONE_DNS_SUFFIX: ${{ secrets.ZONE_DNS_SUFFIX }}
CLUSTER_NAME: smoke-test-bm
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set NOW env variable
run: echo "NOW=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV

- name: Create Terraform ZIP
run: |
if [ -f infrastructure.tf ]; then
zip infrastructure.zip infrastructure.tf
elif [ -d infrastructure ]; then
zip -j infrastructure.zip infrastructure/data.tf infrastructure/locals.tf infrastructure/main.tf infrastructure/output.tf infrastructure/schema.yaml infrastructure/variables.tf
else
echo "Could not find infrastructure.tf or infrastructure directory"
exit 1
fi
- name: Create RMS Stack
uses: oracle-actions/[email protected]
id: create-stack
with:
command: 'resource-manager stack create --compartment-id ${{ env.COMPARTMENT_OCID }} --display-name ${{ github.job }}-${{ env.NOW }} --config-source infrastructure.zip --variables "{\"compartment_ocid\": \"${{ env.COMPARTMENT_OCID }}\", \"cluster_name\": \"${{ env.CLUSTER_NAME }}-${{ env.NOW }}\", \"control_plane_shape\": \"BM.Standard3.64\", \"control_plane_ocpu\": \"64\", \"control_plane_memory\": \"1024\", \"compute_shape\": \"BM.Standard3.64\", \"compute_ocpu\": \"64\", \"compute_memory\": \"1024\", \"openshift_image_source_uri\": \"${{ env.OPENSHIFT_IMAGE_SOURCE_URI }}\", \"region\": \"${{ env.OCI_CLI_REGION }}\", \"tenancy_ocid\": \"${{ env.OCI_CLI_TENANCY }}\", \"zone_dns\": \"${{ env.CLUSTER_NAME }}-${{ env.NOW }}${{ env.ZONE_DNS_SUFFIX }}\"}"'
query: 'data.id'

- name: RMS Stack Plan Job
uses: oracle-actions/[email protected]
id: stack-plan-job
with:
command: 'resource-manager job create-plan-job --wait-for-state SUCCEEDED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: RMS Stack Apply Job
uses: oracle-actions/[email protected]
id: stack-apply-job
with:
command: 'resource-manager job create-apply-job --wait-for-state SUCCEEDED --max-wait-seconds 2400 --execution-plan-strategy AUTO_APPROVED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: Teardown BM Infrastructure
uses: oracle-actions/[email protected]
id: teardown-bm-infra
with:
command: 'resource-manager job create-destroy-job --wait-for-state SUCCEEDED --max-wait-seconds 2400 --execution-plan-strategy AUTO_APPROVED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: Destroy RMS Stack
uses: oracle-actions/[email protected]
id: destroy-stack
with:
command: 'resource-manager stack delete --force --stack-id ${{ steps.create-stack.outputs.raw_output }}'


smoke-test-vm-multi-ad:
needs: [smoke-test-bm-single-ad]
runs-on: ubuntu-latest
name: Create VM cluster infrastructure in multi-ad region
env:
OCI_CLI_USER: ${{ secrets.OCI_CLI_USER }}
OCI_CLI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
OCI_CLI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
OCI_CLI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
OCI_CLI_REGION: ${{ secrets.OCI_CLI_REGION }}
OPENSHIFT_IMAGE_SOURCE_URI: ${{ secrets.OPENSHIFT_IMAGE_SOURCE_URI }}
COMPARTMENT_OCID: ${{ secrets.COMPARTMENT_OCID }}
ZONE_DNS_SUFFIX: ${{ secrets.ZONE_DNS_SUFFIX }}
CLUSTER_NAME: smoke-test-vm-multi-ad
MUTLI_AD_REGION: eu-frankfurt-1
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set NOW env variable
run: echo "NOW=$(date +'%Y%m%d%H%M%S')" >> $GITHUB_ENV

- name: Create Terraform ZIP
run: |
if [ -f infrastructure.tf ]; then
zip infrastructure.zip infrastructure.tf
elif [ -d infrastructure ]; then
zip -j infrastructure.zip infrastructure/data.tf infrastructure/locals.tf infrastructure/main.tf infrastructure/output.tf infrastructure/schema.yaml infrastructure/variables.tf
else
echo "Could not find infrastructure.tf or infrastructure directory"
exit 1
fi
- name: Create RMS Stack
uses: oracle-actions/[email protected]
id: create-stack
with:
command: 'resource-manager stack create --compartment-id ${{ env.COMPARTMENT_OCID }} --display-name ${{ github.job }}-${{ env.NOW }} --config-source infrastructure.zip --variables "{\"compartment_ocid\": \"${{ env.COMPARTMENT_OCID }}\", \"cluster_name\": \"${{ env.CLUSTER_NAME }}-${{ env.NOW }}\", \"openshift_image_source_uri\": \"${{ env.OPENSHIFT_IMAGE_SOURCE_URI }}\", \"region\": \"${{ env.MUTLI_AD_REGION }}\", \"tenancy_ocid\": \"${{ env.OCI_CLI_TENANCY }}\", \"zone_dns\": \"${{ env.CLUSTER_NAME }}-${{ env.NOW }}${{ env.ZONE_DNS_SUFFIX }}\"}"'
query: 'data.id'

- name: RMS Stack Plan Job
uses: oracle-actions/[email protected]
id: stack-plan-job
with:
command: 'resource-manager job create-plan-job --wait-for-state SUCCEEDED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: RMS Stack Apply Job
uses: oracle-actions/[email protected]
id: stack-apply-job
with:
command: 'resource-manager job create-apply-job --wait-for-state SUCCEEDED --max-wait-seconds 2400 --execution-plan-strategy AUTO_APPROVED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: Teardown VM Multi AD Infrastructure
uses: oracle-actions/[email protected]
id: teardown-vm-multi-ad-infra
with:
command: 'resource-manager job create-destroy-job --wait-for-state SUCCEEDED --max-wait-seconds 2400 --execution-plan-strategy AUTO_APPROVED --stack-id ${{ steps.create-stack.outputs.raw_output }}'

- name: Destroy RMS Stack
uses: oracle-actions/[email protected]
id: destroy-stack
with:
command: 'resource-manager stack delete --force --stack-id ${{ steps.create-stack.outputs.raw_output }}'
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
.idea/
.DS_Store
.dev
.secrets

### Terraform ###
# Local .terraform directories
Expand Down

0 comments on commit f3ef750

Please sign in to comment.