terraform源码解析(init命令)

开个新坑,慢慢填~ 主要目的还是想把源码吃透以后把Terraform的内核吃掉,这样我们可以仅依赖于它的模板解析和grpc调用provider去生成资源

在Goland里,如果想调试Terraform代码,通过一些断点来挖掘深层次的逻辑,通过如下代码的提示,我们可以通过设置环境变量TF_FORK=0来达到这一目的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
func main() {
	os.Exit(realMain())
}

func realMain() int {
	var wrapConfig panicwrap.WrapConfig

	// don't re-exec terraform as a child process for easier debugging
	if os.Getenv("TF_FORK") == "0" {
		return wrappedMain()
	}

    ...
}

在进入 initCommand 之前,Terraform会在本地的目录上搜索已经存在的provider并记录到如下的结构中

terraform-init-1