我正在尝试用GitHub作为源代码下载一个Terraform模块。模块源如下:
source = "github.com/my-org/tf-modules//azure/func-app/v1?ref=v2.0.0-major-1"但是,当我执行terraform init时,我会得到以下错误:
│ Could not download module "planner" (main.tf:15) source code from "github.com/myorg/tf-modules?ref=v2.0.0-major-1": error downloading
│ 'https://github.com/my-org/tf-modules.git?ref=v2.0.0-major-1': C:\Program Files\Git\cmd\git.exe exited with 128: Cloning into '.terraform\modules\planner'...
│ bash: /dev/tty: No such device or address
│ error: failed to execute prompt script (exit code 1)
│ fatal: could not read Username for 'https://github.com': No such file or directory通常,当我试图使用Git克隆一个存储库时,它会提示我输入用户名和密码(令牌),但在这里,它不是在询问,只是因为失败而退出。
我不能使用ssh作为Git源代码,所以必须使用https,那么如何为模块源指定用户名并避免此错误呢?
发布于 2021-12-21 18:38:56
Terraform不支持模块安装过程中的交互式提示,包括来自Git的提示,因此要为Terraform模块使用git源代码,需要您以不同的方式指定凭据,这可能是the gitcredentials document中描述的各种选项之一。
特别是对于用户名,您可以配置Git来重写它给定的任何URL,方法是匹配一个前缀,然后使用Git配置中的insteadOf配置设置替换该前缀。
例如,当Git看到在github.com上缺少用户名的URL时,它将告诉Git插入用户名“示例”:
[url "https://example@github.com/"]
insteadOf = https://github.com/不过,这只会指定用户名。对于非交互式地提供密码或令牌,您仍然需要一个单独的解决方案。
您提到SSH在您的情况下是不合适的,但是为了完整性(如果将来有人找到了这个答案),我将注意到您也可以使用这种技术来告诉Git使用SSH而不是https:
[url "git@github.com:"]
insteadOf = https://github.com/在可以使用SSH的地方,使用SSH的一个优点是,它有一种标准的方法来非交互地提供凭据(使用授权的私钥),因此它可以同时整洁地解决问题的两个部分。
在这两种情况下,我们都可以使用Git配置将所有用户共享的存储库的一般位置(指定为没有特定凭据信息的https: URL )与一个特定用户将如何连接到该存储库并对其进行身份验证的详细信息整齐地分开。
https://stackoverflow.com/questions/70439671
复制相似问题