我正在用terraform部署我的基础设施,但是对于AKS,我使用ARM模板化,因为它具有TF中还没有的某些功能。 因此,在我的tf模板中,我定义了以下资源来部署ARM模板:
resource "azurerm_template_deployment" "k8s" {
name = "${var.environment}-aks-deployment"
resource_group_name = "${azurerm_resource_group.kubernetes.name}"
parameters = {
workspaceResourceId = "${azurerm_log_analytics_workspace.k8s-law.id}"
aksClusterName = "fntm-k8s-${var.environment}"
subnetKubernetes = "${azurerm_subnet.kubernetes.id}"
servicePrincipal = "${azuread_service_principal.k8s_sp.application_id}"
clientSecret = "${random_string.sp_password.result}"
clientAppID = "${var.clientAppID}"
serverAppID = "${var.serverAppID}"
tenantID = "${var.tenant_id}"
serverAppSecret = "${var.serverAppSecret}"
}
template_body = "${file("kubernetes/azuredeploy.json")}"
deployment_mode = "Incremental"
}
集群的部署进行得很好,但是之后,我需要从AKS集群中获取数据,该数据将由其他模块使用。 如果我将数据资源用于AKS,则它将尝试在部署集群数据之前获取集群数据。所以下面的部分不起作用。
data "azurerm_kubernetes_cluster" "kubernetes" {
name = "fntm-k8s-${var.environment}"
resource_group_name = "${azurerm_resource_group.kubernetes.name}"
}
我认为可能是一个depends_on,但这在数据资源中不受支持。
也许有人知道如何从具有输出的AKS集群中获取数据属性node_resource_group吗?或其他任何想法/解决方案?
output "k8s_resource_group" {
value = "${lookup(azurerm_template_deployment.k8s.outputs, "?????")}"
}
答案 0 :(得分:0)
在您的azuredeploy.json中,将其用作输出:
"outputs": {
"aksClusterName": {
"type": "string",
"value": "[parameters('aksClusterName')]"
}
}
在您的tf文件中使用:
output "aksClusterName" {
value = "${azurerm_template_deployment.k8s.outputs["aksClusterName"]}"
}
data "azurerm_kubernetes_cluster" "kubernetes" {
name = ""
resource_group_name = "${azurerm_resource_group.kubernetes.name}"
}
output "k8s_resource_group" {
value = "${data.azurerm_kubernetes_cluster.kubernetes.node_resource_group}"
}