[我用terraform
,kubernetes
,cassandra
和elassandra
做了一些实验,我按模块分开了,但是现在我不能删除特定的模块。
我正在使用gitlab-ci
,并且将Terraform状态存储在AWS后端上。这意味着,每次我在terraform文件中更改基础结构时,在git push
之后,都将使用运行gitlab-ci
,terraform init
和terraform plan
的terraform apply
更新基础结构。
我的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" {...
)中的模块,则会收到此错误:TERRAFORM PLAN ...获取状态锁。这可能需要一些时间...释放状态锁。这可能需要一些时间...
错误:module.k8s-cassandra.kubernetes_stateful_set.cassandra:不存在module.k8s-cassandra.provider.kubernetes的配置;所有操作都需要提供者配置块
terraform destroy -target=module.k8s-cassandra -auto-approve
和terraform init
之间仍然插入terraform plan
仍然不起作用。有人可以帮助我吗?谢谢:)
我用terraform,kubernetes,cassandra和elassandra进行了一些实验,我按模块将它们分开,但是现在我无法删除特定的模块。我正在使用gitlab-ci,并存储terraform ...
此错误消息的含义是,Terraform依靠provider "kubernetes"
模块内部的k8s-cassandra
块来配置AWS提供程序。通过从源代码中删除模块,您已隐式删除了该配置,因此无法删除状态中已经存在的现有对象-这样做所需的提供程序配置不存在。