google-cloud-platform - Terraformer合并多个tfstate文件
问题描述
我正在使用 terraformer(不是 terraform,请查看此 https://github.com/GoogleCloudPlatform/terraformer)导入一些托管在 Google Cloud 上的基础设施,请参阅下面的命令。
IE:terraformer import google --resources=networks,subnetworks,firewall,routes,forwardingRules,vpnTunnels --regions=europe-blabla1 --projects=my_project
它工作正常,命令的输出是一个单独的文件夹,其中包含我导入的每个资源的 tfstate 和 tf 文件。
2021/05/18 11:03:20 google Connecting....
2021/05/18 11:03:20 google save firewall
2021/05/18 11:03:20 google save tfstate for firewall
2021/05/18 11:03:20 google save routes
2021/05/18 11:03:20 google save tfstate for routes
2021/05/18 11:03:20 google save forwardingRules
2021/05/18 11:03:20 google save tfstate for forwardingRules
2021/05/18 11:03:20 google save vpnTunnels
2021/05/18 11:03:20 google save tfstate for vpnTunnels
2021/05/18 11:03:20 google save networks
2021/05/18 11:03:20 google save tfstate for networks
2021/05/18 11:03:20 google save subnetworks
2021/05/18 11:03:20 google save tfstate for subnetworks
现在我想要完成的是将这些多个 tfstate 文件合并为一个,以便拥有堆栈,让我们说:一个用于网络,对于 iam、实例等也是如此。
我想知道是否有人能够做到这一点?或者是否有更好的方法来实现这一点?
解决方案
我去过那里并使用Terraformer
然后合并状态文件,这是我编写的用于进行状态文件迁移(合并)的脚本:
#!/usr/bin/env bash
state_pull() {
echo ">> state pull"
cd "$1" || return 1
terraform init
terraform state pull >terraform.tfstate
cd ..
return 0
}
state_mv() {
echo ">> state mv"
cd "$2" || return 1
terraform init
for i in $(terraform state list); do
terraform state mv -state-out="../$1/terraform.tfstate" "$i" "$i"
done
cd ..
return 0
}
state_push() {
echo ">> state push"
cd "$1" || return 1
terraform state push terraform.tfstate
cd ..
return 0
}
cleanup() {
echo ">> cleanup"
cd "$1" || return 1
rm terraform.tfstate
rm terraform.tfstate.*
cd ..
return 0
}
# Print help text and exit.
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
echo "Usage: tfmv.sh [options]"
echo
echo "Examples:"
echo
echo " - ./tfmv.sh stack1-migrate-to stack2-migrate-from"
echo " - ./tfmv.sh app data"
exit 1
fi
echo "> START"
echo ">> TF = $(terraform version)..."
state_pull "$1"
state_mv "$1" "$2"
state_push "$1"
# cleanup "$1"
echo "> FINISHED"
如果这看起来很花哨,您可以使用https://github.com/minamijoyo/tfmigrate,它使用 Go 做得更好。
推荐阅读
- python - 如何将图像嵌入到 Plotly go 表的单元格中?
- ruby-on-rails - 我正在尝试“rails 服务器”,但在安装 webpack 和 yarn 时遇到问题
- javascript - 隐藏导航
- php - 将 google app script web app 更改为 php 网站
- reactjs - Reactjs Swiper 自动播放功能似乎没有正确实现
- css - 滚动视图中的 Flex 内容ContainerStyle React Native
- php - woocommerce 根据购物车页面中的数量和产品 ID 有条件地隐藏/显示内容
- ios - 封装类中如何处理tableView的scrollView事件?
- reactjs - 无法在hackerearth上运行reactjs代码
- python - 在python中排列字符图