Advertisement
adathor

Untitled

Mar 22nd, 2022 (edited)
1,164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.18 KB | None | 0 0
  1. image: registry.example.com/devops/ansible:latest
  2. stages:
  3.   - mask_var
  4.   - init
  5.   - validate
  6.   - plan
  7.   - deploy
  8.  
  9. variables:
  10.   TF_ROOT: ${CI_PROJECT_DIR}  # The relative path to the root directory of the Terraform project
  11.   TF_STATE_NAME: ${TF_STATE_NAME:-default}  # The name of the state file used by the GitLab Managed Terraform state backend
  12.   PHASE:
  13.     value: BUILD
  14.     description: "Set the phase you're running (BUILD or DESTROY)"
  15.   TF_GITLAB_USERNAME:
  16.     value: mici
  17.     description: "Your Gitlab user name"
  18.   TF_GITLAB_TOKEN:
  19.     value: super_secrET_Token
  20.     description: "Your Gitlab access token"
  21.   TF_VAULT_PASSWORD:
  22.     value: another_super_secrET_pw
  23.     description: "The ansible-vault key to decypher variables and SA"
  24.  
  25. MaskVariable:
  26.   stage: mask_var
  27.   script:
  28.     - |
  29.       curl -s --request POST --header "PRIVATE-TOKEN: $TF_GITLAB_TOKEN" \
  30.       https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/variables --form "key=ANSIBLE_VAULT_KEY_MASKED" \
  31.       --form "value=$TF_VAULT_PASSWORD" --form "masked=true" --form "variable_type=env_var" > /dev/nul
  32.  
  33. Init:
  34.   stage: init
  35.   script:
  36.     - cd "${TF_ROOT}"
  37.     - echo $ANSIBLE_VAULT_KEY_MASKED > vault_pw.ansible
  38.     - ansible-vault decrypt serviceaccount.json terraform.tfvars --vault-password-file vault_pw.ansible
  39.     - terraform -version
  40.     - terraform init -backend-config="password=$TF_GITLAB_TOKEN" -backend-config="username=$TF_GITLAB_USERNAME"
  41.  
  42. Validate:
  43.   stage: validate
  44.   script:
  45.     - cd "${TF_ROOT}"
  46.     - echo $ANSIBLE_VAULT_KEY_MASKED > vault_pw.ansible
  47.     - ansible-vault decrypt serviceaccount.json terraform.tfvars --vault-password-file vault_pw.ansible
  48.     - terraform init -backend-config="password=$TF_GITLAB_TOKEN" -backend-config="username=$TF_GITLAB_USERNAME"
  49.     - terraform validate
  50.  
  51. Plan:
  52.   stage: plan
  53.   artifacts:
  54.     paths:
  55.     - plan.bin
  56.     expire_in: 2h
  57.   script:
  58.     - cd "${TF_ROOT}"
  59.     - echo $ANSIBLE_VAULT_KEY_MASKED > vault_pw.ansible
  60.     - ansible-vault decrypt serviceaccount.json terraform.tfvars --vault-password-file vault_pw.ansible
  61.     - terraform init -backend-config="password=$TF_GITLAB_TOKEN" -backend-config="username=$TF_GITLAB_USERNAME"
  62.     - terraform plan -input=false -out=plan.bin
  63.   only:
  64.     variables:
  65.       - $PHASE == "BUILD"
  66.  
  67. DestroyPlan:
  68.   stage: plan
  69.   artifacts:
  70.     paths:
  71.     - destroy_plan.bin
  72.     expire_in: 2h
  73.   script:
  74.     - cd "${TF_ROOT}"
  75.     - echo $ANSIBLE_VAULT_KEY_MASKED > vault_pw.ansible
  76.     - ansible-vault decrypt serviceaccount.json terraform.tfvars --vault-password-file vault_pw.ansible
  77.     - terraform init -backend-config="password=$TF_GITLAB_TOKEN" -backend-config="username=$TF_GITLAB_USERNAME"
  78.     - terraform plan -destroy -input=false -out=destroy_plan.bin
  79.   only:
  80.     variables:
  81.       - $PHASE == "DESTROY"
  82.  
  83. Apply:
  84.   stage: deploy
  85.   when: manual
  86.   script:
  87.     - cd "${TF_ROOT}"
  88.     - echo $ANSIBLE_VAULT_KEY_MASKED > vault_pw.ansible
  89.     - ansible-vault decrypt serviceaccount.json terraform.tfvars --vault-password-file vault_pw.ansible
  90.     - terraform init -backend-config="password=$TF_GITLAB_TOKEN" -backend-config="username=$TF_GITLAB_USERNAME"
  91.     - terraform apply -auto-approve -input=false plan.bin
  92.     - |
  93.       curl -s --request DELETE --header "PRIVATE-TOKEN: $TF_GITLAB_TOKEN" \
  94.       https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/variables/ANSIBLE_VAULT_KEY_MASKED > /dev/nul
  95.   only:
  96.     variables:
  97.       - $PHASE == "BUILD"
  98.   environment:
  99.     name: snunv
  100.  
  101. Destroy:
  102.   stage: deploy
  103.   when: manual
  104.   script:
  105.     - cd "${TF_ROOT}"
  106.     - echo $ANSIBLE_VAULT_KEY_MASKED > vault_pw.ansible
  107.     - ansible-vault decrypt serviceaccount.json terraform.tfvars --vault-password-file vault_pw.ansible
  108.     - terraform init -backend-config="password=$TF_GITLAB_TOKEN" -backend-config="username=$TF_GITLAB_USERNAME"
  109.     - terraform apply -auto-approve -input=false destroy_plan.bin
  110.     - |
  111.       curl -s --request DELETE --header "PRIVATE-TOKEN: $TF_GITLAB_TOKEN" \
  112.       https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/variables/ANSIBLE_VAULT_KEY_MASKED > /dev/nul
  113.   only:
  114.     variables:
  115.       - $PHASE == "DESTROY"
  116.   environment:
  117.     name: snunv
  118.     action: stop
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement