gitlab-ci terraform状态锁定文件的根除

时间:2020-07-06 04:58:56

标签: terraform gitlab-ci

在尝试迁移我的后端配置以在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命令没有任何看门功能?

1 个答案:

答案 0 :(得分:0)

将terraform状态文件从s3迁移到gitlab时遇到了相同的问题。 我造成了这个问题,因为在backend_config unlock_address中输入错误,并且在初始化仍在运行时插入了Control + C。 terraform初始化没有要求我将状态从s3迁移到gitlab,但是我被锁定了,强制解锁无法以任何方式进行。

我附带的解决方案:

  1. 配置backend.tf以将先前使用的lock_address用作解锁地址并重新初始化terraform。
  2. Terraform计划现在应该可以正常工作。
  3. 重新配置backend.tf以继续状态迁移。通过再次迁移,用所需的地形状态URL重新初始化。

例如,这是我在所需地址为且输入错字的情况下使用的地形初始化。 我被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"

最后,您应该重新配置为所需的地址。