kubernetes - Terraform - 交错的提供者群体
问题描述
过去一周,我一直在考虑使用 Terraform 实现 Kubernetes,但我似乎遇到了生命周期问题。
虽然我可以使 Kubernetes 资源依赖于正在启动的集群,但该KUBECONFIG
文件不会在terraform apply
.
Kubernetes
resource "kubernetes_service" "example" {
...
depends_on = ["digitalocean_kubernetes_cluster.example"]
}
resource "digitalocean_kubernetes_cluster" "example" {
name = "example"
region = "${var.region}"
version = "1.12.1-do.2"
node_pool {
name = "woker-pool"
size = "s-1vcpu-2gb"
node_count = 1
}
provisioner "local-exec" {
command = "sh ./get-kubeconfig.sh" // gets KUBECONFIG file from digitalocean API.
environment = {
digitalocean_kubernetes_cluster_id = "${digitalocean_kubernetes_cluster.k8s.id}"
digitalocean_kubernetes_cluster_name = "${digitalocean_kubernetes_cluster.k8s.name}"
digitalocean_api_token = "${var.digitalocean_token}"
}
}
虽然我可以使用 API 拉下 CONFIG 文件,但 terraform 不会使用这个文件,因为terraform plan
它已经在运行
我已经看到了一些使用三元运算符 ( ) 的示例,但除了未创建的集群之外resource ? 1 : 0
,我还没有找到解决方法count
-target
理想情况下,我想用一个 terraform repo 来创建它。
解决方案
事实证明,digitalocean_kubernetes_cluster
资源具有可以传递给provider "kubernetes" {}
类似的属性:
resource "digitalocean_kubernetes_cluster" "k8s" {
name = "k8s"
region = "${var.region}"
version = "1.12.1-do.2"
node_pool {
name = "woker-pool"
size = "s-1vcpu-2gb"
node_count = 1
}
}
provider "kubernetes" {
host = "${digitalocean_kubernetes_cluster.k8s.endpoint}"
client_certificate = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.client_certificate)}"
client_key = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.client_key)}"
cluster_ca_certificate = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate)}"
}
它导致一个提供者依赖于另一个提供者,并相应地采取行动。
推荐阅读
- c++ - 如何确定鼠标光标所在的控制台字符?
- sql - 将 SQL Server 查询转换为 Oracle
- python-3.x - 熊猫没有按预期处理文件
- javascript - 如何等待输入在 html 页面中填写,然后在 javascript 中将其值打印到控制台?
- react-native - 如何禁用 FlatList 自动惯性滑行
- interface - 带 Dart/Flutter 的雨伞导入
- html - 使用 flex 时在 div 上滚动而不是整个页面
- javascript - Gulp-Sourcemaps:Chrome DevTools 错误地引用了已编译 js 的源代码
- ruby - 正则表达式模式查看字符串是否包含范围内的数字
- c# - CRUD Edit 无法编辑主键