Terraform配置GCP VM时如何仅对Windows系统添加启动脚本元数据
解决方案
方法1:赋值为null(更简洁,推荐Terraform 0.12+版本使用)
Terraform在解析Map结构时,会自动移除值为null的键,你只需要把原来三元运算的空字符串改为null即可:
meta_data_default = { google-monitoring-enable = 1 google-logging-enable = 1 windows-startup-script-ps1 = var.os_distro == "windows" ? file("disk.ps1") : null }
方法2:使用merge函数动态合并Map
如果需要兼容更老的Terraform版本,或者需要批量控制多个动态键,可以用merge函数合并固定配置和动态配置:
meta_data_default = merge( # 固定的公共元数据配置 { google-monitoring-enable = 1 google-logging-enable = 1 }, # 仅当os_distro为windows时,返回包含启动脚本配置的Map,否则返回空Map var.os_distro == "windows" ? { windows-startup-script-ps1 = file("disk.ps1") } : {} )
原配置问题说明
你之前的写法将windows-startup-script-ps1键固定写在了Map结构中,三元运算仅控制该键的取值,所以即使条件不成立,键仍然会保留,只是值为空字符串,不符合预期。
内容的提问来源于stack exchange,提问作者Gopal
相关产品推荐
相关产品推荐

