Terraform Cloud API 이용하여 TC의 변수 가져오기
Terraform Cloud 를 사용하는 경우 local에서 terraform을 실행하려면 variable 을 local에 다운로드 받아야 한다. 이 것을 api를 이용하여 다운받을 수 있다.
처음에는 코드를 직접 짰는데 https://www.terraform.io/docs/cloud/api/index.html 에서 Client libraries and tools 를 보면 여러가지 shell, python, ruby, .NET 클라이언트 라이브러리가 나온다. 나중에는 이것을 참고해 보아야 겠다.
curl 이용하여 Terraform Cloud 의 특정 workspace에서 variables 을 json 으로 가져와서 python에서 변수를 뽑아보았다.
https://www.terraform.io/docs/cloud/api/variables.html
Terraform Cloud 의 변수 가져와 json 파일 만들기
TOKEN="xxxxxxxxxxxxxxxx"
curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
"https://app.terraform.io/api/v2/workspaces/ws-xxxxxx/vars" > example-prd
json 파일에서 terraform.tfvar 형태로 변수 파일 만들기
#!/usr/bin/env python3
import json
import sys
'''
TOKEN="xxxxxxxxxxxxxxxx"
curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
"https://app.terraform.io/api/v2/workspaces/ws-xxxxxx/vars" > example-prd
'''
tc_json_file = "example-prd"
# cat scnt-prd | jq .data > scnt.json
with open(tc_json_file) as f:
json_data = json.load(f)
json_data_lists=json_data["data"]
for json_data_lis in json_data_lists:
dict_json_attributes=json_data_lis['attributes']
#print(dict_json_attributes)
key = dict_json_attributes['key']
if key == "TF_VAR_github_token" or key == "AWS_ACCESS_KEY_ID" or key == "AWS_SECRET_ACCESS_KEY" :
prefix = "#"
else:
prefix = ""
#value = dict_json_attributes['value']
if dict_json_attributes['value']:
value = dict_json_attributes['value']
else:
value = 'none'
print(prefix + key + " = " + "\"" + value + "\"")
그런데 이런 비슷한 용도로 만들어진 프로그램들이 여러가지가 있다.
https://www.terraform.io/docs/cloud/api/index.html 의 문서에서 여러가지 Client libraries and tools 소개.
이중에서 쉘스크립트로 된 tfh 를 이용해보았다. git clone 해서 설치하면 됨.
GitHub - hashicorp-community/tf-helper: Commands for performing operations on Terraform states, configurations, TFE using the API, and more. Please target all PRs to the master branch, not the release branch.
./tfh pullvars -token xxxxxxxxxxxxxxxxxxxxxx -org xxxxxxxxxxxx -name xxxxxxxxxxxx
./tfh pullvars -token xxxxxxxxxxxxxxxxxxxxxx -org xxxxxxxxxxxx -name xxxxxxxxxxxx
| grep ^[a-zA-Z] | sort > var.txt
$ cat var.txt
a_domain = "aaa"
b_domain = "bbb"