嵌套结构的tfvars文件中变量terraform的设置值
terraform已调整其授权 在main.tf[用于sql配置]中,我现在有:嵌套结构的tfvars文件中变量terraform的设置值,terraform,Terraform,terraform已调整其授权 在main.tf[用于sql配置]中,我现在有: resource "google_sql_database_instance" "master" { name = "${random_id.id.hex}-master" region = "${var.region}" database_version = "POSTGRES_9_6" # allow direct access from work ma
resource "google_sql_database_instance" "master" {
name = "${random_id.id.hex}-master"
region = "${var.region}"
database_version = "POSTGRES_9_6"
# allow direct access from work machines
ip_configuration {
authorized_networks = "${var.authorized_networks}"
require_ssl = "${var.sql_require_ssl}"
ipv4_enabled = true
}
}
在哪里
在variables.tf中,我有
variable "authorized_networks" {
description = "The networks that can connect to cloudsql"
type = "list"
default = [
{
name = "work"
value = "xxx.xxx.xx.xxx/32"
}
]
}
其中xxx.xxx.xx.xxx是我希望允许的ip地址。但是,我不希望将其放在variables.tf文件中,而是放在非源代码控制的.tfvars文件中
对于具有简单值的变量,这很容易,但我不清楚如何使用嵌套结构。将xxx.xxx.xx.xxx替换为变量[例如var.work\u ip]会导致错误
variables may not be used here
有什么见解吗?如果您在主配置中完全忽略了
default
参数,您将把变量“authorized\u networks”
标记为所需的输入变量,Terraform将检查该变量,以确保调用者设置了该变量
如果这是根模块变量,则可以使用以下语法在.tfvars
文件中为其提供值:
authorized_networks = [
{
name = "work"
value = "xxx.xxx.xx.xxx/32"
}
]
如果此文件是通过Terraform的包装自动化以编程方式生成的,您还可以将其写入.tfvars.json
文件,并使用json语法,这通常更容易在其他语言中稳健地构建:
{
"authorized_networks": [
{
"name": "work",
"value": "xxx.xxx.xx.xxx/32"
}
]
}
您可以使用-var file
选项在命令行上明确指定此文件,也可以在运行Terraform时在当前工作目录中为其指定一个以.auto.tfvars
或.auto.tfvars.json
结尾的名称,然后Terraform将自动查找并加载它
将某些内容置于版本控制之外的一个常见原因是,它是在更广泛的系统中的其他位置配置的动态设置,而不是在版本控制中固定的值。如果这在这里是真的,那么另一种策略是将该设置保存在Terraform能够通过其访问的配置数据存储中,然后写入Terraform配置,直接从发布位置检索该设置 例如,如果您在此处建模的网络是一个Google Cloud Platform子网络,并且它有一个固定名称或一个可以在Terraform中系统地导出的名称,则您可以使用
Google\u compute\u子网络
数据源检索此设置:
data "google_compute_subnetwork" "work" {
name = "work"
}
在配置的其他地方,您可以使用data.google\u compute\u subnetwork.work.ip\u cidr\u range
访问此网络的cidr块定义
主要的Terraform提供商有各种各样的数据源,包括从目标平台检索特定一级对象的数据源,以及访问配置存储(如AWS Systems Manager Parameter Store或HashiCorp Consor)的更通用的数据源。直接访问必要的信息或在配置存储中“在线”发布这些信息,有助于更大的系统有效地集成子系统。如果在主配置中完全省略
默认值参数,则将变量“authorized\u networks”
标记为所需的输入变量,然后,哪个Terraform将进行检查以确保调用者设置了它
如果这是根模块变量,则可以使用以下语法在.tfvars
文件中为其提供值:
authorized_networks = [
{
name = "work"
value = "xxx.xxx.xx.xxx/32"
}
]
如果此文件是通过Terraform的包装自动化以编程方式生成的,您还可以将其写入.tfvars.json
文件,并使用json语法,这通常更容易在其他语言中稳健地构建:
{
"authorized_networks": [
{
"name": "work",
"value": "xxx.xxx.xx.xxx/32"
}
]
}
您可以使用-var file
选项在命令行上明确指定此文件,也可以在运行Terraform时在当前工作目录中为其指定一个以.auto.tfvars
或.auto.tfvars.json
结尾的名称,然后Terraform将自动查找并加载它
将某些内容置于版本控制之外的一个常见原因是,它是在更广泛的系统中的其他位置配置的动态设置,而不是在版本控制中固定的值。如果这在这里是真的,那么另一种策略是将该设置保存在Terraform能够通过其访问的配置数据存储中,然后写入Terraform配置,直接从发布位置检索该设置
例如,如果您在此处建模的网络是一个Google Cloud Platform子网络,并且它有一个固定名称或一个可以在Terraform中系统地导出的名称,则您可以使用Google\u compute\u子网络
数据源检索此设置:
data "google_compute_subnetwork" "work" {
name = "work"
}
在配置的其他地方,您可以使用data.google\u compute\u subnetwork.work.ip\u cidr\u range
访问此网络的cidr块定义
主要的Terraform提供商有各种各样的数据源,包括从目标平台检索特定一级对象的数据源,以及访问配置存储(如AWS Systems Manager Parameter Store或HashiCorp Consor)的更通用的数据源。直接访问必要的信息或在配置存储中“在线”发布这些信息,有助于更大的系统有效地集成子系统。您能否编辑您的问题,使其成为可运行的问题?从这个更加精简的背景中,你还不能100%清楚地知道你想要达到什么目标或限制。你看到了吗?该线程似乎有一些潜在的解决方法,可能使用空资源。我自己还没有用过,所以不能提供进一步的见解…你能编辑你的问题使其成为一个可运行的问题吗?从这个更加精简的背景中,你还不能100%清楚地知道你想要达到什么目标或限制。你看到了吗?该线程似乎有一些潜在的解决方法,可能使用空资源。我自己还没有用过,所以无法提供进一步的见解。。。