지정된 yaml 파일을 다운로드 한 다음 yaml을 k8s 구성 맵의 데이터 필드에 대한 소스로 사용하는 TF 모듈을 만들고 있습니다. 하나의 데이터 키-값 쌍 (yaml 파일)으로 여러 configmap을 만드는 작업 솔루션이 있지만 하나의 configmap 당 여러 키-값 쌍 (yaml 파일)에 대한 지원도 추가해야합니다.
main.tf
data "http" "config-map" {
for_each = var.cloud-configmap
url = format("https://%s", each.value.url)
request_headers = {
Accept = "text/plain"
}
}
resource "kubernetes_config_map" "configmap" {
for_each = var.cloud-configmap
metadata {
name = each.value.name
namespace = each.value.namespace
}
data = {
"${each.value.data-keyname}" = data.http.config-map[each.key].body
}
}
variables.tf
variable "cloud-configmap" {
type = map(object({
url = string
name = string
namespace = string
data-keyname = string
}))
default = {
"cm1" = {
url = "someurl.com/file1.yaml"
name = "cm-name"
namespace = "test"
data-keyname = "file1.yml"
},
"cm2" = {
url = "someurl.com/file2.yaml"
name = "cm-name2"
namespace = "default"
data-keyname = "file2.yml"
}
}
}
지금까지이 코드는 작동하지만 variables.tf 파일을 다음과 같이 변경하고 싶습니다.
variable "cloud-configmap" {
type = map(object({
name = string
namespace = string
cm-files = list(object({
url = string
data-keyname = string
}))
}))
default = {
"cm1" = {
name = "cm-name"
namespace = "testnamespace"
cm-files = [{
url = "someurl.com/file1.yaml"
data-keyname = "file1.yml"
},
{
url = "someurl.com/file2.yaml"
data-keyname = "file2.yml"
}]
},
"cm2" = {
name = "cm-name2"
namespace = "default"
cm-files = [{
url = "someurl.com/file3.yaml"
data-keyname = "file3.yml"
},
{
url = "someurl.com/file4.yaml"
data-keyname = "file4.yml"
}]
}
}
}
그리고이 변경 후에는 중첩 된 개체 cm- 파일 목록을 반복하여 데이터 필드에 여러 키-값 쌍이있는 configmap을 만드는 방법을 모릅니다 . 어떤 도움이나 조언을 주시면 감사하겠습니다!
여기에 중첩 된 for 루프를 사용하여 꽤 많이 할 것입니다. 다음은 변수 제약 조건을 고려하여 제가 생각해 낼 수 있었던 것입니다.
variables.tf
원래 질문에서 원하는 상태로 업데이트하십시오 . 이 솔루션은 해당 입력을 요구 사항으로 사용했습니다.
http
자원을 이것으로 업데이트하십시오 . 이것은 terraform plan
더미 URL이고 Terraform이이 리소스를 빌드 할 때 요청을 시도하기 때문에 초기에 실패합니다 . URL이 어떻게 보이는지 테스트하는 좋은 방법 locals {}
은이 스 니펫에 있는 샘플 블록입니다. 이 지역 블록은 필요하지 않지만 URL이 생성되는 방법을 보여줍니다.
data "http" "config-map" {
for_each = toset(flatten([
for cm in var.cloud-configmap : [
for cm-file in cm.cm-files :
cm-file.url
]
]))
url = format("https://%s", each.key)
request_headers = {
Accept = "text/plain"
}
}
# EXAMPLE showing how the URLs are created
locals {
urls = toset(flatten([
for cm in var.cloud-configmap : [
for cm-file in cm.cm-files :
format("https://%s", cm-file.url)
]
]))
}
output "urls" { value = local.urls }
kubernetes_config_map
리소스를 다음으로 업데이트하십시오 .resource "kubernetes_config_map" "configmap" {
for_each = var.cloud-configmap
metadata {
name = each.value.name
namespace = each.value.namespace
}
data = {
for cm-file in each.value.cm-files :
cm-file.url => cm-file.data-keyname
}
}
이러한 각 경우에서 for 루프를 사용하고 http
for_each가 for와 중첩되는 경우에 유의하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다