我要在terraform中创建一个插件,并说我想添加一个仅在提供另一个模式时才能调用的模式。
"host_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("host_name", nil),
Description: "Should give name in FQDN if being used for DNS puposes .",
},
"enableDns": &schema.Schema{
Type: schema.TypeString,
Required: true,
DefaultFunc: schema.EnvDefaultFunc("host_name", nil),
Description: "Should give name in FQDN if being used for DNS puposes .",
所以在这里,我只想在传递host_name时才在.tf文件中传递enableDNs字符串,如果未给出并且我传递enableDNs它将引发错误,有人可以指出我的做法
答案 0 :(得分:0)
Terraform提供商实际上没有一流的方法来根据ConflictsWith
属性以外的其他参数有条件地进行操作。
有一种使用CustomizeDiff
进行交叉参数处理的方法,但是它仅在真正需要的几个地方使用。
通常,提供程序将简单地验证各个参数,并且如果提供程序正在使用的API需要交叉参数验证,那么只有在应用程序返回API错误时才能看到此验证。
有关在进行交叉参数验证时使用CustomizeDiff
引发计划时间错误的示例,请参见the aws_elasticache_cluster
resource:
CustomizeDiff: customdiff.Sequence(
func(diff *schema.ResourceDiff, v interface{}) error {
// Plan time validation for az_mode
// InvalidParameterCombination: Must specify at least two cache nodes in order to specify AZ Mode of 'cross-az'.
if v, ok := diff.GetOk("az_mode"); !ok || v.(string) != elasticache.AZModeCrossAz {
return nil
}
if v, ok := diff.GetOk("num_cache_nodes"); !ok || v.(int) != 1 {
return nil
}
return errors.New(`az_mode "cross-az" is not supported with num_cache_nodes = 1`)
},