【发布时间】:2019-06-28 07:58:17
【问题描述】:
我用terraform、kubernetes、cassandra和elassandra做了一些实验,我都是用模块分隔的,但是现在我不能删除特定的模块。
我正在使用 gitlab-ci,并将 terraform 状态存储在 AWS 后端。
这意味着,每次我在 terraform 文件中更改基础架构时,在 git push 之后,基础架构都会更新为运行 terraform init、terraform plan 和 terraform apply 的 gitlab-ci。
我的 terraform 主文件是这样的:
# main.tf
##########################################################################################################################################
# BACKEND #
##########################################################################################################################################
terraform {
backend "s3" {}
}
data "terraform_remote_state" "state" {
backend = "s3"
config {
bucket = "${var.tf_state_bucket}"
dynamodb_table = "${var.tf_state_table}"
region = "${var.aws-region}"
key = "${var.tf_key}"
}
}
##########################################################################################################################################
# Modules #
##########################################################################################################################################
# Cloud Providers: -----------------------------------------------------------------------------------------------------------------------
module "gke" {
source = "./gke"
project = "${var.gcloud_project}"
workspace = "${terraform.workspace}"
region = "${var.region}"
zone = "${var.gcloud-zone}"
username = "${var.username}"
password = "${var.password}"
}
module "aws" {
source = "./aws-config"
aws-region = "${var.aws-region}"
aws-access_key = "${var.aws-access_key}"
aws-secret_key = "${var.aws-secret_key}"
}
# Elassandra: ----------------------------------------------------------------------------------------------------------------------------
module "k8s-elassandra" {
source = "./k8s-elassandra"
host = "${module.gke.host}"
username = "${var.username}"
password = "${var.password}"
client_certificate = "${module.gke.client_certificate}"
client_key = "${module.gke.client_key}"
cluster_ca_certificate = "${module.gke.cluster_ca_certificate}"
}
# Cassandra: ----------------------------------------------------------------------------------------------------------------------------
module "k8s-cassandra" {
source = "./k8s-cassandra"
host = "${module.gke.host}"
username = "${var.username}"
password = "${var.password}"
client_certificate = "${module.gke.client_certificate}"
client_key = "${module.gke.client_key}"
cluster_ca_certificate = "${module.gke.cluster_ca_certificate}"
}
这是我的目录树:
.
├── aws-config
│ ├── terraform_s3.tf
│ └── variables.tf
├── gke
│ ├── cluster.tf
│ ├── gcloud_access_key.json
│ ├── gcp.tf
│ └── variables.tf
├── k8s-cassandra
│ ├── k8s.tf
│ ├── limit_ranges.tf
│ ├── quotas.tf
│ ├── services.tf
│ ├── stateful_set.tf
│ └── variables.tf
├── k8s-elassandra
│ ├── k8s.tf
│ ├── limit_ranges.tf
│ ├── quotas.tf
│ ├── services.tf
│ ├── stateful_set.tf
│ └── variables.tf
├── main.tf
└── variables.tf
我在这里被屏蔽了:
->我要删除模块k8s-cassandra
- 如果我评论删除
main.tf(module "k8s-cassandra" {...) 中的模块,我会收到此错误:
地形计划... 获取状态锁。这可能需要一些时间... 释放状态锁。这可能需要一些时间...
错误:module.k8s-cassandra.kubernetes_stateful_set.cassandra:module.k8s-cassandra.provider.kubernetes 的配置不存在;所有操作都需要提供程序配置块
- 如果我在
terraform init和terraform plan之间插入terraform destroy -target=module.k8s-cassandra -auto-approve仍然无法正常工作。
有人可以帮帮我吗? 谢谢:)
【问题讨论】:
-
kubernetes提供程序在哪里定义? -
@SomeGuyOnAComputer,我在两个文件中都定义了 k8s.tf,provider "kubernetes" { version="~> 1.5.0" host="${var.host}" username="$ {var.username}" password="${var.password}" client_certificate="${base64decode(var.client_certificate)}" client_key="${base64decode(var.client_key)}" cluster_ca_certificate="${base64decode(var .cluster_ca_certificate)}" } 资源 "kubernetes_namespace" "terraform-elassandra-namespace" { 元数据 { 注释 { name = "terraform-elassandra-namespace" } 标签 { app = "elassandra" } name = "terraform-elassandra-namespace" } }
-
尝试只在父
main.tf定义它 -
如果你注释了代码,取消注释,然后对目标进行 terraform destroy,然后注释代码,你应该被设置...
-
是否有任何代码可以将资源引用到
module.k8s-cassandra.XXX?
标签: kubernetes terraform