terraform - gitlab-ci terraform 状态锁文件根除
问题描述
在尝试迁移我的后端配置以使用带有 gitlab 的新状态存储时,我遇到了这个光荣的问题:我的状态被锁定。
- 我无法强制解锁状态,因为后端需要重新初始化
- 我无法强制解锁 - 强制状态解锁,因为后端需要重新初始化
- 我无法使用 -lock=false 设置后端,因为启动这整个混乱的相同凭据似乎无法推送除了有毒锁定令牌之外的东西:
Error: Error copying state from the previous "local" backend to the newly configured
"http" backend:
Failed to upload state: POST http://internal.host/api/v4/projects/14/terraform/state/project-name giving up after 3 attempts
我忍无可忍了。我确实尝试检查 /var/log/gitlab/gitlab-rails/production_json.log 中的喋喋不休是否提供了相关的东西,并且对它没有更多的把握和理智。
是否有一个sudo pretty-please-with-sugar-on-top-clean-the-fn-lock
没有任何把关的命令?
解决方案
我在将 terraform 状态文件从 s3 迁移到 gitlab 时遇到了同样的问题。我造成了这个问题,因为我在 backend_config unlock_address 中有错字,并且在 init 仍在运行时插入了 Control+C。terraform init 没有要求我将状态从 s3 迁移到 gitlab,但我被锁定并且强制解锁无法以任何方式工作。
我带来的解决方案:
- 将 backend.tf 配置为使用之前使用的 lock_address 作为解锁地址并重新初始化 terraform。
- Terraform 计划现在应该可以正常工作了。
- 重新配置 backend.tf 以继续进行状态迁移。通过再次迁移,使用您想要的 URL 重新初始化 terraform 状态 URL。
例如,这是我使用的 terraform init,其中所需的地址是 <TF_State_Name> 并且我有一个错字 <TF_State_Name_B> 。我用 control+C 打断了:
terraform init \
-backend-config="address=https://<gitlab_url>/api/v4/projects/<ProjectID>/terraform/state/<TF_State_Name>" \
-backend-config="lock_address=https://<gitlab_url>/api/v4/projects/<ProjectID>/terraform/state/<TF_State_Name>/lock" \
-backend-config="unlock_address=https://<gitlab_url>/api/v4/projects/<ProjectID>/terraform/state/<TF_State_Name_B>/lock" \
-backend-config="username=<user>" \
-backend-config="password=<password>" \
-backend-config="lock_method=POST" \
-backend-config="unlock_method=DELETE" \
-backend-config="retry_wait_min=5"
这就是我重新配置 terraform init 以绕过锁的方式。
terraform init \
-backend-config="address=https://<gitlab_url>/api/v4/projects/<ProjectID>/terraform/state/<TF_State_Name_B>" \
-backend-config="lock_address=https://<gitlab_url>/api/v4/projects/<ProjectID>/terraform/state/<TF_State_Name_B>/lock" \
-backend-config="unlock_address=https://<gitlab_url>/api/v4/projects/<ProjectID>/terraform/state/<TF_State_Name_B>/lock" \
-backend-config="username=<user>" \
-backend-config="password=<password>" \
-backend-config="lock_method=POST" \
-backend-config="unlock_method=DELETE" \
-backend-config="retry_wait_min=5"
最后,您应该重新配置到所需的地址。
推荐阅读
- amazon-web-services - 如何在 AWS QuickSight 中计算一个月内周六周日(工作日)的数量
- python - 如何在 python 中使用 Tkinter 制作 3 个(或 4 个)嵌套绑定的组合框?
- linux - Kubernetes 是如何实现 Linux 能力的?
- wso2 - WSO2 API 管理器 - WSO2 分析服务器 - 删除格式错误的事件错误
- javascript - 使用带有 react-mic 问题的 IBM Watson Speech-to-Text
- html - 如何使用 beautifulsoup 在 find_all 区间内查找特定的标记区间
- nusmv - 当我使用 nusmv 检查 LTL 规范时,我遇到了一些语法错误问题。错误信息是:at token "LTLSPEC": syntax error
- xslt - 如何将模板结果替换为 XML 的另一部分
- python - Python pandas 如果列值是列表,则使用单独的列表值创建新列
- visual-studio-code - VSC 扩展不推荐更多路径或内容