Skip to content

Manage internal k8s resources (e.g. application secrets or reverse proxy ingresses) #7

Manage internal k8s resources (e.g. application secrets or reverse proxy ingresses)

Manage internal k8s resources (e.g. application secrets or reverse proxy ingresses) #7

name: Manage internal k8s resources (e.g. application secrets or reverse proxy ingresses)
on:
workflow_dispatch:
inputs:
INFRASTRUCTURE_OPERATION:
type: choice
options: [ 'deploy-k8s-resources', 'destroy-k8s-resources' ]
default: deploy-k8s-resources
description: 'Infrastructure operation'
ENVIRONMENT:
type: choice
options: [ 'sbx' ]
default: sbx
description: 'Environment on which to deploy. Dev, qas, staging, prod environments not considered'
ACR_LOGIN_SERVER:
description: 'Azure Container Registry login server'
type: string
ACR_USERNAME:
description: 'Azure Container Registry username'
type: string
ACR_PASSWORD:
description: 'Azure Container Registry password'
type: string
jobs:
deploy-k8s-resources:
runs-on: ubuntu-latest
environment: ${{ inputs.ENVIRONMENT }}
env:
ARM_SUBSCRIPTION_ID: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
ARM_TENANT_ID: '${{ secrets.ARM_TENANT_ID }}'
ARM_CLIENT_ID: '${{ secrets.ARM_CLIENT_ID }}'
ARM_CLIENT_SECRET: '${{ secrets.ARM_CLIENT_SECRET }}'
if: ${{ inputs.INFRASTRUCTURE_OPERATION == 'deploy-k8s-resources' }}
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Set up Terraform
uses: hashicorp/setup-terraform@v3
- name: Download the ~/.kube/config
shell: bash
run: |
terraform init \
-backend-config="subscription_id=${{ env.ARM_SUBSCRIPTION_ID }}" \
-backend-config="storage_account_name=gopoctbsbxsa001" \
-backend-config="resource_group_name=gopoctb-sbx-rg001" \
-backend-config="container_name=gopoctbsbxsac001" \
-backend-config="key=${{ inputs.ENVIRONMENT }}/cloud-infra/terraform.tfstate"
terraform output aks_kube_config_list | awk '/^ apiVersion:/,/^ EOT,$/' | sed 's/^ //' > ./config
mkdir -vp ~/.kube
head -n -3 ./config > ~/.kube/config
cat ~/.kube/config
working-directory: ./terraform/envs/${{ inputs.ENVIRONMENT }}/cloud-infra
- name: Terraform Init # requires a Storage Account backend deployed trough storage-account-backend-deploy workflow step
run: |
terraform init \
-backend-config="subscription_id=${{ env.ARM_SUBSCRIPTION_ID }}" \
-backend-config="storage_account_name=gopoctbsbxsa001" \
-backend-config="resource_group_name=gopoctb-sbx-rg001" \
-backend-config="container_name=gopoctbsbxsac001" \
-backend-config="key=${{ inputs.ENVIRONMENT }}/k8s-internal/terraform.tfstate"
working-directory: ./terraform/envs/${{ inputs.ENVIRONMENT }}/k8s-internal
- name: Deploy application k8s resources
shell: bash
run: terraform apply --auto-approve
continue-on-error: false
working-directory: ./terraform/envs/${{ inputs.ENVIRONMENT }}/k8s-internal
env:
TF_VAR_acr_username: "${{ inputs.ACR_USERNAME }}"
TF_VAR_acr_password: "${{ inputs.ACR_PASSWORD }}"
TF_VAR_acr_login_server_name: "${{ inputs.ACR_LOGIN_SERVER }}"
destroy-k8s-resources:
runs-on: ubuntu-latest
environment: ${{ inputs.ENVIRONMENT }}
env:
ARM_SUBSCRIPTION_ID: '${{ secrets.ARM_SUBSCRIPTION_ID }}'
ARM_TENANT_ID: '${{ secrets.ARM_TENANT_ID }}'
ARM_CLIENT_ID: '${{ secrets.ARM_CLIENT_ID }}'
ARM_CLIENT_SECRET: '${{ secrets.ARM_CLIENT_SECRET }}'
if: ${{ inputs.INFRASTRUCTURE_OPERATION == 'destroy-k8s-resources' }}
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Set up Terraform
uses: hashicorp/setup-terraform@v3
- name: Download the ~/.kube/config
shell: bash
run: |
terraform init \
-backend-config="subscription_id=${{ env.ARM_SUBSCRIPTION_ID }}" \
-backend-config="storage_account_name=gopoctbsbxsa001" \
-backend-config="resource_group_name=gopoctb-sbx-rg001" \
-backend-config="container_name=gopoctbsbxsac001" \
-backend-config="key=${{ inputs.ENVIRONMENT }}/cloud-infra/terraform.tfstate"
terraform output aks_kube_config_list | awk '/^ apiVersion:/,/^ EOT,$/' | sed 's/^ //' > ./config
mkdir -vp ~/.kube
head -n -3 ./config > ~/.kube/config
cat ~/.kube/config
working-directory: ./terraform/envs/${{ inputs.ENVIRONMENT }}/cloud-infra
- name: Terraform Init # requires a Storage Account backend deployed trough storage-account-backend-deploy workflow step
run: |
terraform init \
-backend-config="subscription_id=${{ env.ARM_SUBSCRIPTION_ID }}" \
-backend-config="storage_account_name=gopoctbsbxsa001" \
-backend-config="resource_group_name=gopoctb-sbx-rg001" \
-backend-config="container_name=gopoctbsbxsac001" \
-backend-config="key=${{ inputs.ENVIRONMENT }}/k8s-internal/terraform.tfstate"
working-directory: ./terraform/envs/${{ inputs.ENVIRONMENT }}/k8s-internal
- name: Destroy application k8s resources
run: terraform destroy --auto-approve
continue-on-error: false
working-directory: ./terraform/envs/${{ inputs.ENVIRONMENT }}/k8s-internal